sass入门语法小结

1.Sass是以严格的缩进式语法,不带大括号和分号。

2.安装Sass
安装Ruby后
控制台:gem install sass

3.查询Sass
sass -v

4.更新Sass
gem update sass

5.卸载Sass
gem uninstall sass

6.文件扩展名为.sass 就只能是老语法,没有括号与分号;
文件扩展名为.scss使用的是新语法,有括号和分号。

7.Sass命令编译
(1)单文件编译:
sass <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css
(2)多文件编译
sass sass/:css/
(3)开启watch功能,不用每次改变都执行上面命令一遍:
sass --watch <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css

8.界面工具编译,个人使用考拉。

9.自动化编译:Grunt以及Gulp

10.嵌套输出方式nested:
在编译的时候带上参数“ --style nested”

11.展开输出方式expanded:
在编译的时候带上参数“ --style expanded”,
这个输出的 CSS 样式风格和 nested 类似,只是大括号在另起一行。

12.紧凑输出方式compact:
在编译的时候带上参数“ --style compact”

13.压缩输出方式compressed:
在编译的时候带上参数“ --style compressed”,
压缩输出方式会去掉标准的 Sass 和 CSS 注释及空格。

语法:
14.声明变量 用$符号

15.默认变量:sass 的默认变量仅需要在值后面加上 !default 即可。sass 的默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式也很简单,只需要在默认变量之前重新声明下变量即可。
例如:

$baseLineHeight: 2;
$baseLineHeight: 1.5 !default;
body{
   line-height: $baseLineHeight; 
}

注:全局变量就是定义在元素外面的变量。当在局部范围(选择器内、函数内、混合宏内...)声明一个已经存在于全局范围内的变量时,局部变量就成为了全局变量的影子。基本上,局部变量只会在局部范围内覆盖全局变量。

16.嵌套-属性嵌套

.box {
   border-top: 1px solid red;
   border-bottom: 1px solid green;
}

//在 Sass 中我们可以这样写:
.box {
   border: {
     top: 1px solid red;
     bottom: 1px solid green;
   }
}

17.嵌套-伪类嵌套(跟属性嵌套差不多)

.clearfix{
    &:before,&:after {
        content:"";
        display: table;
    }
    &:after {
       clear:both;
       overflow: hidden;
    }
}

18.混合宏(@mixin开头)

//(1)声明不带参的混合宏
@mixin ...{ }
//(2)带参的混合宏
@mixin border-radius($radius:5px){
       border-radius: $radius;
}
//(3)复杂的混合宏
@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) ”。

注:复杂的混合宏中的逻辑关系(@if...@else)后面小节会有讲解。
(4)调用混合宏:
@include 混合宏名字

19.混合宏的参数

(1)传一个不带值得参数
@mixin border-radius($radius){
   border-radius: $radius;
}
//在混合宏“border-radius”中定义了一个不带任何值的参数“$radius”。

在调用的时候可以给这个混合宏传一个参数值:
.box {
  @include border-radius(3px);
}
2)传一个带值得参数 @mixin border-radius($radius:3px){   border-radius: $radius; } //在混合宏“border-radius”传了一个参数“$radius”,而且给这个参数赋予了一个默认值“3px”。 //在调用类似这样的混合宏时,会多有一个机会,假设你的页面中的圆角很多地方都是“3px”的圆角,那么这个时候只需要调用默认的混合宏“border-radius”: .btn {   @include border-radius; } //但有的时候,页面中有些元素的圆角值不一样,那么可以随机给混合宏传值,如: .box {   @include border-radius(50%); } (3)传多个参数(与前面类似,就是多几个变量) //注: 有一个特别的参数“…”。当混合宏传的参数过多之时,可以使用参数来替代。 例如:@mixin box-shadow($shadows...){}
4)混合宏的不足:会生成冗余的代码块,不会自动合并相同的样式代码。

20.继承(@extend):
继承类样式块中所有样式代码,而且编译出来的 CSS 会将选择器合并在一起,形成组合选择器。

.btn {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}

.btn-primary {
  background-color: #f36;
  color: #fff;
  @extend .btn;
}

21.占位符(%名字):
%placeholder 声明的代码,如果不被 @extend 调用的话,不会产生任何代码。可以取代以前 CSS 中的基类造成的代码冗余的情形。

%mt5 {
  margin-top: 5px;
}
%pt5{
  padding-top: 5px;
}

.btn {
  @extend %mt5;
  @extend %pt5;
}

22.插值 #{}
当你想设置属性值的时候你可以使用字符串插入进来。

$properties: (margin, padding);
@mixin set-value($side, $value) {
  @each $prop in $properties {
    #{$prop}-#{$side}: $value;
  }
}
.login-box {
  @include set-value(top, 14px);
}
它可以让变量和属性工作的很完美,上面的代码编译成 CSS:

.login-box {
  margin-top: 14px;
  padding-top: 14px;
}

注:#{}语法并不是随处可用,你也不能在 mixin 中调用,可以使用 @extend 中使用插值。

23.数据类型:
(1)数字
(2)字符串
分为有引号字符串和无引号字符串。使用 #{ }插值语句 (interpolation) 时,有引号字符串将被编译为无引号字符串。
(3)颜色
(4)布尔值
(5)空值
(6)值列表:用空格或者逗号分开,如,1.5em 1em 0 2em 、 Helvetica, Arial, sans-serif。
nth函数(nth function) 可以直接访问值列表中的某一项;
join函数(join function) 可以将多个值列表连结在一起;
append函数(append function) 可以在值列表中添加值;
@each规则(@each rule) 则能够给值列表中的每个项目添加样式。

运算
24.加法:在变量或属性中都可以做加法运算。
25.减法:

$full- 960px;
$sidebar- 200px;

.content {
   $full-width - $sidebar-width;
}
//编译出来的 CSS 如下: .content {    760px; }

26.乘法:
如果进行乘法运算时,两个值单位相同时,只需要为一个数值提供单位即可。
例如:

.box {
   10px * 2;
}
//而不是:
.box {
  10px * 2px; 
}

27.除法:

.box {
   (100px / 2); 
}

单独运算时,一定要加小括号;若/在已有的数学表达式中,不用加小括号也会自动识别为除法。

注:以上四种运算,单位不同可能会报错。

28.变量计算:

$content- 720px;
$sidebar- 220px;
$gutter: 20px;

.container {
   $content-width + $sidebar-width + $gutter;
  margin: 0 auto;
}
//编译出来的CSS .container {    960px;   margin: 0 auto; }

29.数字运算:

.box {
   ((220px + 720px) - 11 * 20 ) / 12 ; 
}
//编译出来的 CSS: .box {    60px; }

30.颜色运算:

p {
  color: #010203 + #040506;
}
//计算公式为 01 + 04 = 05、02 + 05 = 07 和 03 + 06 = 09, 并且被合成为:
//如此编译出来的 CSS 为:
p {   color: #050709; }
//算数运算也能将数字和颜色值 一起运算,同样也是分段运算的。如: p {   color: #010203 * 2; } //计算公式为 01 * 2 = 02、02 * 2 = 04 和 03 * 2 = 06, 并且被合成为: p {   color: #020406; }

31.字符运算:

$content: "Hello" + "" + "Sass!";
.box:before {
  content: " #{$content} ";
}
//编译出来的CSS:
.box:before {
  content: " Hello Sass! ";
}
//或者: div {   cursor: e + -resize; } //编译出来的CSS: div {   cursor: e-resize; }

注:如果有引号的字符串被添加了一个没有引号的字符串 (也就是,带引号的字符串在 + 符号左侧), 结果会是一个有引号的字符串。 同样的,如果一个没有引号的字符串被添加了一个有引号的字符串 (没有引号的字符串在 + 符号左侧), 结果将是一个没有引号的字符串。

原文地址:https://www.cnblogs.com/zyl96/p/10082657.html