十分钟掌握sass

502 阅读1分钟

变量、嵌套(选择器、属性)、混合器、继承、函数指令 sass (sass编写清晰、无冗余、语义化的css)

1. 变量

  • 变量声明 使用 $
  • 变量名用中划线分隔,(实际中划线和下划线互通)

2. 嵌套(避免css中重复写选择器,且使样式可读性更高)

  • 父选择器的标识符&
article a {
  color: blue;
  &:hover { color: red }
}
  • 群组选择器的嵌套: ,
  • 子组合选择器和同层组合选择器:>、+和~

2.1. 属性嵌套(嵌套属性的规则:把属性名从中划线-的地方断开,在根属性后边添加一个冒号:,紧跟一个{ }块,把子属性部分写在这个{ }块中。)

nav {
  border: {
  style: solid;
  width: 1px;
  color: #ccc;
  }
}
  • 指明例外规则:
nav {
  border: 1px solid #ccc {
  left: 0px;
  right: 0px;
  }
}

3. 导入SASS文件

  • sass的@import规则在生成css文件时就把相关文件导入进来。这意味着所有相关的样式被归纳到了同一个css文件中,而无需发起额外的下载请求。另外,所有在被导入文件中定义的变量和混合器,均可在导入文件中使用
  • sass局部文件的文件名以下划线开头

4. 混合器 (例如一致的颜色和字体使用变量来统一处理,大段大段的重用样式的代码,通过sass的混合器实现大段样式的重用)

  • @mixin标识符定义
  • @include来使用这个混合器
  • 何时使用混合器
  • 一段样式不停地重复写,那就应该把这段样式构造成优良的混合器,起个合适的混合器名字
  • 给混合器传参
  • 格式
 @mixin 混合器名(参数) {
 属性:参数
}
  • example
 @mixin link-colors($normal, $hover, $visited) {
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}

a {
  @include link-colors(blue, red, green);
}

5. 使用选择器继承来精简CSS //通过选择器继承继承样式

  • 格式:@extend 类名
  • 混合器主要用于展示性样式的重用,而类名用于语义化样式的重用
  • example
.error {
  border: 1px solid red;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}

6. 函数指令

  • 格式
@function 函数名(形参){
    @return ***;
}
  • example
$grid-width: 40px;
$gutter-width: 10px;

@function grid-width($n) {
  @return $n * $grid-width + ($n - 1) * $gutter-width;
}

#sidebar { width: grid-width(5); }

7. @for

@for $i from 1 through 1000 {
    .#{unique-id()}-#{$i} {
        ...
    }
}

8. keyframes 给keyframes定义一个混合宏(mixins)

@mixin keyframes($animationName) {
    @-webkit-keyframes #{$animationName} {
        @content;
    }
    @-moz-keyframes #{$animationName} {
        @content;
    }
    @-o-keyframes #{$animationName} {
        @content;
    }
    @keyframes #{$animationName} {
        @content;
    }
}

<!--使用-->
@include keyframes(move-the-object) {
    0%   { 
        transform: translateX(0);
    }
    100% { 
        transform: translateX(200px); 
    }
}