CSS预处理器--SCSS

介绍

Scss是成熟、稳定、强大的CSS预处理器,而SCSS是Sass3版本当中引入的新语法特性,完全兼容CSS3的同时继承了Sass强大的动态功能。

以下为基本语法

一、注释

注释分为单行注释和多行注释,单行注释在.scss文件编译成.css文件时会被删除,多行注释不会被删除,若在多行注释的开头加上感叹号(!),那么在scss的任何模式下都不会被删除,多用于书写版本、开发等信息。

// 这是单行注释

/*
   这是多行注释
*/

/*!
   另一中多行注释
*/

二、变量

1.定义变量以$开头,命名形式与less变量命名形式基本相同,使用方式也基本相同。变量中存在块作用域,如果变量命名相同,优先使用本级作用域下的变量,然后再去向上寻找。

以上代码解析成css为

.box1 {
  color: red;
}
.box1 .box2 {
  color: green;
}

2.嵌套规则作用域内定义的变量只能在本嵌套规则中使用,如果想要在其他嵌套中使用,需要后缀 !global,将其变成全局变量。

三、数据类型

1.字符串

字符串有三种表示方式,双引号,单引号,或者不带引号。

2.数字

正数,负数,浮点数,正数,带单位的数字(如10px、10cm)都属于数字,

其实以数字开头字母结尾的都可以算作数字。(如10a,100b)

 

 3.空值

null空值,设为空值的变量,使用时不会进行编译。空值主要用来判断。

 4.布尔值

false和true,只有null和false是false,其他均是true

5.数组

 6.映射(maps)

与JavaScript不同的是用小括号,类比JavaScript的对象{}

 7.颜色

SCSS提供了内置Colors函数,从而更方便的使用颜色。

四、运算

1.算术运算符

(1)加法

  总结:

数字与数字相加:只要带单位,那么结果就带单位;都不带单位,则结果不带单位。

纯字符串相加:结果是否带双引号,取决于第一个加数是否带双引号。没太大意义

数字与字符串相加:没太大意义

(2)减法

总结:数字与数字之间与加法一样;其他组合没意义。

(3)乘法

 总结:数字与数字之间两个都带单位的相乘会报错, 数字与字符串、字符串与字符串相乘都会报错。

(5)除法

 总结:除不尽保留五位小数。被除数不带单位,除数带单位会报错。

(6)求余 

 总结:求余符号两边要用空格隔开。

2.关系运算符

前提:两端必须为数字,结果是布尔值。

 3.相等运算符

 4.布尔运算符

and、or、not,使用时两端需要空格。

 5.颜色值运算

按照16进制进行运算,如果结果超过临界值,则结果为临界值。

 五、一些常用方法

1.插值语法 #{}

 2.父选择器 &

与less相同,不多介绍。

3. !default修饰

总结:寻找变量时,默认向上寻找,只要找到此变量就结束;但是如果变量使用了!default修饰,则略过此变量,继续向上寻找,如果找到同名变量(值非空),则使用;如果没有找到(或值为null),则使用!default修饰的变量。

4.!optional

当@extend相关代码语法错误时,加上此修饰,则不会编译错误代码,后面继承会用的到。

六、@的相关指令

1.@import

Scss扩展了@import的功能,允许其导入SCSS或SASS文件,被导入的文件将合并编译到同一css文件中,且被导入的scss/sass文件中所包含的变量或混合指令(mixin)都可以在导入的文件中使用。

以下sass文件中,@import仅作为普通的css语句

1.导入.css文件。

2.文件名以http://开头。

3.文件名是url()

2.@media

Scss中的@media与css中用法一样,只是增加了可以嵌套、插值语法等。

3.@extend

表示继承,但一般用于继承简单的样式(指选择器简单)

 当选择器名称较多时,可能会出现意想不到的结果,所以要慎用。(用混合和函数代替较好)

七、控制语句

1.if()三元表达式:用于判断展示对应的样式,不能使用全等或不全等(===或!==)

2.@if、@else if、@else

注意此处与if()不同的是,@if中包含整个属性名和属性值,而if()中只有属性值。

3.@for循环

(1).form ... through...:包含开始和结尾

注意:$a表示数字结果,#{$a}表示转成字符串,属性名需要是字符串。

(2).from...to... :包含开头不包含结尾

 4.@while循环

5.@each循环

1.循环一维数组

2.循环二维数组

3.循环maps

八、混合mixin

1.混合指令可以进行样式的重用,使用@mixin进行定义,@include进行使用。

2.混合指令中可以进行参数的传递,传递方式类似函数传参。传递的方式支持位置传参、关键词传参、默认参数和不定参数。

(1)位置传参(普通传参)

(2)关键词传参(类似对象结构赋值)

(3)默认参数:当不传递参数时,使用默认参数。

 (4)不定参数:当参数数量不固定时,可以使用不定参数。

 3.向混合样式中导入内容,即可以将scss代码写进@include中,插入@mixin中@content的标记处,这样可以动态插入样式。

九、函数

1.内置函数:涉及索引的函数,索引下标从1开始计算

(1)字符串相关内置函数

函数名和参数类型 函数作用
quote($string) 添加引号
unquote($string) 除去引号
to-lower-case($string) 变为小写
to-upper-case($string) 变为大写
str-length($string) 返回$string的长度(汉字算一个)
str-index($string,$substring) 返回$substring在$string的位置
str-insert($string, $insert, $index) 在$string的$index处插入$insert
str-slice($string, $start-at, $end-at) 截取$string的$start-at和$end-at之间的字符串

(2)数字相关内置函数

函数名和参数类型 函数作用
percentage($number) 转换为百分比形式
round($number) 四舍五入为整数
ceil($number) 数值向上取整
floor($number) 数值向下取整
abs($number) 获取绝对值
min($number...) 获取最小值
max($number...) 获取最大值
random($number?:number) 不传入值:获得0-1的随机数;传入正整数n:获得0-n的随机整数(左开右闭)

(3)数组相关内置函数

函数名和参数类型 函数作用
length($list) 获取数组长度
nth($list, n) 获取指定下标的元素
set-nth($list, $n, $value) 向$list的$n处插入$value
join($list1, $list2, $separator) 拼接$list1和list2;$separator为新list的分隔符,默认为auto,可选择comma、space
append($list, $val, $separator) 向$list的末尾添加$val;$separator为新list的分隔符,默认为auto,可选择comma、space
index($list, $value) 返回$value值在$list中的索引值
zip($lists…) 将几个列表结合成一个多维的列表;要求每个的列表个数值必须是相同的

(4)映射(maps)相关内置函数

函数名和参数类型 函数作用
map-get($map, $key) 获取$map中$key对应的$value
map-merge($map1, $map2) 合并$map1和$map2,返回一个新$map
map-remove($map, $key) 从$map中删除$key,返回一个新$map
map-keys($map) 返回$map所有的$key
map-values($map) 返回$map所有的$value
map-has-key($map, $key) 判断$map中是否存在$key,返回对应的布尔值
keywords($args) 返回一个函数的参数,并可以动态修改其值

(5)内省函数

函数名和参数类型 函数作用
type-of($value) 返回$value的类型
unit($number) 返回$number的单位
unitless($number) 判断$number是否带单位,返回对应的布尔值
comparable($number1, $number2) 判断$number1和$number2是否可以做加、减和合并,返回对应的布尔值

2.自定义函数

通过@function进行自定义函数,通过@return定义返回值。可以进行默认传参,位置传参,不定传参、关键字传参,与mixin传参一致。

猜你喜欢

转载自blog.csdn.net/qq_48113035/article/details/123000750