[关闭]
@Dreamingboy 2017-06-05T16:23:33.000000Z 字数 6599 阅读 795

sass进阶篇

sass


@if

@if是条件判断,条件为true时返回一个样式块,为false时返回另外一个样式块。可以配合@else if和@else一起使用。

  1. //scss
  2. @mixin booleantry($boolean:true){
  3. @if $boolean {
  4. display:block;
  5. }@else{
  6. dispaly:inline-block;
  7. }
  8. }
  9. .box1{
  10. @include booleantry;
  11. }
  12. .box2{
  13. @include booleantry($boolean:false);
  14. }
  15. //css
  16. .box1 {
  17. display: block;
  18. }
  19. .box2 {
  20. dispaly: inline-block;
  21. }

@for

语法:

  1. @for $i from <startnumber> through <endnumber>
  2. @for $i from <startnumber> to <endnumber>
  1. @for $i from 1 through 2{
  2. .item-#{$i} { width: 2px*$i;}
  3. }
  4. //css
  5. .item-1 {
  6. width: 2px;
  7. }
  8. .item-2 {
  9. width: 4px;
  10. }
  11. //scss
  12. @for $i from 1 to 2{
  13. .item-#{$i} { width: 2px*$i;}
  14. }
  15. //css
  16. .item-1 {
  17. width: 2px;
  18. }

@for的实际运用

  1. $try:li;
  2. $width:200px;
  3. $height:200px;
  4. %example{
  5. width:$width;
  6. height:$height;
  7. float:left;
  8. }
  9. @for $i from 1 through 6{
  10. #{$try}-#{$i}{
  11. @extend %example;
  12. font-size: 2em * $i;
  13. }
  14. }
  15. //css
  16. li-1, li-2, li-3, li-4, li-5, li-6 {
  17. width: 200px;
  18. height: 200px;
  19. float: left;
  20. }
  21. li-1 {
  22. font-size: 2em;
  23. }
  24. li-2 {
  25. font-size: 4em;
  26. }
  27. li-3 {
  28. font-size: 6em;
  29. }
  30. li-4 {
  31. font-size: 8em;
  32. }
  33. li-5 {
  34. font-size: 10em;
  35. }
  36. li-6 {
  37. font-size: 12em;
  38. }

@while

  1. $number:4;
  2. @while $number > 0{
  3. .item-#{$number}{
  4. margin: 2em * $number;
  5. }
  6. $number: $number - 1;
  7. }
  8. //css
  9. .item-4 {
  10. margin: 8em;
  11. }
  12. .item-3 {
  13. margin: 6em;
  14. }
  15. .item-2 {
  16. margin: 4em;
  17. }
  18. .item-1 {
  19. margin: 2em;
  20. }

@each

@each 遍历一个列表,然后从列表中取出对应的值
语法:

  1. @each $var in <list>

$var 是一个变量,<list>是一个表达式,返回一个列表值

  1. $list: a b c d e f;
  2. @mixin example {
  3. @each $var in $list{
  4. .#{$var}{
  5. background: url(../images/#{$var}.png);
  6. }
  7. }
  8. }
  9. .box5{
  10. @include example;
  11. }
  12. //css
  13. .box5 .a {
  14. background: url(../images/a.png);
  15. }
  16. .box5 .b {
  17. background: url(../images/b.png);
  18. }
  19. .box5 .c {
  20. background: url(../images/c.png);
  21. }
  22. .box5 .d {
  23. background: url(../images/d.png);
  24. }
  25. .box5 .e {
  26. background: url(../images/e.png);
  27. }
  28. .box5 .f {
  29. background: url(../images/f.png);
  30. }

函数

1、字符串函数

  1. .text{content: unquote("hello");}
  2. //csss
  3. .text{conten:hello;}

2、数字函数

  1. div{width:percentage(.2)}
  2. //css
  3. div{width:20%}

3、列表函数

列表中值用空格隔开,不能用逗号隔开

  1. $length:length(10px 20px 30px);
  2. div{
  3. margin:2em * $length;
  4. }
  5. //css
  6. div {
  7. margin: 6em;
  8. }
  1. $width:nth(10px 20px 30px ,2);
  2. div{
  3. margin-top:$width;
  4. }
  5. //css
  6. div {
  7. margin-top: 20px;
  8. }
  1. join((blue,green),(red,orange),comma);
  2. //
  3. (#0000ff #008000 #ff0000 #ffa500)
  1. append((red,green),blue,space);
  2. //
  3. (#0000ff #008000 #ff0000);
  1. zip(1px 2px 3px,solid dashed dotted,green blue red)
  2. //
  3. ((1px solid green),(2px dashed blue),(3px dotted red))
  1. inde(1px solid red, 1px);
  2. //
  3. 1

introspection函数

1、type-of($value):返回一个值的类型
返回值主要有以下几种:

Miscellaneous函数

具有两个值,当条件成立返回一种值反之返回另外一种值
语法:

  1. if ($condition,$if-true,$if-false)
  1. if (true,1px,2px)
  2. //1px
  3. if (false,1px,2px)
  4. // 2px

Map

Map被称为数据地图,作用类似数组。
语法:

  1. $map:(
  2. key1:value1,
  3. key2:value2,
  4. key3:value3
  5. )

key用于查找相关联的值value,key和value要成对出现,每对之间用逗号隔开。map里面还可以套map

  1. $theme-color:(
  2. default:(
  3. bgcolor:#fff,
  4. text-color:#444,
  5. link-color:#39f
  6. ),
  7. primary:(
  8. bgcolor:#00,
  9. text-color:#fff,
  10. link-color:#93f
  11. ),
  12. negative:(
  13. bgcolor:#000,
  14. text-color:#fefefe,
  15. link-color:#d4e
  16. )
  17. )

maps 函数

1.map-get(key):根据给定的key值返回map中的值

  1. $try:(
  2. color:red,
  3. width:1200px,
  4. height:300px
  5. );
  6. //css
  7. .box1{
  8. color:map-get($try,color);
  9. }

但是当map里面没有相应的key是,不会报错也不会编译出相应的CSS样式,所以建议加上一个判断语句

2.map-merge(map2):将两个map合并为一个
map2中有相同的key的指挥取代前面的

3.map-remove(key):从map中删除一个key返回一个新的map
语法:

  1. $map:map-remove($map1,$key)

4.map-keys($map):返回map中所有的key
这个函数最常见的是结合list一起使用。在结合其他的命令如@for、@each in 、@while等

  1. $list:(
  2. color1:blue,
  3. color2:red,
  4. color3:white,
  5. color4:balck
  6. );
  7. $color-list: map-keys($list);
  8. @for $i from 1 through length($color-list){
  9. .item-#{$i}{ color:map-get($list,nth($color-list,$i));}
  10. }
  11. //css
  12. .item-1 {
  13. color: blue;
  14. }
  15. .item-2 {
  16. color: red;
  17. }
  18. .item-3 {
  19. color: white;
  20. }
  21. .item-4 {
  22. color: balck;
  23. }

5.map-values($map):返回map中的所有value

6.map-has-key(key):根据给定的key值判断map中是否具有对应的value值,有的话返回true反之返回false

  1. @function colors($color){
  2. @if not map-has-key($social-colors,$color){
  3. @warn "No color found for'#{$color}' in $social-colors map Property omitted.";
  4. }
  5. @return map-get($social-colors,$color);
  6. }

7.keywords($args):返回一个函数的参数,可以是动态设置的key和value
可以动态创建一个新的map

  1. @mixin

颜色函数

1、RGB颜色函数

  1. color: rgba(#f36,.5);
  2. //css
  3. color: rgba(255, 51, 102, 0.5);

2、HSL函数

3、Opacity函数

@import

使用@import可以再sass文件中引入scss文件和sass文件,引入的scss和sass文件会被合并并且输出一个单一的CSS文件,被导入的文件中的变量和mixins都可以在主文件中使用。

@import会根据文件名引入,默认情况下会寻找sass文件直接引入,但是在下面几种情况下会被编译成CSS的@import规则:

对于没有扩展名的文件,sass会试着找出具有.scss或者是.sass扩展名的同名文件将其导入

  1. @import "foo.css";
  2. @import "foo" screen;
  3. @import "http://foo.com/bar";
  4. @import url(foo);
  5. //编译结果
  6. @import "foo.css";
  7. @import "foo" screen;
  8. @import "http://foo.com/bar";
  9. @import url(foo);

如果引入的文件不想被编译成CSS文件,可以在文件名前面加一个下划线,避免被编译。同一个目录中不能同时存在带下划线和不带下换线的同名文件

@media

1、和CSS中一样进行媒体查询
2、可以在CSS中进行嵌套,如果在样式中使用@media,会冒泡到外面

  1. .sidebar{
  2. width:300px;
  3. @media screen and ( orientation:landscape){
  4. width:500px;
  5. }
  6. }
  7. //css
  8. .sidebar{
  9. width:300px;
  10. @media screen and ( orientation:landscape){
  11. .sidebar{
  12. width:500px;
  13. }
  14. }
  15. }

@extend

@extend是用于扩展选择器和占位符

1、扩展选择器

@at-root

跳出根元素

  1. .a {
  2. color: red;
  3. .b {
  4. color: orange;
  5. .c {
  6. color: yellow;
  7. @at-root .d {
  8. color: green;
  9. }
  10. }
  11. }
  12. }
  13. //css
  14. .a {
  15. color: red;
  16. }
  17. .a .b {
  18. color: orange;
  19. }
  20. .a .b .c {
  21. color: yellow;
  22. }
  23. .d {
  24. color: green;
  25. }

@debug

用于调试,使用@debug后在sass编译出错的时候命令终端会提示错误

  1. @debug 10em + 12em;
  2. //
  3. Line 1 DEBUG:22em;
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注