CSS预处理器-Sass
学习视频:Sass和Less开发
介绍
Sass时一款强化CSS的辅助工具,采用Ruby语言编写的一款CSS预处理器,诞生于2007年,是最大的成熟的CSS预处理语言
使用
若使用的编辑器是vscode,则只需安装easy-sass
插件,即可在保存sass或scss文件的同时编译成对应的css文件
注释
1 | /* 这是暴露出去的注释 */ |
变量
- 全局变量 + 局部变量
1 | // 全局变量 |
- 多值变量
1 | $color: red blue black; |
- 属性名或类名 #{变量}
1 | $name: "box"; |
运算
- 数字运算: + - * / %
/
生效条件:加括号、有变量、运算值-
左右要有空格
- 颜色运算
- rgb()自动转换成#格式再运算
- 字符串运算
- 前面有双引号,结果就有双引号
- 布尔运算:and or not
- 数组运算:list function
嵌套
- 选择器嵌套
- 属性嵌套
1 | // 嵌套 |
@规则
@import 导入
@media 媒体查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18$viewportsize: (
'sm': '(max-width: 500px)',
'md': '(min-width: 501px) and (max-width: 1000px)',
'lg': '(min-width: 1001px)'
);
body {
@media screen {
@media(min-width: 0px) {
background: red;
}
}
@media #{map-get($viewportsize, 'md')} {
background: blue;
}
@media(min-width: 1000px) {
background: yellow;
}
}@extend 基础
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15.error {
background: red;
border: 1px solid red;
}
.error .bg{
background: url("img/404.png");
}
.info {
font-size: 12px;
}
.usererror {
@extend .error;
@extend .info;
border: 1px solid green;
}@at-root 返回根元素
@debug
@warn
@error
控制指令
@if
1
2
3
4
5
6
7
8
9$isshow: 0;
p {
@if $isshow == 1 {
display: block;
}
@else {
display: none;
}
}@for
1
2
3
4
5
6
7
8
9
10
11
12// to 不包含最后一个
@for $i from 1 to 3 {
.item-#{$i} {
width: 2em * $i;
}
}
// through 包含最后一个
@for $i from 1 through 3 {
.item-#{$i} {
height: 2em * $i;
}
}@each
1
2
3
4
5@each $var in home, user, search {
.#{$var}-icon {
background: url('img/#{$var}.png');
}
}@while
1
2
3
4
5
6
7$i:4;
@while $i > 0 {
.hide-text-#{$i} {
overflow: hidden;
}
$i:$i - 1;
}
函数
字符串函数
- unquote :去除首位和末位的引号
- quote: 添加首位和末位的双引号(若已有单引号,转成双引号,若已有双引号,则不添加)
- to-upper-case:转成大写
- to-lower-case:转成小写
数字函数
- percentage() 将一个不带单位的数转成百分比值
- round() 四舍五入
- ceil() 向上取整
- floor() 向下取整
- abs() 绝对值
- min($numbers …) 最小值
- max($numbers …) 最大值
- random() 随机数
列表函数
- lenth($list) 长度
- nth($list, $n) 返回列表中指定的某个标签值
- join($list1, $list2, [$separator]) 将俩个列连接一起
- append($list1, $val, [$separator]) 将某个值放在列表的最后
- zip($lists…) 将几个列表合成一个多维的列表
- index($list, $value) 返回一个值在列表的位置
颜色函数
- rgb($red, $green, $blue)
- rgba($red, $green, $blue, $alpha)
- red($color) 取出颜色中的红色部分
- green($color)
- blue($color)
- mix($color-1, $color-2, [$weight]) 混合俩种颜色
HSL函数 (颜色函数)
hue色调,saturation饱和度,lightness亮度,H取值范围是0
360的圆心角,SL的取值范围是0100%- hsl($hue, $saturation, $lightness)
- hsla($hue, $saturation, $lightness, $alpha)
- hue($color)
- saturation($color)
- lightness($color)
- adjust-hue($color, $degress) 改变颜色的色相值
- lighten($color, $amount) 提高亮度
- darken($color, $amount) 降低亮度
- saturate($color, $amount) 提高饱和度
- desaturate($color, $amount) 降低饱和度
Opacity透明度函数
- alpha($color) 、 opacity($color) 获取颜色透明度值
- rgba($color, $alpha) 改变透明度
- opacify($colorr, $amount) 、 fade-in($color, $amount) 使颜色更不透明
- transparentize($color,$amount)、fade-out($color,$amount) 使颜色更透明
Introspection函数
- type-of($value) : 返回一个值的类型
- unit($number) 返回一个值的单位
- unitless($number) 判断一个值是否有单位
- comparable($number-1, $number-2) 判断俩个值是否可以做加减和合并
三元条件函数
- if ($condition, $if-true, $if-false)
自定义函数
- 函数定义
- 关键字参数
- 默认参数
1
2
3
4
5
6@function body-width ($content: 50, $border: 1) {
@return $content + $border;
}
body {
width: body-width($border: 100px);
}
Less和Sass比较
不同之处:
- 使用前提:Less在JS上运行,Sass在Ruby上使用
- 变量定义:Sass以$定义变量,Less以@定义变量
- 处理机制:Less通过客户端处理,Sass通过服务端处理,相比较之下前者解析会比后者慢一点
- Less使用较Sass简单,但Sass更加活跃成熟
相同:
- 混入(Mixins)——class中的class
- 参数混入——可以传递参数的class,就像函数一样
- 嵌套规则——Class中嵌套class,减少重复代码
- 运算——CSS中用上数学
- 颜色功能——可以编辑颜色
- 命名空间——分组样式,从而可以被调用
- 作用域——局部修改样式
- JavaScript赋值——在CSS中使用JavaScript表达式赋值