💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## &可以作为选择器的一部分 ``` .main{ &-content:{ } } //--- --- --- >>> .main-content{} ``` ## 有相同命名空间的属性可以使用嵌套 ``` div{ font:{ size:10px; weight:bold; } } //--- --- --- >>> div{font-size:10px;font-weight:bold} div{ font: 15px { size:10px; weight:bold; } } //--- --- --- div{font:15px;font-size:10px;font-weight:bold} ``` ## 插值 ### 插值属性 ``` $side:top; border-#{$side}-color:red; ``` ### 插值选择器 ``` $theme: ".dark"; #{$theme} div { color: black } ``` >[danger] ### 如果传入的是字符串,插值语句输出的最终都是不带引号的字符串 ### 多行注释也可以使用插值 ``` /* 当前版本: #{$version} */ ``` ## !global 会将局部变量申明为全局 ``` $red : red !global; ``` ## 运算 在进行加减乘除时,建议使用统一单位,否则就需记住哪些单位是可以转换,哪些是不可以转换的,稍不注意,Sass就会报错。 ### 关于'/' 由于原生的CSS中的斜杠(`/`)是有用途的(比如定义圆角的不同半径时,border-radius:10px/20px,表示水平半径为10px,垂直半径为20px),所以在Sass中使用时要注意,只有下面三种情况才会被视为除法运算: - 如果值被圆括号包裹:(20px / 10px) - 如果值是算数表达的一部分:(10px+20px / 10px) - 如果值的一部分是变量或函数的返回值:$width / 10 如果你想显示的让斜杠(/)不做除法运算,只需要使用插值语句(#{}) ``` div{#{$font-size} / #{$line-height};} ``` ### 关于'+' 可以像javascript一样 用`+`来拼接字符串 ``` div{cursor: e + -resize} //--- >>> div{cursor: e-resize} ``` ## 流程控制 ### @if ``` div{ @if 1>2 { color:red; }@else if 3>2 { color: blue; } @else { color: black; } } ``` ### for...through... ``` @for $var from start through end {} //--- @for $i from 1 through 3{ .large-#{$i} { font-size: 10px * $i ;} } ``` ### for...to... 和`through`相比不包含end ### @each #### sass中的数组 Sass中的数组,是通过空格或则逗号分隔的一系列的值,比如1 2 3 4或1,2,3,4 还可以多维数组,比如1 2,3 4表示包含1 2与3 4两个数组,还可以这样(1 2)(3 4) #### 遍历数组 ``` @each $var in <list> //--- ``` <list>是一系列以逗号分隔的值列表(数组): ``` //user,nav,person --> [user,nav,person] @each $icon in user,nav,person{ #{$icon}-icon{ background-image: url('/images/#{$icon}.png'); } } ``` #### 多维数组与遍历 ``` @each $var1,$var2 in ($value,$value),($value,$value) ``` 栗子 ``` @each $font,$size in (large-1,10px),(large-2,20px){ #{$font}{ font-size:$size } } //--- >>> .large-1 {font-size:10px} .large-2 {font-size:20px} ``` #### 键值对形式的数组遍历 ``` @each $key,$value in {key:value,key:value} ``` ``` @each $selector,$size in {div: 10px,p: 20px}{ #{$selector}{ font-size: $size; } } //--- >>> div{font-size:10px} p{font-size:20px} ``` #### 列表中嵌套map 注意这种情况的循环遍历,计算只有1项,也必须带上`,` ``` $list:(k1:v1,k2:v2),(k1:v3,k2:v4); //就算只有一项也必须带上',' @each item in list{ @each k,v in item{ } } ``` ### @while ``` $i: 6; @while $i > 0{ .item-#{$i} {width: 2em * $i; } $i : $i - 2; } ``` ## @mixin ### @mixin的不确定参数[多余参数] #### 作为形参 ``` @mixin box-shadow($shadows...){ box-shadow: $shadows; } div{ @include box-shadow(0 0 3px black, 0 0 5px red); } ``` #### 作为实参 ``` @mixin colors ($text,$background,$border){ color: $text; background-color: $background; border-color: $border; } $values: #ff0000, #00ff00, #0000ff; .primary{ @include colors($values...) } ``` ### 不定序传参 不定序传参可以让你忽略形参的顺序,不必记住它们 ``` @mixin blue-theme($background,$color){ background: $background; color:$color; } ``` 一般我们是这样调用的 ``` div{@include blue-theme{red,white}} ``` 但我们也可以忽略传参的顺序,传参时以键值对的形式传参: ``` div{@include blue-theme{$color: white,$background :red}} ``` ## @extend ``` .large{ font-size: 20px; font-weight: bold; } .main{ @extend .large; background: red; } >>> .large,.main{font-size:20px;font-weight:bold;} .main{background:red} ``` ### `@extend `实现的继承是继承所有 其实就是把被继承的类名换成自己 ``` .large { font-size: 20px; font-weight: bold; } .large.blue{ color: } .mian{ @extend .large; background: red; } >>> .large,.main{font-size:20px;font-weight:bold} .large.blue,.blue.main{color:blue} .main{background:red} ``` ## sass 中的数据类型 ### number ``` numbers(13,10px) ``` ### 文本字符和没有引号的文本字符 ``` "foo",'bar',bar ``` ### 颜色 ``` blue,#ffffff,rgba(255,0,0,0.5) ``` ### 布尔值 ``` true,false ``` ### 空 ``` null ``` ### 数值列表 ``` 通过逗号或则空格分开(1.5em 1em 0 1em,Helvetica,Arial,sans-serif) ``` ``` 映射键值对(key1:value1,key2,value2) ``` ## sass中关于引号需要注意的几点 若果一个引号字符串和一个没有引号的字符串相加(有引号的字符串在左边),结果是一个有引号的字符串。同样,如果一个没引号的字符串和一个有引号的字符串相加(没有引号的字符串在左边),结果是没有引号的。例如 ``` p:before{ content:"Foo" + Bar; font-family:sans- + "serif"; } >>>转译后 >>> p:before{ content:"Foo Bar"; font-family:sans-serif; } // 在字符串文本中,通过${}样式可以添加动态值给字符串 p:before{ content:"I ate #{5+10} pies!"; } // 转换为CSS p:before { content:"I ate 15 pies!"; } ``` ### 在编译 CSS 文件时不会改变其类型(有无引号)。只有一种情况例外,使用#{}插值语句(interpolation)时,有引号字符串将被编译为无引号字符串,这样方便了在混合指令中引用选择器。 ``` @mixin firefox-message($selector){ body.firefox #{$selector}:before{ content:"Hi,Firefox users!"; } } @include firefox-message(".header") >>>编译后 >>> body.firefox .header:before{ content:"Hi,Firefox users"; } ``` ## !defualt ``` sass的默认变量仅需要在值后面加上!default Sass的默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式很简单,只需要在默认变量之前重新声明下变量即可。 比如: $baseLineHeight : 2; $baseLineHeight : 1.5 !default; body { line-height : $baseLineHeight; } 编译后结果就是: body { line-height : 2; } ``` ## 常用方法 ### index($list,$item) ``` $index:index($list,$item); //找到list中item这一项的索引,索引从1开始 ``` ### map-get($map,$key) ``` $value:map-get($map,$key); //找到map中key值为$key的$value ``` ### length($list) ``` length($list):返回一个列表的长度值; ``` ### nth($list,$n) ``` nth($list, $n):返回一个列表中指定的某个标签值 ``` ### join($list1, $list2, [$separator]) ``` join($list1, $list2, [$separator]):将两个列给连接在一起,变成一个列表; ``` ### append($list1, $val, [$separator]) ``` append($list1, $val, [$separator]):将某个值放在列表的最后; ``` ### zip($lists…) ``` zip($lists…):将几个列表结合成一个多维的列表; ``` ### percentage(num1/num2) 将数字转换成百分比 ## 三元 ### 注意:并不带@ 必须有变量来接收 ``` if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null); ```