根据Sass官网和阮一峰老师的笔记,自己记录一下
Sass官网:sass.bootcss.com/guide
SASS用法指南 - 阮一峰的网络日志:www.ruanyifeng.com/blog/2012/0…
CSS 本身可能很有趣,但是样式表正变得越来越大、 越来越复杂、越来越难以维护。这就是预处理可以提供帮助的地方。 Sass 为你提供了 CSS 中还不存在的特性,例如变量、 嵌套、混合、继承和其它实用的功能,让编写 CSS 代码变得再次有趣。
webpack中使用Sass
1.安装依赖
- sass-loader
- node-sass
- css-loader
- style-loader / mini-css-extract-plugin
2.配置rules
{
test: /\.scss$/,
use: [
'style-loader',
// MiniCssExtractPlugin.loader
'css-loader',
'sass-loader'
]
}
sass语法使用
变量
变量是存储信息并在将来重复利用的一种方式,在整个样式表中都可访问
变量存储的是值,不是整个样式,只是一个值(冒号后面的内容 : )
Sass 使用 $ 符号 作为变量的标志,可以使用变量来指定值
如果变量的值是作为css选择器的一部分要使用 #{$变量名}
变量命名和值 支持驼峰和划线
$red: #F00;
$mg20: 20px;
// 使用
.red {
color: $red;
background-color: $red;
margin-top: $mg20;
}
// 变量作为样式选择器
$span: span;
$one-class-name: item-name;
$itemDetail: itemDetail;
#{$one-class-name} {
// 作为选择器命名
background-color: yellowgreen;
}
#{$itemDetail} {
padding: $mg20; // 变量名可以随意命名,不影响结果,但应该对应真实的意思
}
#{$span}
{
color: red;
}
插入文件
@import命令,用来插入外部文件
@import './head.sass'
嵌套
Sass 允许您嵌套 CSS 选择器,嵌套方式 与 HTML 的视觉层次结构相同
但嵌套多层会导致样式代码难以维护,层数不要过度
在嵌套的代码块内,可以使用&引用父元素
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li { display: inline-block; }
a {
display: block;
padding: 6px 12px;
text-decoration: none;
&:hover {
color: #ffb3ff;
}
}
}
混合(Mixins)
mixin允许创建一组CSS声明,在整个样式表中重用这些声明,特别是样式前缀时
mixins有点类似于函数,可以接收参数,先声明好一些样式,等重用时传入需要的参数,就可以返回想要的样式,参数可以有缺省值
用法:
使用@mixin声明样式 后面用括号接收参数(没有参数可以不要括号)
@mixin 声明的名称 (参数) {......} // (参数) 可以没有 使用参数和要变量一样用法
使用@include重用样式 后面用括号传参(没有参数可以不要括号)
// @include 声明的名称 (参数); // (参数) 可以没有 类似函数一样传参
// 预设好前缀
@mixin transform($property) {
-webkit-transform: $property;
-ms-transform: $property;
transform: $property;
}
.box {
@include transform(rotate(30deg));
}
// 默认值
$yellow: #cfcf6f;
@mixin color($value: red) {
background-color: $property;
color: $property;
}
.item {
@include color;
}
继承(Extend)
Sass允许一个选择器,继承另一个选择器,这样可以简化编码时对公用的样式的编写
继承是一些公用样式复用的简写
编译后会自动按照继承的关系,转换成选择器的公用样式
.class1 {
border: 1px solid #ddd;
}
.class2 {
@extend .class1;
font-size:120%;
}
// 转换成css
.class1, .class2 {
border: 1px solid #ddd; // 因为.class2继承.class1 说明.class1的内容是两个选择器公用的内容
}
.class2 {
font-size:120%; // 编译转换后 就会根据继承关系组装了上面这个公用样式
}
如果只是想定义一些公用样式,不想生成实际的选择器,可以使用%来编写占位符类和extend配合使用
占位符类是用于创建简单消息传递,当它被继承才会打印,利用打印的特性来生成css样式,如果没有被继承,里面的内容就不会输出
%message-shared {
// 占位符类 里面这些样式内容 当它被继承后就会输出 生成共用样式
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
// 这个占位符类因为没有被其它地方 使用过 生成css时就不会输出它的内容
%equal-heights {
display: flex;
}
.message {
@extend %message-shared;}
.success {
@extend %message-shared;
border-color: green;
}
.error {
@extend %message-shared;
border-color: red;
}
// 转换成css.message {
@extend %message-shared;
}
.success {
@extend %message-shared;
border-color: green;
}
.error {
@extend %message-shared;
border-color: red;
}
// 转换成css
// 占位符类如果有输出就会在原来sass文件里面的位置输出成继承的选择器样式
.message, .success, .error {
// 内容生成了共用的样式 没有产生额外的选择器
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
border-color: green;
}
.error {
border-color: red;
}
颜色函数
Sass提供了一些内置的颜色函数,以便生成系列颜色
lighten(#cc3, 10%) // #d6d65c
darken(#cc3, 10%)// #a3a329
grayscale(#cc3) // #808080
complement(#cc3) // #33c
计算功能、操作符
$var: 100;
body {
margin: (14px/2);
top: 50px + 100px;
right: $var * 10%;
}
// 10% %在数值后面是作为单位使用 不是 10% 百分之10的意思
// right: $var * 10%; // 等价于 right: (100 * 10)%; => right: 1000%;
// 所以不能用 100px * 10% => 1000%*px 会报错
条件语句
@if可以用来判断、还有@else命令
.item {
@if lightness(red) > 50% {
background-color: #000;
} @else {
background-color: #fff;
}
}
循环语句
@for @for $i from 1 to 10
@for $i from 1 to 10 {
.a#{$member} {
content: "#{$member}";
}
}
// 转换后
.a1 { content: "1" }
.a2 { content: "2" }
...
@while @while $i > 0
$i: 6;@while $i > 0 {
.item-#{$i} {
width: 2em * $i;
}
$i: $i - 2;
}
// 转换后
.item-6 {
width: 12em;
}
.item-4 {
width: 8em;
}
.item-2 {
width: 4em;
}
@each @each $var in $itemList // 或者 @each $member in a, b, c, d
@mixin item-1 ($value, $key) {
@each $var in $key {
#{$var}: $value;
}
}
.item-class {
@include item-1($red, color background-color border-color);
}
// 转换后
.item-class {
color: red;
background-color: red;
border-border: red;
}
自定义函数
用 @function 和 @return
@function double($n) {
@return $n * 2;
}
#sidebar {
width: double(5px);
}
小结
官网上面和阮一峰老师的例子就是这些,目前实际中接触到Sass用法比较少,使用较多的是语法:$变量、@import、嵌套、操作符,其它的用法先做记录,后面使用时方便查找