@Bios
2018-12-10T08:47:34.000000Z
字数 2025
阅读 907
sass
这里说的 Sass 语法是 Sass 的最初语法格式,他是通过 tab 键控制缩进的一种语法规则,而且这种缩进要求非常严格。另外其不带有任何的分号和大括号。常常把这种格式称为 Sass 老版本,其文件名以“.sass”为扩展名。
来看一个 Sass 语法格式的简单示例。假设我们有一段这样的 CSS 代码:
body {font: 100% Helvetica, sans-serif;color: #333;}
$font-stack: Helvetica, sans-serif$primary-color: #333bodyfont: 100% $font-stackcolor: $primary-color
在整个 Sass 代码中,我们没看到类似 CSS 中的大括号和分号。
注:这种语法格式对于前端人员都不太容易接受,而且容易出错。
$color: red // 定义变量 '$'.box{color:$color // 使用变量}
sass 的默认变量仅需要在值后面加上
!default即可。
$baseLineHeight: 2;$baseLineHeight: 1.5 !default;body{line-height: $baseLineHeight;}
sass 的默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式也很简单,只需要在默认变量之前重新声明下变量即可。
//SCSS$color: orange !default;//定义全局变量(在选择器、函数、混合宏...的外面定义的变量为全局变量).block {color: $color;//调用全局变量}em {$color: red;//定义局部变量a {color: $color;//调用局部变量}}span {color: $color;//调用全局变量}
在 Sass 中,使用“@mixin”来声明一个混合宏。
// 不带参数@mixin border-radius{-webkit-border-radius: 5px;border-radius: 5px;}// 带值参数@mixin border-radius($radius:5px){-webkit-border-radius: $radius;border-radius: $radius;}// 不带值参数 由调用的时候传入@mixin border-radius($radius){-webkit-border-radius: $radius;border-radius: $radius;}// 复杂宏@mixin box-shadow($shadow...) {@if length($shadow) >= 1 {@include prefixer(box-shadow, $shadow);} @else{$shadow:0 0 4px rgba(0,0,0,.3);@include prefixer(box-shadow, $shadow);}}// 这个 box-shadow 的混合宏,带有多个参数,这个时候可以使用“ … ”来替代。简单的解释一下,当 $shadow 的参数数量值大于或等于“ 1 ”时,表示有多个阴影值,反之调用默认的参数值“ 0 0 4px rgba(0,0,0,.3) ”。
// 调用宏 '@include'.button {@include border-radius; // 有默认值@include border-radius(5px); // 自己传,也可以当作覆盖}.box {@include box-shadow(0 0 1px rgba(#000,.5),0 0 2px rgba(#000,.2));}
//SCSS.btn {border: 1px solid #ccc;padding: 6px 10px;font-size: 14px;}.btn-primary {background-color: #f36;color: #fff;@extend .btn;}.btn-second {background-color: orange;color: #fff;@extend .btn;}
Sass 中的占位符 %placeholder 功能是一个很强大,很实用的一个功能,这也是我非常喜欢的功能。他可以取代以前 CSS 中的基类造成的代码冗余的情形。因为 %placeholder 声明的代码,如果不被 @extend 调用的话,不会产生任何代码。
%mt5 {margin-top: 5px;}%pt5{padding-top: 5px;}.btn {@extend %mt5;@extend %pt5;}.block {@extend %mt5;span {@extend %pt5;}}
//CSS.btn, .block {margin-top: 5px;}.btn, .block span {padding-top: 5px;}
从编译出来的 CSS 代码可以看出,通过 @extend 调用的占位符,编译出来的代码会将相同的代码合并在一起。