列表参数之间使用空格隔开,不能使用逗号,否则函数将会出错
>> length(10px) -----1 >> length(10px 20px (border 1px solid) 2em)-----4 >> length(border 1px solid)--------3 >> length(10px,20px,(border 1px solid),2em)----报错
.footer { background:nth(red green,2); } 或是 $list:(red green); .footer { background:nth($list,2); } 编译成css .footer { background: green; }
注:在 nth($list,$n) 函数中的 $n 必须是大于 0 的整数
>> join(10px 20px, 30px 40px) (10px 20px 30px 40px) >> join((blue,red),(#abc,#def)) (#0000ff, #ff0000, #aabbcc, #ddeeff) //多个列表连接,需要将多个join()函数合并在一起使用: >> join((blue red), join((#abc #def),(#dee #eff))) (#0000ff #ff0000 #aabbcc #ddeeff #ddeeee #eeffff) 除此之外,还有很特别的参数$separator,用来指定列表连接之间的分隔符的,默认为auto,还有comma(逗号)和space(空格)!
用来指定列表连接之间的分隔符的,默认为auto,还有comma(逗号)和space(空格)!
>> append((blue green),red,comma) (#0000ff, #008000, #ff0000) >> append((blue green),red,space) (#0000ff #008000 #ff0000) >> append(10px 20px ,30px) (10px 20px 30px)
将多个列表结合成一个多维的列表
>> zip(1px 2px 3px,solid dashed dotted,green blue red) 1px "solid" #008000, 2px "dashed" #0000ff, 3px "dotted" #ff0000
在使用zip()函数时,每个单一的列表个数值必须是相同的:
zip()函数组合出来就成了: 1px solid green, 2px dashed blue, 3px dotted red
第一个值就是1,第二个值就是 2,依此类推
>> index(1px solid red, 1px)-----1 >> index(1px solid red, solid)-----2 >> index(1px solid red, red)-----3 在 index() 函数中,如果指定的值不在列表中(没有找到相应的值),那么返回的值将是 false,相反就会返回对应的值在列表中所处的位置。
>> index(1px solid red,dotted) //列表中没有找到 dotted false >> index(1px solid red,solid) //列表中找到 solid 值,并且返回他的位置值 2 2
用来对值做一个判断的作用。
number 为数值型。 string 为字符串型。 bool 为布尔型。 color 为颜色型。
type-of(100)或是type-of(100px)----"number" >> type-of("asdf")或是type-of(asdf)或是type-of(1 / 2 = 1)-----"string" >> type-of(true)-----"bool" >> type-of(#fff)或是type-of(blue)----"color"用来获取一个值所使用的单位,碰到复杂的计算时,其能根据运算得到一个“多单位组合”的值,不过只充许乘、除运算:
>> unit(100)----"" >> unit(100px)----"px" >> unit(20%)---"%" >> unit(1em)----"em" >> unit(10px * 3em)---"em*px" >> unit(10px / 3em)----"px/em" >> unit(10px * 2em / 3cm / 1rem)---"em/rem"但加、减碰到不同单位时,unit() 函数将会报错,除 px 与 cm、mm 运算之外:
>> unit(1px + 1cm)---"px" >> unit(1px - 1cm)---"px" >> unit(1px + 1mm)---"px" >> unit(10px * 2em - 3cm / 1rem)-----报错
unit() 函数对于单位运算相对来说也没有规律,而且有些单位也无法整合成一个单位,对于我们在 CSS 中运用中并不适合,比如:
>> unit(10px * 3em)---"em*px" >> unit(10px / 3em)----"px/em" >> unit(10px * 2em / 3cm / 1rem)---"em/rem" 上面运算出来的单位,对于在 CSS 中使用将是没有任何意义的。
>> unitless(100px)或是 unitless(100%)或是unitless(1px /2 + 2 )---false >> unitless(100)或是 unitless(1 /2 )或是unitless(1 /2 + 2 )---true 代码实现:用户在调用混合宏时,如果用户没有给参数值加上单位,程序会自动加入单位。
@mixin adjust-location($x, $y) { @if unitless($x) { $x: 1px * $x; } @if unitless($y) { $y: 1px * $y; } position: relative; left: $x; top: $y; background:red; } .botton{ @include adjust-location(20px, 30); } 编译过来的CSS: .botton { position: relative; left: 20px; top: 30px; background: red; }
主要是用来判断连俩个数是否可以进行“加,减”以及“合并”。如果可以返回的值为true,如果不可以返回的值是false: 到不同单位时,将会报错,除 px 与 cm、mm 运算之外:
>> comparable(2px,1px)或是 comparable(2px,1mm)或是 comparable(2cm,1mm)---true >> comparable(2px,1%)或是comparable(2px,1em)或是comparable(2rem,1em)----false
A.rgb($red,$green,$blue):根据红、绿、蓝三个值创建一个颜色; eg:rgb(200,40,88) //计算出一个十六进制颜色值 #c82858 B.rgba() 函数主要用来将一个颜色根据透明度转换成 rgba 颜色
俩种格式:
rgba($red,$green,$blue,$alpha):根据红、绿、蓝和透明度值创建一个颜色;
rgba($color,$alpha)
eg:rgba(#c82858,.65) //根据透明度计算出一个rgba颜色值 rgba(200, 40, 88, 0.65) C.red($color):从一个颜色中获取其中红色值; eg:red(#c82858) //从#c82858颜色值中得到红色值 200 D.green($color):从一个颜色中获取其中绿色值; eg: green(#c82858) //从#c82858颜色值中得到绿色值 40 E.blue($color):从一个颜色中获取其中蓝色值; eg:blue(#c82858) //从#c82858颜色值中得到蓝色值 88 F.mix($color-1,$color-2,[$weight]):把两种颜色混合在一起。
$color-1 和 $color-2 指的是你需要合并的颜色,颜色可以是任何表达式,也可以是颜色变量。 $weight 为 合并的比例(选择权重),默认值为 50%,其取值范围是 0~1 之间。
//SCSS $color1: #a63; $color2: #fff; $bgColor1: #f36; $bgColor2: #e36; $borderColor1:#c36; $borderColor2:#b36; .mix { background: mix($bgColor1,$bgColor2,.75); color: mix($color1,$color2,.25); border-color: mix($borderColor1,$bgColor2,.05); } 编译的 css 代码: //CSS .mix { background: #ee3366; color: #fefefe; border-color: #ed33 }
a.hsl($hue,$saturation,$lightness) 通过色相(hue)、饱和度(saturation)和亮度(lightness)的值创建一个颜色;
eg: hsl(200,30%,60%) //通过h200,s30%,l60%创建一个颜色#7aa3b8
b.hsla($hue,$saturation,$lightness,$alpha) 通过色相(hue)、饱和度(saturation)、亮度(lightness)和透明(alpha)的值创建一个颜色;
eg:hsla(200,30%,60%,.8)//通过h200,s30%,l60%,a80%创建一个颜色
rgba(122, 163, 184, 0.8)
c.hue($color) 从一个颜色中获取色相(hue)值;
eg:hue(#7ab)//得到#7ab颜色的色相值 195deg
d.saturation($color) 从一个颜色中获取饱和度(saturation)值;
eg:saturation(#7ab)//得到#7ab颜色的饱和度值 33.33333%
e.lightness($color) 从一个颜色中获取亮度(lightness)值;
eg:lightness(#7ab)//得到#7ab颜色的亮度值 60%
f.adjust-hue($color,$degrees) 通过改变一个颜色的色相值,创建一个新的颜色;
eg:adjust-hue(#f36,150deg) //改变#f36颜色的色相值为150deg
#33ff66
g.lighten($color,$amount) 通过改变颜色的亮度值,让颜色变亮,创建一个新的颜色;
eg:lighten(#f36,50%) //把#f36颜色亮度提高50%
#ffffff
h.darken($color,$amount) 通过改变颜色的亮度值,让颜色变暗,创建一个新的颜色;
eg:darken(#f36,50%) //把#f36颜色亮度降低50% #33000d
i.saturate($color,$amount) 通过改变颜色的饱和度值,让颜色更饱和,从而创建一个新的颜色
eg:saturate(#f36,50%) //把#f36颜色饱和度提高50% #ff3366
j.desaturate($color,$amount) 通过改变颜色的饱和度值,让颜色更少的饱和,从而创建出一个新的颜色;
eg:desaturate(#f36,50%) //把#f36颜色饱和度降低50% #cc667f
k.grayscale($color) 将一个颜色变成灰色,相当于desaturate($color,100%);
eg:grayscale(#f36) //把#f36颜色变成灰色 #999999
l.complement($color) 返回一个补充色,相当于adjust-hue($color,180deg);
eg:complement(#f36) #33ffcc
m.invert($color) 反回一个反相色,红、绿、蓝色值倒过来,而透明度不变。
eg:invert(#f36) #00cc99
a.alpha($color) /opacity($color)获取颜色透明度值 eg: .footer { backfround:alpha(red)或是opacity(red)---1 color:alpha(rgba(red,.8))或是 opacity(rgba(red,.8))----0.8 } b.rgba($color, $alpha)改变颜色的透明度值 eg: >> rgba(red,.5)----rgba(255, 0, 0, 0.5) >> rgba(rgb(34,45,44),.5)----rgba(34, 45, 44, 0.5) >> rgba(rgba(33,45,123,.2),.5)---rgba(33, 45, 123, 0.5) >> rgba(hsl(33,7%,21%),.5)-----rgba(57, 54, 50, 0.5) >> rgba(hsla(33,7%,21%,.9),.5)------rgba(57, 54, 50, 0.5) c.opacify($color, $amount) / fade-in($color, $amount)使颜色更不透明 eg: >> opacify(rgba(22,34,235,.6),.5)---#1622eb >> opacify(hsla(22,34%,23%,.6),.415)----#4f3527 >> opacify(red,.15)----#ff0000 >> fade-in(rgba(23,34,34,.5),.15)----rgba(23, 34, 34, 0.65) >> fade-in(rgba(23,34,34,.5),.615)------#172222 d.transparentize($color, $amount) / fade-out($color, $amount)使颜色更加透明 eg: >> transparentize(red,.5)-----rgba(255, 0, 0, 0.5) >> fade-out(hsla(98,6%,23%,.5),.1)---rgba(58, 62, 55, 0.4)
案例七色卡:https://code.csdn.net/snippets_manage
Sass 的 map 常常被称为数据地图,也有人称其为数组,因为他总是以 key:value 成对的出现,但其更像是一个 JSON 数据。
$map: ( $key1: value1, $key2: value2, $key3: value3 ) 中键 key 是用来查找相关联的值 value。使用 map 可以很容易收集键的值和动态插入。
eg:
$theme-color: ( default: ( color: #2196f3, text-color: #444, link-color: #39f ), primary:( color: #000, text-color:#fff, link-color: #93f ), negative: ( color: #f36, text-color: #fefefe, link-color: #d4e ) ); @each $keys,$values in $theme-color{ .theme-color-#{$keys}{ @each $key,$value in $values{ #{$key}:#{$value} } } } 编译成css: .theme-color-default { color: #2196f3; text-color: #444; link-color: #39f; } .theme-color-primary { color: #000; text-color: #fff; link-color: #93f; } .theme-color-negative { color: #f36; text-color: #fefefe; link-color: #d4e; }
$color: ( text: #f36, link: #f63, border: #ddd, backround: #fff ); $typo:( font-size: 12px, line-height: 1.6 ); $newmap: map-merge($color,$typo); .btn-dribble{ color: map-get($newmap,backround); } 编译: .btn-dribble { color: #fff; }
$map:map-remove($theme-color,color);
$theme-color: ( color: #2196f3, text-color: #444, link-color: #39f ); $map:map-remove($theme-color,color); .theme-color{ @each $key,$value in $map{ #{$key}:#{$value} } } 编译成css: .theme-color { text-color: #444; link-color: #39f; }
将会返回 $map 中的所有 key。这些值赋予给一个变量,那他就是一个列表:map-keys($social-colors);
$social-colors: ( dribble: #000, facebook: #333, twitter: #55acee ); @function colors($color){ $names: map-keys($social-colors); @if not index($names,$color){ @warn "Waring: `#{$color} is not a valid color name.`"; } @return map-get($social-colors,$color); } @each $name in map-keys($social-colors){ .btn-#{$name}{ color: colors($name); } } 编译成css: .btn-dribble { color: #000; } .btn-facebook { color: #333; } .btn-twitter { color: #55acee; }
$social-colors: ( dribble: #000, facebook: #333, twitter: #55acee ); 将会返回 $map 中的所有value。这些值赋予给一个变量,那他就是一个列表:map-values($social-colors)
i.自定义一个函数 colors()
ii.facebook 这个 key 已存在 $social-colors 这个 map 当中,能正常编译;如果你手误,将 facebook 输错了,则错。所以需要@if来判断