sass基础语法--嵌套与继承

1.嵌套

1-1.选择器嵌套

/*选择器嵌套*/
body{
    background: antiquewhite;
    header{
        background: aquamarine;
    }
}

1-2.属性嵌套

/*属性嵌套*/
   footer{
       background: {
           color: red;
           size: 100% 100%;
       }
   }

1-3.伪类嵌套+父类选择器

   li{
      &:before{
          color:red;
      } /*&为上一级选择器*/
      &:after{
          background: green;
      }
   }

1-4.跳出嵌套

开发中当嵌套的层数达到一定的时候有需要跳出嵌套的时候,sass中提供了@at-root来跳出嵌套.
body{
...
...
   /*跳出嵌套*/
   @at-root .container{
       width: 996px;
   }
}
这时候会跳出body的嵌套,根据实际需求选择使用.
编译后的css:
.container {
  width: 996px;
}
值得注意的是这种写法不会跳出媒体查询@media的嵌套,如果想跳出@media则需要加上参数,如下面例子:
body{
       @media screen and (max-width:600px){
       /*跳出media媒体查询,但是没有跳出body*/
       @at-root(without:media){
          .container{
              background: navajowhite;
          }
      }
     
   }
}
这时候已经跳出media查询,但是没有跳出body嵌套,如果你想继续跳出去,加上rule参数即可
body{
   @media screen and (max-width:600px){
        /*跳出media和body*/
       @at-root(without:media rule){
           .container{
               background: saddlebrown;
           }
       }
   }
}

2.继承@extend

2-1.简单继承

.small{
    font-size: 14px;
}
.alert_info{
    @extend .small;
    color: red;
}

2-2.多继承

.alert{
    background: darkblue;
}
.small{
    font-size: 14px;
}
/*多个继承*/
.alert_info{
    @extend .alert,.small;
    color: red;
}
上面的.alter和.small都会一起编译到css输出文件中.隐藏一个问题,下面会说明.

2-3.链式继承

/*链式继承*/
.one{
    border: 1px solid red;
}

.two{
    @extend .one;
    color: saddlebrown;
}
.three{
    @extend .two;
    font-size: 14px;
}
其实上面的继承隐藏着一个问题就是:假如被继承的样式不会被页面的html引用,这就造成了代码冗余,造成生成的css文件太大,影响渲染速度.为了解决这个问题,sass中采用了占位符%的方式进行优化.
/*要使编译后不会出现代码冗余,必须使用占位选择器%*/
%alert{
    background: darkblue;
}
.alert_info{
    @extend %alert;
    color: red;
}
上面代码中%alter不会被编译到css输出文件中.

小结: 虽然能继承的选择器有很多,但是还有不支持的.比如包含选择器(.one .two)或者是相邻兄弟选择器(.one+.two),同时如果被继承的元素a又有hover状态的形式,那么hover状态也会被继承下来,这个可能不是你想要的.所以应当注意这些问题.



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值