首页 > 代码库 > sass基础用法

sass基础用法

嵌套:

  1.选择器嵌套;

  2.属性嵌套;

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

  3.伪类嵌套;

  .box:before {
          content: "伪元素嵌套";
  }
 
  .box{
      &:before {
          content:"伪元素嵌套";
      }
  }

  4.跳出嵌套;@at-root

  跳出嵌套
  body{
       @at-root .container{
            width: 20px;
        }
  }


混合宏:

 在 Sass 中通过 @mixin 关键词声明了一个混合宏,那么在实际调用中,其匹配了一个关键词“@include”来调用声明好的混合宏

@mixin border-rad($rad1...){
	-webkit-border-radius:$rad1;
	-moz-border-radius:$rad1;
	-o-border-radius:$rad1;
	-ms-border-radius:$rad1;
	border-radius:$rad1;
}
.box4{
	@include border-rad(36px 30px 10px red,2px 5px 6px red);
}

 继承:在 Sass 中也具有继承一说,继承类中的样式代码块。在 Sass 中是通过关键词 “@extend”来继承已存在的类样式块,从而实现代码的继承。

.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;
}
 
效果:
.btn, .btn-primary, .btn-second {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}

占位符:Sass 中的占位符 %placeholder 功能是一个很强大,很实用的一个功能。他可以取代以前 CSS 中的基类造成的代码冗余的情形。因为 %placeholder 声明的代码,如果不被 @extend 调用的话,不会产生任何代码。

%mt5 {
  margin-top: 5px;
}
%pt5{
  padding-top: 5px;
}
 
.btn {
  @extend %mt5;
  @extend %pt5;
}
 
.block {
  @extend %mt5;
 
  span {
    @extend %pt5;
  }
}
 
效果:
.btn, .block {
  margin-top: 5px;
}
 
.btn, .block span {
  padding-top: 5px;
}
 

插值:

$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 asd($wid,$hei,$classname,$bg,$name){
    #{$name}:$wid;
    height:$hei;
    .#{$classname}{
        #{$bg}:red;
    }

}

运算:

.box {
  width: 20px + 30px;
}
 
效果:
.box {
  width: 50px;
}
.box {
  width: 20px - 30px;
}
 
效果:
.box {
  width: -10px;
}
.box {
  width: 20px * 30px;
}
 
效果:
.box {
  width: 600px;
}

注意运算符之间要用空格隔开;

函数:

  颜色函数:

body{
    color: rgb(255,0,200);
}
 
body{
    $color: rgb(255,0,200);
    color: $color;
    background-color: rgba($color,0.5);
}


p{
        color: darken($color, 2);
        background-color: lighten($color,0.5);
    }

 str-length(),str-index();

  z-index:str-length("aaaaa");得到的结果是,Z-index:5;

  z-index:str-index("abcdfedd",c);得到的结果是,Z-index:3;

自定义函数:

  @function double($width){

    @retrun $width * 2;

}

控制命令:

//@if
@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:
 
.block {
  display: block;
}
 
.hidden {
  display: none;
}
 
@debug报错时调试
//@for
@for $i from <start> through <end>
@for $i from <start> to <end>
$i 表示变量
start 表示起始值
end 表示结束值
 
关键字 through 表示包括 end 这个数,而 to 则不包括 end 这个数。
 
@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}
编译出来的 CSS:
 
.item-1 {
  width: 2em;
}
 
.item-2 {
  width: 4em;
}
 
.item-3 {
  width: 6em;
}

//@while
$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
$k: 1;
@each $c in blue, yellow, gray{
  .div#{$k}{
     color: $c;
  }
  $k: $k + 1;
}
 
@each $key,$value in (a: blue, b: yellow, c: gray){
  .class#{$key}{
     color: $value;
  }
}

 

sass基础用法