常用Sass语法

794 阅读4分钟

1.什么是Sass

Sass是一种基于CSS的预处理语言,在Css的基础上将代码抽象化简单化,实现了更多的功能扩展,比如定义变量,嵌套,条件判断等,主要目的就是为了减少CSS代码的重复性和代码冗余,使维护更加方便,可读性更强。

Sass分两种语法:一种是Scss,一种是Sass。Sass是老语法,也称缩进语法,他不是使用大括号和分号,而是使用缩进,文件使用扩展名.sass

h1
  color:#000
  background:#fff

最新语法为Scss,增强了对css3语法的支持,可以完全兼容css3,扩展名为.scss

下面为大家介绍一些编程中常用的Scss语法。

2.变量

// 全局变量
// 可以放在一个独立的文件
$main-set-ff: Arial;
.box: {
  font-family:$main-set-ff
 };
// 局部变量
.box {
  $width: 666px;
  width: $width;
}

3.引入文件

// 使用scss的@import规则不需要指明被导入文件的全名。
// 你可以省略.sass或.scss文件后缀
@import 'varibles'

注意:scss中的@import跟css中原生的@import不是一个东西

css的@import规则,允许在一个css文件中导入其他css文件。但是只有执行到@import时,浏览器才会去下载其css文件,造成渲染阻塞,对性能不利。

scss的@import规则,是在生成css文件时就把相关文件导入进来,所有相关的样式被归纳到了同一个css文件中,而无需发起额外的下载请求。

另外Scss的@import可以放在样式表任意位置,而css中的@import只能放在代码最前面

4.嵌套

嵌套最好不要超过四层,否则会影响性能

// 选择器嵌套
.main-set{
  font-size:12px;
  .head-line{
    color:#333;
   }
 }
 // 属性嵌套
 .head-line{
   font:{
     family:Arial;
     size:16px;
   }
 }
 // 伪类嵌套(&)
 .head-title{
   color:#333;
   &:hover{
    background-color:#eee;
   }
} 

5.继承@extend

.error {
  color:#f00;
 }
.serious-error {
  @extend .color;
  border:1px solid #f00;
 }
 // 编译成css如下,serious-error也拥有了error的样式
 .error,.serious-error {
   color:#f00;
 }
 .serious-error{
   border:1px solid #f00
  }

占位继承:不是为了给某个元素使用,仅仅给@extend使用。前面添加%,占位继承的选择器不会显示在编译后的css中

%div0{
  width:100px;
 }
.div1{
  @extend %div0;
 }
 // 编译后
 .div1{
   width:100px;
 } 

注意:@extend不可以继承选择器序列

6.混合@mixin

@mixin col-6{
  width:50%;
  float:left
 }
.demo-sec{
  @include col-6() 
 }
 // 也可以带参数,指定默认值
 @mixin col($width:50%,$color:#f00){
   width:$width;
   color:$color;
 }
 .demo{
   @include col(40%,#333);
 }

7.@debug、@warm、@error

用来调试的,当编译出错时输出你设置的提示信息

8.@media

sass中的@media可以内嵌在css规则中,在生成css的时候,@media会被提到样式的最高层级

@mixin col-sm($width:50%){
  @media (min-width:768px){
    width:$width;
    float:left;
  }
}
.webdemo-sec{
  @include col-sm()
}
// 编译成css
@media (min-width:768px){
  .webdemo-sec{
    width:50%;
    float:left;
  }
}

9.@at-root

浏览器在解析css选择器的时候是从右往左的顺序解析的,嵌套多层会导致样式渲染低效。使用@at-root指令,能够使嵌套的内容跳出根元素。这样既能保证嵌套结构,看起来清晰,又能提高渲染性能。

.main-set{
  font-size:12px;
  @at-root{
   .main-set-headline{
     color:#f00;
   }
}
// 编译后
.main-set{
  font-size:12px;
}
.main-set-headline{
  color:#f00;
}

10.条件判断@if @else

@mixin col-sm($width:50%){

  @if type-of($width)!==number{
    @error "$width必须是一个数值类型!,当前输入为#{$width}";
  }
  
  @if not unitless($width){ //not取反
   // 有单位
    @if unit($width)!=="%" {
      @error "$width应该是一个百分值!,当前输入为#{$width}";
    }
  }@else {
    // 无单位
    @warn "$width应该是一个百分值!,当前输入为#{$width}"
    $width:(percentage($width/100))
  }
}

11.基本运算(加减乘除)

1.加法、减法

数值可以带单位,但是需要运算单位相同,如果不相同就会报错,编译不通过

$sidebar-width:220px;
$content-width:720px;
.container {
  width: ($sidebar-width + $content-width)
  margin: 0 auto;
}
// 编译出来的css代码是:
.container {
   width:940px;
   margin:0 auto;
}

注意:如果做减法运算是“变量”而不是“数值”的时候,要注意减号“-”前后一定要有空格。

2.乘法

做乘法运算时,只能有一个数值带单位,另外一个数值只能是不带单位的数字。如果两个都是带单位的数字,则Sass会报错而编译不通过。

3.除法

“/”在CSS中已经作为一种符号来使用了,例如字体属性缩写“font:Arial 12px/1.5em”。因此在Sass中做除法运算的时候,如果我们直接使用“/”符号作为除号,将不会生效,所以除法运算需要在外面添加一个“()”。如width:($width/2)

如果做除法运算中是“变量”而不是“数值”时,“/”会被自动识别为除法,不需要在外面添加小括号。

注意:在实际开发中,不管是加减,还是乘除,建议在外面加上小括号。这种书写方式,能够使得代码一目了然,也方便维护。

11.注释

// 单行注释:编译后不显示
/* 多行注释:编译后显示,压缩不显示 */
/*!强制注释:编译后显示,压缩后也显示*/

12.设置字符编码,支持中文注释

@charset "UTF-8";