热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

css的预处理器scss语法及与sass的区别

本文主要分享【现在做web前端是不是必须会小程序开发】,技术文章【css的预处理器scss语法及与sass的区别】为【皓皓皓皓啊】投稿,如果你遇到相关问题,本文相关知识或能到你。现在做web前端是不

本文主要分享【现在做web前端是不是必须会小程序开发】,技术文章【css的预处理器scss语法及与sass的区别】为【皓皓皓皓啊】投稿,如果你遇到相关问题,本文相关知识或能到你。

现在做web前端是不是必须会小程序开发

css预处理器 SCSS SASS
sass是一款css的预编译器
定义了一种新的编程语言,为css增加了一些编程的特性,开发者使用这种语言进行编码后,代码需要编译成css才能被浏览器理解

sass比css更像一门编程语言,它可以有函数,变量,控制语句,导入,嵌套等高级功能

类似的css预编译器还有less,stylus

有了这些功能,sass可以:

提供变量,实现一键切换主题色之类的功能用嵌套写法减少选择器的重复书写用混用功能解决代码复用问题用函数进行复杂的运算把样式代码模块化,减少不同模块的代码间不必要的相互影响,提高代码的安全性

安装
安装sass

写好的scss/sass文件会在运行代码后直接编译为同名的css文件

SASS和SCSS
scss其实就是sass 3为了兼容css引入的新语法
css的语法是选择器+声明块
声明块是由花括号和声明组成的

最早的SASS的语法格式被称为缩进格式,使用"缩进"代替"花括号"

#sidebar {
  width: 30%;
  background-color: #faa;
}

为:

#sidebar
  width: 30%
  background-color: #faa

SASS 3引入了新语法,也就是SCSS,其语法完全兼容CSS 3并且继承了SASS的强大功能,也就是说,任何标准的CSS3样式表都是具有相同语义的
有效SCSS文件

SASS和SCSS的大部分扩展,例如:变量,parent reference 和 指令 都是一样的;唯一不同的就是 SCSS 需要使用分号和花括号而不是换行和缩进

变量

在css的基础上,Sass提供了一些名为SassScript的新功能。
SassScript 可作用于任何属性,允许属性使用变量,算数运算等额外功能。

变量的写法为以美元符号$开头,赋值方法和css属性一样

$width: 10px;

使用变量:

#main {
  width: $width;
}

编译为css:

#main {
  width: 10px;
}

如果变量类型为字符串,一般不需要加引号但是有些特殊情况,比如字符串中有双斜杠"//",就需要用英文状态下的双引号或者单引号包裹字符串

// 变量需要定义在使用之前
$position: "absolute";
$mainTxtColor: '#333';

// 应用
#main {
  position: $position;
  color: $mainTxtColor;
}

因为//在SASS中表示单行注释

除了简单赋值,Sass还可以定义类似数组的变量
$animals: puppy kitty chick;这样的变量可以配合循环使用

简单计算

Sass中支持在使用变量时进行简单的加减乘除

$width: 10px;

#main {
  width: $width / 2;
  height: $width * 2;
}

编译为css:

#main {
  width: 5px;
  height: 20px;
}
插值法

#{}插值几乎可以在Sass样式表中的任何地方使用

$name: "mail";
$top-or-bottom: "top";
$left-or-right: "left";

.icon-#{$name} {
  background-image: url("/icons/#{$name}.svg");
  position: absolute;
  #{$top-or-bottom}: 0;
  #{$left-or-right}: 0;
}

编译结果:

.icon-mail {
  background-image: url("/icons/mail.svg");
  position: absolute;
  top: 0;
  left: 0;
}

就相当于替换

嵌套

如下代码:

main .double .item .links {
  text-align: center;
}

main .double .item .links a {
  margin-right: 20px;
}

如果遇到比较复杂的界面,为了不影响其他元素的样式,会把选择器写的尽可能精确,会很长

sass的嵌套可以解决这个问题

比如上面的两个选择器选择的是父子元素,在Sass中就可以写成:

main .double .item .links {
  text-align: center;
  a {
    margin-right: 20px;
  }
}

把共同选择器提取了出来

嵌套规则

Sass中允许将一套CSS样式嵌入进另一套CSS样式中
内层的样式将外层的选择器作为父选择器

嵌套

父选择器 &
在嵌套CSS样式时,有时需要直接使用父选择器,比如当给某个元素设置hover时:

hover

或者特殊一点的用法:

复用:mixin/include

很多代码都有解决复用的方案

可以用混合(mixin/include)来定义可重复使用的样式

无参数混合
css中使用重复类名来解决代码的复用
css:
.square {
  width: 100px;
  height: 100px;
}

html:


  
...
...

用mixin/include来解决代码复用:

@mixin square {
  width: 100px;
  height: 100px;
}

// 应用:
.user-avatar {
  @include square;
}
.admin-avatar {
  @include square;
}

上述代码定义了一个可以重复使用的块square
用@mixin 定义,@include 引用

编译结果:

.user-avatar {
  width: 100px;
  height: 100px;
}

.admin-avatar {
  width: 100px;
  height: 100px;
}

有参数混合

参数无默认值

稍作修改:

 @mixin square($size) {
  width: $size;
  height: $size;
}

// 应用
.avatar {
  @include square(100px);
}

使用时向$size传入值

参数有默认值

直接定义默认值:

@mixin square($size: 100px) {
  width: $size;
  height: $size;
}

// 不传参数就会使用默认的值 100px
.avatar {
  @include square;
}

// 传入参数就会使用传入的值 200px
.avatar-200 {
  @include square($size: 200px);
}
Sass文件的引入

Sass

用@import

@each

each

@for
@for $i from 1 through 6{
  //$i的值可以取1,2,3,4,5,6一般配合nth-child(),如果使用from ... to ..就只能取到5
}

本文《css的预处理器scss语法及与sass的区别》版权归皓皓皓皓啊所有,引用css的预处理器scss语法及与sass的区别需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • cJinja:C++编写的轻量级HTML模板引擎
    本文介绍了cJinja,这是一个用C++编写的轻量级HTML模板解析库。它利用ejson来处理模板中的数据替换(即上下文),其语法与Django Jinja非常相似,功能强大且易于学习。 ... [详细]
  • 本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ... [详细]
  • 掌握Mosek矩阵运算,轻松应对优化挑战
    本篇文章继续深入探讨Mosek学习笔记系列,特别是矩阵运算部分,这对于优化问题的解决至关重要。通过本文,您将了解到如何高效地使用Mosek进行矩阵初始化、线性代数运算及约束域的设定。 ... [详细]
  • 本文探讨了在C语言编程中,如何有效避免多文件项目中的重定义问题,通过合理使用预处理器指令和extern关键字,确保代码的健壮性和可维护性。 ... [详细]
  • Vue 3.0 翻牌数字组件使用指南
    本文详细介绍了如何在 Vue 3.0 中使用翻牌数字组件,包括其基本设置和高级配置,旨在帮助开发者快速掌握并应用这一动态视觉效果。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • 本文详细介绍了C语言中的基本数据类型,包括整型、浮点型、字符型及其各自的子类型,并探讨了这些类型在不同编译环境下的表现。 ... [详细]
  • Java 中重写与重载的区别
    本文详细解析了 Java 编程语言中重写(Override)和重载(Overload)的概念及其主要区别,帮助开发者更好地理解和应用这两种多态性机制。 ... [详细]
  • 本文详细解析了Java中throw和throws的关键区别,同时涵盖了JDK的定义、Java虚拟机的关键约定、Java的跨平台性、自动垃圾回收机制、源文件结构、包的概念及作用等多个核心知识点,旨在帮助学生更好地准备Java期末考试。 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • 本文详细介绍了Java的安装、配置、运行流程以及有效的学习方法,旨在帮助初学者快速上手Java编程。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 掌握Spring MVC中自定义类型转换与格式化的技巧
    近期,在开发一款小程序的过程中遇到了几个Spring MVC接口需要传递时间参数的问题。本文将详细介绍如何利用Java 8 Time API在Spring MVC中实现时间参数的自定义类型转换和格式化。 ... [详细]
author-avatar
手机用户2602926163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有