注释
- 标准的CSS注释 / xxx / ,会保留到编译后的文件。
- 单行注释 // xxx,只保留在SASS源文件中,编译后被省略。
变量
scss认为中划线和下划线是完全相等的 $primary-color === $primary_color
$primary-color: #cf449c;
作用域
变量支持块级作用域,嵌套规则内定义的变量只能在嵌套规则内使用(局部变量),不在嵌套规则内定义的变量则可在任何地方使用(全局变量)。 将局部变量转换为全局变量可以添加 !global
// 编译前
#main {
$width: 5px !global;
width: $width;
}
#sidebar {
width: $width;
}
// 编译后
#main {
width: 5px;
}
#sidebar {
width: 5px;
}
默认值
变量已赋值
// 编译前
$primary-color: #000;
$primary-color: #cf449c !default;
#main {
color: $primary-color;
}
// 编译后
#main {
color: #000;
}
变量未赋值
// 编译前
$primary-color: null;
$primary-color: #cf449c !default;
#main {
color: $primary-color;
}
// 编译后
#main {
color: #cf449c;
}
嵌套
// 编译前
.popupBody {
padding: 0 24px 70px 24px;
.popupBody-lib {
padding: 40px;
background: #ffffff;
border-radius: 16px;
border: 1px solid #f2f2f2;
margin-bottom: 25px;
}
.popupBody-img {
width: 32px;
height: 32px;
margin-right: 10px;
}
}
// 编译后
.popupBody {
padding: 0 24px 70px 24px;
}
.popupBody .popupBody-lib {
padding: 40px;
background: #ffffff;
border-radius: 16px;
border: 1px solid #f2f2f2;
margin-bottom: 25px;
}
.popupBody .popupBody-img {
width: 32px;
height: 32px;
margin-right: 10px;
}
父选择器:&
同级
// 编译前
.popupBody {
padding: 0 24px 70px 24px;
&-lib {
padding: 40px;
background: #ffffff;
border-radius: 16px;
border: 1px solid #f2f2f2;
margin-bottom: 25px;
}
&-img {
width: 32px;
height: 32px;
margin-right: 10px;
}
}
// 编译后
.popupBody {
padding: 0 24px 70px 24px;
}
.popupBody-lib {
padding: 40px;
background: #ffffff;
border-radius: 16px;
border: 1px solid #f2f2f2;
margin-bottom: 25px;
}
.popupBody-img {
width: 32px;
height: 32px;
margin-right: 10px;
}
子级
// 编译前
.popupBody {
padding: 0 24px 70px 24px;
#{&}-lib {
padding: 40px;
background: #ffffff;
border-radius: 16px;
border: 1px solid #f2f2f2;
margin-bottom: 25px;
}
#{&}-img {
width: 32px;
height: 32px;
margin-right: 10px;
}
}
// 编译后
.popupBody {
padding: 0 24px 70px 24px;
}
.popupBody .popupBody-lib {
padding: 40px;
background: #ffffff;
border-radius: 16px;
border: 1px solid #f2f2f2;
margin-bottom: 25px;
}
.popupBody .popupBody-img {
width: 32px;
height: 32px;
margin-right: 10px;
}
属性嵌套
// 编译前
.wrap {
font: {
family: fantasy;
size: 30px;
weight: bold;
}
}
// 编译后
.wrap {
font-family: fantasy;
font-size: 30px;
font-weight: bold;
}
嵌套 @import
// 编译前
// example.scss
.popupBody-lib {
padding: 40px;
background: #ffffff;
border-radius: 16px;
border: 1px solid #f2f2f2;
margin-bottom: 25px;
}
// index.scss
.popupBody {
padding: 0 24px 70px 24px;
@import "./example";
.popupBody-img {
width: 32px;
height: 32px;
margin-right: 10px;
}
}
// 编译后
.popupBody {
padding: 0 24px 70px 24px;
}
.popupBody .popupBody-lib {
padding: 40px;
background: #ffffff;
border-radius: 16px;
border: 1px solid #f2f2f2;
margin-bottom: 25px;
}
.popupBody .popupBody-img {
width: 32px;
height: 32px;
margin-right: 10px;
}
占位符选择器:%
当占位符选择器单独使用时(未通过 @extend 调用),不会编译到 CSS 文件中;方便定义样式的重复使用
// 编译前
.wrap {
background: #fff;
%title {
font: {
family: fantasy;
size: 30px;
weight: bold;
}
}
}
.wrap-title {
@extend %title;
}
// 编译后
.wrap {
background: #fff;
}
.wrap .wrap-title {
font-family: fantasy;
font-size: 30px;
font-weight: bold;
}
@mixin
// 编译前
@mixin font {
font: {
family: fantasy;
size: 30px;
weight: bold;
}
}
.wrap {
background: #fff;
@include font;
}
// 编译后
.wrap {
background: #fff;
font-family: fantasy;
font-size: 30px;
font-weight: bold;
}
传参
单个
// 编译前
@mixin ellipsis($line) {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: $line;
-webkit-box-orient: vertical;
}
.wrap {
@include ellipsis(2);
}
// 编译后
.wrap {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
多个
// 编译前
@mixin hue($color, $background, $border) {
color: $color;
border: 1px solid $border;
background-color: $background;
}
.wrap {
@include hue($background: #fff, $color: red, $border: red);
}
// 编译后
.wrap {
color: red;
border: 1px solid red;
background-color: #fff;
}
// 编译前
@mixin box-shadow($shadows...) {
box-shadow: $shadows;
}
.wrap {
@include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);
}
// 编译后
.wrap {
box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
}
案例-换肤
以前写的一个换肤,但是这种不推荐,自定义程度太低,需要大量重新设计。 推荐:
- css in js
- 写一套css,然后传值给后台,由后台生成整套的css进行替换(ant,element)
@import "./skin-variable.scss";
@mixin themeify {
@each $theme-name, $theme-map in $themes {
$theme-map: $theme-map !global;
[data-theme="#{$theme-name}"] & {
@content;
}
}
}
@function themed($key) {
@return map-get($theme-map, $key);
}
@mixin background_color($color) {
@include themeify {
background: themed($color) or rgba($color: #ffffff, $alpha: 0.2) !important;
}
}
@mixin btnStyle($bg, $color) {
@include themeify {
background: themed($bg) !important;
color: themed($color) !important;
}
}
@mixin colorm($color) {
@include themeify {
color: themed($color) or #ffffff !important;
}
}
@mixin border($color) {
@include themeify {
border: 1px solid themed($color) or #ffffff !important;
}
}