sass基础知识

1. 变量

  1. 声明变量,作用域只在当前{ }之中有效,当前{ }之外效果。

    $link-text {
         color: #1890ff
    }
    
  2. 变量引用

    $link-text {
          color: #1890ff
    }
    .parent-dom {
         li {
              border: 1px solid $link-text 
         }
    }
    
  3. 变量名用中划线还是下划线分隔:都可以使用,建议用中划线。

     $link-color: blue;
    

2.嵌套规则

  1. 父选择器的标识符&:&相当于拿到当前节点的父选择器。

    //例:将test-dom 中的li加上鼠标移入效果?
    //错误案例,这导致.test-dom li的所有子元素都加上了hover效果。
    .prent-dom li{
        :hover {
           color: red; 
        }
    } 
    //正确处理:利用&拿到父选择器
    .parent-dom li{
        &:hover {
           color: red; 
        }
    } 
    
  2. 群组选择器的嵌套。

    .parent-dom {
        li,p,h {  
             } 
    }
    .parent-dom {
        li {
           span,strong {
           }
         } 
    }
    
  3. 子组合选择器、同层组合选择器:> + ~;

    <li>
      <span class="child">
         <span class="child4"></span>
      </span>
      <strong class="child1"></strong>
      <span class="child2"></span>
      <span class="child3"></span>
    </li>
    
    
    // >:找到离当前节点最近一级的子元素集合。
    li > span { } //得到节点  .child、.child1、.child2、.child3, 没有.child4
    
    // +:找到当前节点紧邻的下一个同级节点。
    .child + strong { } //得到节点 .child1
    .child + span { }   //没有拿到节点,因为同级下一个节点是strong。
    
    // ~:找到当前节点之后, 所有指定的同层节点。
    .child span { }  //得到节点 .child2 、 .child3
    
  4. 嵌套属性 != 嵌套选择

    nav {
      border-style: solid;
      border-width: 1px;
      border-color: #ccc;
    }
    
    nav {
      border: {
      style: solid;
      width: 1px;
      color: #ccc;
      }
    }
    

3.导入SASS文件:@import “css文件所在路径”;

  • 只有执行到@import时,浏览器才会去下载其他css文件,这导致页面加载起来特别慢。
  • 所有在被导入文件中定义的变量和混合器均可在导入文件中使用。
  1. 使用SASS部分文件

    1. 部分文件:不会在编译时单独编译这个文件输出css,而只把这个文件用作导入。 当sass的文件名是以_下划线开头,说明是sass部分文件。
    2. 如何导入themes/_night-sky.scss这个局部文件里的变量:只需在样式表中写@import “themes/night-sky”,不需要下划线。
  2. 默认变量值: !default。

    !default用于变量,含义是:如果这个变量被声明赋值了,那就用它声明的值,否则就用这个默认值。

    $fancybox-width: 400px !default;
    .fancybox {
       width: $fancybox-width;
    }
    //如果用户在导入你的sass局部文件之前声明了一个$fancybox-width变量,那么你的局部文件中对$fancybox-width赋值400px的操作就无效。如果用户没有做这样的声明,则$fancybox-width将默认为400px。
    
  3. 嵌套结构中使用导入:允许@import命令写在嵌套结构中,导入的变量、混合只在当前导入位置的{}之内有效。

    //例:有一个名为_blue-theme.scss的局部文件,内容如下:
    aside {
      background: blue;
      color: white;
    }
    //然后把它导入到一个CSS规则内,如下所示:
    .blue-theme {@import "blue-theme"}
    //aside只能在.bule-theme中有效,之外无法用。
    

4.静默注释:可以用//来注释。

```less

body {
color: #333; // 这种注释内容不会出现在生成的css文件中
padding: 0; /* 这种注释内容会出现在生成的css文件中 */
}
```

5.混合器:通过sass的混合器实现大段样式的重用。

  • 定义混合器:@mixin “选择器名称”。
  • 引用混合器:@include “选择器名称”。
  1. 混合器中的CSS规则:混合器中不仅是可以放属性(样式),还可以放选择器和选择器中的属性(样式)。混合器中的规则甚至可以使用sass的父选择器标识符&
//声明混合器
@mixin no-bullets { 
  list-style: none;
  li {
    list-style-image: none;
    list-style-type: none;
    margin-left: 0px;
  }
}
//调用混合器
ul.plain {
  color: #444;
  @include no-bullets;
}
//编译后
ul.plain {
  color: #444;
  list-style: none;
}
ul.plain li {
  list-style-image: none;
  list-style-type: none;
  margin-left: 0px;
}
  1. 给混合器传参:跟JavaScript的function很像。

    //声明混合器
    @mixin link-colors($normal, $hover, $visited) {
      color: $normal;
      &:hover { color: $hover; }
      &:visited { color: $visited; }
    }
    //调用混合器
    a {
      @include link-colors(red,blue,yellow);
    }
    //调用混合器的时候,使用key: value的形式传参数,这样就不用考虑传参顺序问题。(对比默认参数)
    a {
        @include link-colors(
          $normal: blue,
          $visited: green,
          $hover: red
      );
    }
    
  2. 默认参数:声明混合器接受参数时,使用key:默认value 的声明形式。

    @mixin link-colors(
        $normal,
        $hover: $normal,
        $visited: $normal
      )
    {
      color: $normal;
      &:hover { color: $hover; }
      &:visited { color: $visited; }
    }
    a {
       @include link-colors(red); //$hover和$visited也会被自动赋值为red
    }
    

6. 使用选择器继承来精简CSS:@extend css选择器。

​ 区别混合器:混合器相当于js中的函数,声明完,要有调用,混合器中的样式,选择器才能起作用。

  1. 继承选择器是如何工作的:

    • 如下案例,@extent .error会将当前的.seriousError拿去跟存在.error的选择器(只有选择器中有.error就行)按照组合选择器的方式进行处理。
    • 注意:按照组合选择器处理的时候,.seriousError的选择器会处理成跟.error选择器的结构一致(简单理解:就是.error会被替换成.seriousError,选择器其他结构不变)。
    .error {
      border: 1px #f00;
      background-color: #fdd;
    }
    .error.intrusion {
      background-image: url("/image/hacked.png");
    }
    .seriousError {
      @extend .error;
      border-width: 3px;
    }
    //编译后得
    error, .seriousError {
      border: 1px #f00;
      background-color: #fdd; }
    
    .error.intrusion, .seriousError.intrusion {
      background-image: url("/image/hacked.png"); }
    
    .seriousError {
      border-width: 3px; }
    
  2. 继承复杂的选择器: Class 选择器并不是唯一可以被继承的,可以继承何定义给单个元素的选择器,比如 .special.cool,a:hover 或者 a.user[href^=“http://”] 等。

    .hoverlink {
      @extend a:hover;
    }
    .comment a.user:hover {
      font-weight: bold;
    }
    //编译后
    .comment a.user:hover,.comment user.hoverlink  {
      font-weight: bold;
    }
    
  3. 多重继承:可以继承多个选择器。多重继承可以使用逗号分隔选择器名。

    .error {
      border: 1px #f00;
      background-color: #fdd;
    }
    .attention {
      font-size: 3em;
      background-color: #ff0;
    }
    .seriousError {
      @extend .error,.attention;
      border-width: 3px;
    }
    //编译后
    .error, .seriousError {
      border: 1px #f00;
      background-color: #fdd; }
    
    .attention, .seriousError {
      font-size: 3em;
      background-color: #ff0; }
    
    .seriousError {
      border-width: 3px; }
    
  4. 继承:不仅只是继承样式,还会继承内部用到的选择器(理解:继承不只是简单的样式继承,得实现父级所有能做到的事情,如被继承体内部选择器的鼠标移入效果);

    #fake-links .link {
      @extend a;
    }
    
    a {
      color: blue;
      &:hover {
        text-decoration: underline;
      }
    }
    //编译后
    #fake-links .link {
      @extend a;
    }
    a,#fake-links .link {
      color: blue;
      a:hover,#fake-links .link:hover { 
        text-decoration: underline;
      }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值