@Dreamingboy
2017-06-05T16:23:33.000000Z
字数 6599
阅读 795
sass
@if是条件判断,条件为true时返回一个样式块,为false时返回另外一个样式块。可以配合@else if和@else一起使用。
//scss@mixin booleantry($boolean:true){@if $boolean {display:block;}@else{dispaly:inline-block;}}.box1{@include booleantry;}.box2{@include booleantry($boolean:false);}//css.box1 {display: block;}.box2 {dispaly: inline-block;}
语法:
@for $i from <startnumber> through <endnumber>@for $i from <startnumber> to <endnumber>
@for $i from 1 through 2{.item-#{$i} { width: 2px*$i;}}//css.item-1 {width: 2px;}.item-2 {width: 4px;}//scss@for $i from 1 to 2{.item-#{$i} { width: 2px*$i;}}//css.item-1 {width: 2px;}
@for的实际运用
$try:li;$width:200px;$height:200px;%example{width:$width;height:$height;float:left;}@for $i from 1 through 6{#{$try}-#{$i}{@extend %example;font-size: 2em * $i;}}//cssli-1, li-2, li-3, li-4, li-5, li-6 {width: 200px;height: 200px;float: left;}li-1 {font-size: 2em;}li-2 {font-size: 4em;}li-3 {font-size: 6em;}li-4 {font-size: 8em;}li-5 {font-size: 10em;}li-6 {font-size: 12em;}
$number:4;@while $number > 0{.item-#{$number}{margin: 2em * $number;}$number: $number - 1;}//css.item-4 {margin: 8em;}.item-3 {margin: 6em;}.item-2 {margin: 4em;}.item-1 {margin: 2em;}
@each 遍历一个列表,然后从列表中取出对应的值
语法:
@each $var in <list>
$var 是一个变量,<list>是一个表达式,返回一个列表值
$list: a b c d e f;@mixin example {@each $var in $list{.#{$var}{background: url(../images/#{$var}.png);}}}.box5{@include example;}//css.box5 .a {background: url(../images/a.png);}.box5 .b {background: url(../images/b.png);}.box5 .c {background: url(../images/c.png);}.box5 .d {background: url(../images/d.png);}.box5 .e {background: url(../images/e.png);}.box5 .f {background: url(../images/f.png);}
1、字符串函数
.text{content: unquote("hello");}//csss.text{conten:hello;}
quote($string):给字符串添加引号
如果字符串本身有引号会统一成双引号。字符串中间有单引号或者是空格时,或者是有特殊符号如“!,?”要用单引号或者是双引号括起来
to-upper-case()
将字符串变成大写
2、数字函数
div{width:percentage(.2)}//cssdiv{width:20%}
3、列表函数
列表中值用空格隔开,不能用逗号隔开
$length:length(10px 20px 30px);div{margin:2em * $length;}//cssdiv {margin: 6em;}
$width:nth(10px 20px 30px ,2);div{margin-top:$width;}//cssdiv {margin-top: 20px;}
join((blue,green),(red,orange),comma);//(#0000ff #008000 #ff0000 #ffa500)
append((red,green),blue,space);//(#0000ff #008000 #ff0000);
zip(1px 2px 3px,solid dashed dotted,green blue red)//((1px solid green),(2px dashed blue),(3px dotted red))
inde(1px solid red, 1px);//1
1、type-of($value):返回一个值的类型
返回值主要有以下几种:
color:颜色类型
2、unit(unit:unit(10px * 2em /3cm / 1rem);
div{
width:12#{$unit};
}
//css
div {
width: 12em/rem;
}
```
3、unitless($number):判断一个值是否带有单位
返回true或者是false
4、comparable(number-2):判断两个值是否可以做加减和合并
如果可以返回true反之返回false
具有两个值,当条件成立返回一种值反之返回另外一种值
语法:
if ($condition,$if-true,$if-false)
if (true,1px,2px)//1pxif (false,1px,2px)// 2px
Map被称为数据地图,作用类似数组。
语法:
$map:(key1:value1,key2:value2,key3:value3)
key用于查找相关联的值value,key和value要成对出现,每对之间用逗号隔开。map里面还可以套map
$theme-color:(default:(bgcolor:#fff,text-color:#444,link-color:#39f),primary:(bgcolor:#00,text-color:#fff,link-color:#93f),negative:(bgcolor:#000,text-color:#fefefe,link-color:#d4e))
1.map-get(key):根据给定的key值返回map中的值
$try:(color:red,width:1200px,height:300px);//css.box1{color:map-get($try,color);}
但是当map里面没有相应的key是,不会报错也不会编译出相应的CSS样式,所以建议加上一个判断语句
2.map-merge(map2):将两个map合并为一个
当map2中有相同的key的指挥取代前面的
3.map-remove(key):从map中删除一个key返回一个新的map
语法:
$map:map-remove($map1,$key)
4.map-keys($map):返回map中所有的key
这个函数最常见的是结合list一起使用。在结合其他的命令如@for、@each in 、@while等
$list:(color1:blue,color2:red,color3:white,color4:balck);$color-list: map-keys($list);@for $i from 1 through length($color-list){.item-#{$i}{ color:map-get($list,nth($color-list,$i));}}//css.item-1 {color: blue;}.item-2 {color: red;}.item-3 {color: white;}.item-4 {color: balck;}
5.map-values($map):返回map中的所有value
6.map-has-key(key):根据给定的key值判断map中是否具有对应的value值,有的话返回true反之返回false
@function colors($color){@if not map-has-key($social-colors,$color){@warn "No color found for'#{$color}' in $social-colors map Property omitted.";}@return map-get($social-colors,$color);}
7.keywords($args):返回一个函数的参数,可以是动态设置的key和value
可以动态创建一个新的map
@mixin
1、RGB颜色函数
color: rgba(#f36,.5);//csscolor: rgba(255, 51, 102, 0.5);
2、HSL函数
3、Opacity函数
使用@import可以再sass文件中引入scss文件和sass文件,引入的scss和sass文件会被合并并且输出一个单一的CSS文件,被导入的文件中的变量和mixins都可以在主文件中使用。
@import会根据文件名引入,默认情况下会寻找sass文件直接引入,但是在下面几种情况下会被编译成CSS的@import规则:
对于没有扩展名的文件,sass会试着找出具有.scss或者是.sass扩展名的同名文件将其导入
@import "foo.css";@import "foo" screen;@import "http://foo.com/bar";@import url(foo);//编译结果@import "foo.css";@import "foo" screen;@import "http://foo.com/bar";@import url(foo);
如果引入的文件不想被编译成CSS文件,可以在文件名前面加一个下划线,避免被编译。同一个目录中不能同时存在带下划线和不带下换线的同名文件
1、和CSS中一样进行媒体查询
2、可以在CSS中进行嵌套,如果在样式中使用@media,会冒泡到外面
.sidebar{width:300px;@media screen and ( orientation:landscape){width:500px;}}//css.sidebar{width:300px;@media screen and ( orientation:landscape){.sidebar{width:500px;}}}
@extend是用于扩展选择器和占位符
1、扩展选择器
跳出根元素
.a {color: red;.b {color: orange;.c {color: yellow;@at-root .d {color: green;}}}}//css.a {color: red;}.a .b {color: orange;}.a .b .c {color: yellow;}.d {color: green;}
用于调试,使用@debug后在sass编译出错的时候命令终端会提示错误
@debug 10em + 12em;//Line 1 DEBUG:22em;