Sass 基础(五)

2018-01-19 18:19:09 浏览数 (1)

@if   @if 指令是一个SassScript,它可以根据条件处理样式块,如果条件为true返回一个样式块,反之   false 返回另一个样式块,在Sass 中除了@if之,还可以配合@else if和eles 一起。   例如:     

代码语言:scss复制
//SCSS
		      @mixin blockOrHidden($boolean:true){
			            @if $boolean {
				              @debug "$boolean is #{$boolean}";
				              display:block;
			              }
			              @else{
				                @debug "$boolean is #{$boolean}";
				                  display:none;
			                }
		              }
		            .block{
			              @include blockOrHidden;
		            }
		      .hidden{
			          @include blockOrHidden(false);
		      }

    编译出来的css

代码语言:css复制
		    .block{
			      display:block;
		    }
		    .hidden{
			      display:none;
		    }

@for循环(上)     在Sass 的@for 循环中油两种方式:     @for $i from <start> through <end>     @for $i from <start> to <end>     $i 表示变量     start 表示起始值     end 表示结束值     这两个的区别是一个关键字,through 表示包括end 这个数,而to 则不包括end 这个数。     如下代码,先来一个使用through 关键字。

代码语言:css复制
		    @for $i from 1 throug 3 {
			      .item-#{$i} {
					          width:2em *$i;
				        }
		     }

    编译出来css

代码语言:css复制
		    .item-1{
			        width:2em;
		      }
		    .item-2{
			      width:4em;
		    }
		    .item-3{
			        width:6em;
		    }

    在来一个to关键字的例子:

代码语言:css复制
		    @for $i from to 3 {
			      .item-#{$i} { width:2em * $i;}
		     }

    编译出来的css:

代码语言:css复制
		    .item-1{
			      width:2em;
		    }
		    .item-2{
			      width:4em;
		    }

@for循环(下)     @for 应用在网格系统生成各个格子class 的代码。

代码语言:scss复制
	    //scss
	      $grid-prefix: span !default;
	      $grid-width:60px !defaulet;
	      $grid-gutter:20px  !defaulet;
 
	    %grid{
		        float:left;
		        margin-left:$grid-gutter / 2;
		        margin-right:$grid-gutter / 2;
	      }
	    @for $i from 1 through 12 {
		    .#{$grid-prefix} #{$i}{
			        width:$grid-width *$grid-gutter *($i - 1);
			        @extend %grid;
		      }
	    }

    编译出来的css

代码语言:css复制
	     .span1, .span2, .span3, .span4, .span5
	      , .span6, .span7, .span8, .span9, .span10,
	      , .span11,, .span12{
		              float:left;
		              margin-left:10px;
		              margin-right:10px;
	       }
	      .span1{
		          width:60px;
	      }
	      .span2{
		          width:140px;
	      }
	      .span3{
		          width:220px;
	      }
	      .span4{
		          width:300px;
	       }
	      .span5{
		          width:380px;
	      }
	      .span6{
		          width:400px;
	      }
	      .span7{
		          width:540px;
	      }
	      .span8{
		          width:620px;
	      }
	      .span9{
		          width:700px;
	      }
	      .span11 {
  		        width: 860px;
	      }

      .span12 {         width: 940px;       }     将上面的示例稍做修改,将 @for through 方式换成 @for to::       //scss       @for $i from 1 to 13{ .        #{$grid-prefix}#{$i}{           width:$grid-width * $i $grid-grutter *($i -1);           @extend %grid;           }       }     这两段 Sass 代码并无太多差别,只是 @for中的 <end> 取值不同。配合 through 的 <end> 值是 12,     其遍历出来的终点值也是 12,和 <end> 值一样。配合 to 的 <end> 值是 13,其遍历出来的终点值是 12,     就是 <end> 对就的值减去 1 @while 循环     @while指令也需要SassScript 表达式(像其他指令一样),并且会生成不同的样式块,直到表达式值为false     时停止循环。这个和@for 指令很相似,只要@while 后面的条件为true就会执行。     例如:       //SCSS       $types:4;       $type-width:20px;       @while $types > 0{           .while-#{$types}           width:$type-width $types;         }       $types: $types - 1;       编译出来css       .while-4{           width:24px;         }       .while-3{           width:23px;         }       .while-2{           width:22px;         }       .while-1{         width:21px;       } @each循环   @each循环就是去遍历一个列表,依然从列表中取出对应的值。   @each 循环指令的形式:   @each $var in <list>   例如:     @mixin author-images{       @each $author in $list {         .photo-#{$author}{           background:url("/images/avatars/#{$author}.png") no-repeat;           }       }     }   .anthor-bio{       @include author-images;   }   编译出来 CSS   .author-bio .photo-adam{     background:url("/images/avatars/adam.png") no - repeat;   }   .author-bio .photo-john{     background:url("/images/avatars/john.png") no - repeat;   }   .author-bio .photo-wynn{       background:url("/images/avatars/wynn.png") no - repeat;   }   .author-bio .photo-mason{         background:url("/images/avatars/mason.png") no - repeat;   }   .author-bio .photo-kuroir{     background:url("/images/avatars/wynn.png") no - repeat;   }     Sass的函数简介     函数主要包括。     字符串函数     数字函数     列表函数     颜色函数     Interospection函数     三元函数等。     字符串函数-unquote() 函数     字符串函数顾名思义是用来处理字符串的函数,Sass 的字符串函数要包括两种。     unquote($string): 删除字符串中的引号     quote($string):给字符串添加引号。 1.unquote()函数。     unquote() 函数主要是用来删除字符串的引号。如果这个字符串没有带引号,将返回原始的字符串     //SCSS       .test1{         content: unquote('Hello Sass!');       }     .test2{         content:unquote(" 'Hello Sass!");       }     .test3{         content:unquote("I' m Web Designer");     }     .test4{         content:unquote(" 'Hello Sass!' ");     }     .test5{         content:unquote('" Hello Sass!"');     }     .test6{       content:unquote(Hello Sass);     }     编译后的 css代码      // css     .test1{       content:Hello Sass!; }     .test2{       content:'Hello Sass!; }     .test3{       content:I'm Web Designer; }     .test4{       content:'Hello Sass!'; }     .test5{       content:"Hello Sass!"; }     .test6{       content:Hello Sass!; }     unquote( ) 函数只能删除字符串最前和最后的引号(双引号或单引号),而无法删除字符串中间的引号。     如果字符没有带引号,返回的将是字符串本身。     字符串函数-quote()函数       quote()函数刚好与unquote() 函数功能相反,主要用来给字符串添加引号。如果字符串,自身带有引号     会统一换成双引号。     // SCSS     .test1{         content: quote( 'Hello Sass!' );       }     .test2{         content: quote("Hello Sass!")     }     .test3{       content: quote(ImWebDesigner);     }     .test4{       content: quote(' ');     }     编译出来的css 代码     // css     .test1{         content: "Hello Sass!";     }     .test2{         content: "Hello Sass!"     }     .test3{       content: "ImWebDesigner";     }     .test4{       content: "";     }     使用 quote() 函数只能给字符串增加双引号,而且字符串中间有单引号或者空格时,     需要用单引号或双引号括起,否则编译的时候将会报错。     字符串函数-To-upper-case(),To-lower-case()     1.To-upper-case(),To-lower-case()       To-upper-case()      //SCSS     .test {         text:to-upper-case(aaaaa);         text:to-upper-case(aA-aAAA-aaa);     }   编译出来的css 代码     // CSS     .test{       text:AAAAA;       text:AA-AAAA-AAA;     } 2.To-lower-case()   To-lower-case() 函数 与To-upper-case()刚好相反,将字符串转成小写字母。   // SCSS   .test{       text: to-lower - cass(AAAAA);       text: to-lower-case(aA-aAAA-aaa)   }   编译出来的 css 代码;     //css     .test{       text: aaaaa;       text:aa-aaaa-aaa;     }     数字函数简介     Sass 中的数组函数要针对数字方面提供一系列的函数功能:     percentage($value):将一个不带单位的数转换成百分比:     round($value):将数值四舍五入,转换成一个最接近的整数;     ceil($value):将大于自己的小数转换成下一位整数;     floor($value):将一个数去除他的小数部分;     abs($value):返回一个数的绝对值。     min($numbers...) 找出几个数之间的最小值:     max($numbers...)找出几个数值之间的最大值     random() 获取随机数。     数字函数-percentage() 1.percentage()     percentage() 函数主要是将一个不带单位的数字转成 百分比形式:     >> percentage(.2)     20%     >>percentage(2px / 10px)     20%     >>percentage(2em / 10em)     20%     >>     .footer{         width:percentage(.2)     }     编译后的css 代码;     .footer{       width:20%;     } 数字函数-round() 函数     round()函数可以将一个数四舍五入为一个最近的整数;     >>round(12.3)       12     >> round(12.5)       13     >>round(1.499999)       1     >>round(20%)       20%     >>round(3.9em)       4em     >>round(2.3px)       2px     >>round(1px /3px)       0     >>round(3px / 2em)       2px/em

      .footer{           width:round(12.3px)       }     编译出来的css     .footer{         width:12px;       } 数字函数-ceil()函数     ceil()函数将一个数转换成最接近自己的整数,会讲一个大约自身的任何小数转换成大约本身1的整数,也就是只做入,不做舍的     >> ceil(2.0)       2     >>ceil(2.1)       3     >>ceil(2.6)       3     >>ceil(2.3%)       3%     >>ceil(2.5px)       3px     >>ceil(2px / 3px)       1     >>ceil(2% / 3px)       1%/px     >>ceil(1em / 5px)       1em/px     .footer{       width:ceil(12.3px);     }     编译后的css 代码:   .footer{       width:13px;   }   数字函数-floor()函数     floor()函数刚好与ceil()函数功能相反,其主要将一个数去除其小数部分。并且不做任何的进位,也就是只做舍,不做入的计算。   >> floor(2.1)     2   >> floor(2.5)     2   >>floor(3.5%)     3%   >>floor(10.2px)     10em   >> floor(10.2px)     10px   >>floor(10.8em)     10em   >>floor(2px / 10px)     0   >> floor(3px / 1em)     3px /em   .footer{     width:floor(12.3px);   }   编译后的css代码   .footer{     width:12px;   } 数字函数-abs() 函数   abs()函数会返回一个数的绝对值。   >>abs(10)     10   >>abs(-10)     10   >>abs(-10px)     10px   >>abs(-2em)     2em   >>abs(-.5%)     0.5%   >>abs(-1px / 2px)     0.5   .footer{     width:abs(-12.3px)   }   编译后的css代码:     .footer{       width:12px;     } 数字函数-min()函数,max()函数   min() 函数功能主要是在多个数之中找到最小的一个,这个函数可以设置任意多个参数。   >>min(1,2,1%,3.300%)     1%   >> min(1px,2,3px)     1px   >>min(1em,2em,6em)     1em   不过在min() 函数中同时出现两种不同类型的单位,将会报错误信息。     >>min(1px, 1em)       SyntaxError: Incompatible units:'em' and'px'. max()函数   max()函数和min函数一样,不同的是,max() 函数用来获取一系列书数中的最大那个值。     >> max(1,5)       5     >>max(1px,5px)       5px     同样的,如果在max()函数中有不同的单位,将会报错:     >> max(1,3px,5%,6)       SyntaxError: Incompatible units: '%' and ‘px'.     数字函数-random()函数     random()函数是用来获取一个随机数。     >> random()       0.03886     >>random()       0.66527     >> random()       0.8125     >>random()       0.26839     >>random()     0.85065 列表函数介绍       列表函数主要包括一些对列表参数的函数使用,主要包括以下几种形式。       length($list):返回一个列表的长度值:       nth($list,$n):返回一个列表中指定的某个标签值。       join($list1,$list2,[$separator] ):将某个值放在列表的最后;       zip($lists...);将几个列表结合成一个多维的列表:       index($list,$value)返回一个值在列表中的位置值。 length()函数   length()函数主要用来返回一个列表的中有几个值,简单点说就是返回列表清单中有多少个值:   >>length(10px)     1   >>length(10px 20px (border 1px solid) 2em)     4   >>length(border 1px solid)     3   length() 函数中的列表参数之间使用空格隔开,不能使用逗号,否则函数将会出错;   >> length(10px, 20px,(border 1px solid),2em)     SyntaxError: wrong number of arguments(4 for 1) for'length     nth($list,$n)     nth()函数用来指定列表中某个位置的值,不过在Sass 中,nth()函数和其他语法不同,1 是指列表中的第一个标签值     2 是指列表中的第二个标签值。       >> nth(10px 20px 30px,1)         10px       >>nth((Helvetica,Arial,sans-serif),2)         "Arial"       >>nth((1px solid red) border-top green,1)         (1px "solid" #ff0000)       在nth($list,$n) 函数中的$n 必须是大于 0 的整数;

0 人点赞