前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sass学习(二)--混合器与继承

Sass学习(二)--混合器与继承

作者头像
切图仔
发布2022-09-08 17:42:08
4030
发布2022-09-08 17:42:08
举报
文章被收录于专栏:生如夏花绚烂

目录

  • 混合器
  • 继承
混合器

Sass中的混合器类似于js的函数,将一段代码定义成混合器以实现代码的重用 声明混合器:@mixin mixName 调用混合器 @include minName

代码语言:javascript
复制
@mixin border-round{
    -moz-border:1px solid red;
    -webkit-border:1px solid red;
    border:1px solid red
}
#top{
    @include border-round;
}
//编译后
#top {
  -moz-border: 1px solid red;
  -webkit-border: 1px solid red;
  border: 1px solid red; }

混合器css规则

当然混合器中也可以包含css规则

代码语言:javascript
复制
@mixin testmix{
    list-style:none;
    li{
        color:red;
        padding:30px;
    }
    >.top{
        background:red
    }
}

ul.parent{
    border:1px solid red;
    @include testmix;
}
//编译后
ul.parent {
  border: 1px solid red;
  list-style: none; 
}
  ul.parent li {
    color: red;
    padding: 30px; 
}
  ul.parent > .top {
    background: red;
 }

可以看到Sass很智能的帮我们处理了一些较复杂的规则

混合器传参

混合器可以像函数一样传递参数 混合器传参数

代码语言:javascript
复制
@mixin test($color,$size,$hoverColor){
    color:$color;
    border:$size solid red;
    &:hover{
        color:$hoverColor
    }
}

#top{
    @include test(red,1px,blue);
}
//编译后
#top {
  color: red;
  border: 1px solid red; 
}
  #top:hover {
    color: blue; 
}

/*# 

当然这里有个问题,混合器里面的参数不允许颠倒位置,如果你记不清他们什么位置可以使用键值的方式明确指定

代码语言:javascript
复制
@mixin test($color,$size,$hoverColor){
    color:$color;
    border:$size solid red;
    &:hover{
        color:$hoverColor
    }
}

#top{
    @include test($size:1px,$hoverColor:blue,$color:red);
}
//编译后
#top {
  color: red;
  border: 1px solid red;
  }
#top:hover {
    color: blue;
  }

参数默认值

混合器允许你定义参数默认值 如下

代码语言:javascript
复制
@mixin test($normal,$hover:red){
    color:$normal;
    background-color:$hover
}
#top{
    @include test(skyblue,orange);
}
//编译后
#top {
  color: skyblue;
  background-color: orange;
  }
  //不指定color
@mixin test($normal,$hover:red){
    color:$normal;
    background-color:$hover
}
#top{
    @include test(skyblue);
}
//编译后
  
#top {
  color: skyblue;
  background-color: red; }
Sass继承

Sass中也可实现继承类似面向对象思想子类继承父类,sass可以继承多个父类 这个”父类“可以是类,id 标签 状态等。 继承语法 @extend name

代码语言:javascript
复制
.error{
    color:red;
    font-size:15px;
}
.danger-error{
    @extend .error;
    font-size:20px;
}
//编译后
.error, .danger-error {
  color: red;
  font-size: 15px;
}

.danger-error {
  font-size: 20px; 
}

当然父类也可包含css规则

代码语言:javascript
复制
.error{
    color:red;
    font-size:15px;
    >.te{
        padding:10px
    }
}
.danger-error{
    @extend .error;
    font-size:20px;
}
//编译后
.error, .danger-error {
  color: red;
  font-size: 15px; 
}
.error > .te, .danger-error > .te {
    padding: 10px;
  }

.danger-error {
  font-size: 20px; 
 }

组合继承

代码语言:javascript
复制
.error a{
    color:red;
    font-size:10px;
}
.danger{
    @extend .error;
    color:orange;
}
//编译后
.error a, .danger a {
  color: red;
  font-size: 10px; 
}

.danger {
  color: orange; 
}

继承多个

代码语言:javascript
复制
.one{
    color:red;
}
.two{

    border:1px solid red;
}
.three{
    @extend .one;
    @extend .two;
    //或者这样写@extend .one,.two
    //
    background:blue;
}
//编译后
.one, .three {
  color: red; 
}
.two, .three {
  border: 1px solid red;
}
.three {
  background: blue;
}

继承局限性 继承不支持组合 很多选择器不支持继承如包选择器 .one tow 相邻选择器 .one+.two

%继承 有些时候我们希望被用来继承的代码不要渲染到页面上只作为继承使用。 定义方法 父类名前+%

代码语言:javascript
复制
%test{
    border:1px solid red;
}
#main{
    @extend %test;
}
//编译后
#main {
  border: 1px solid red; 
}


#meng a%long{
    color:blue;
    border:1px solid red;
}

.notice{
    @extend %long;
}
//编译后
#meng a.notice {
  color: blue;
  border: 1px solid red; 
}

继承在指令的作用域如(@media) 在指令内部无法继承到指令外部的类,指令外部继承指令内部的类无法达到预期效果

代码语言:javascript
复制
.one{
    height:400px;
}

@media print{
    .two{
        @extend .one
    }
    width:300px;
}

编译时报错

继承注意事项

  1. 不能过量使用继承,因为所有类继承了父类,父类改变就会影响子类
  2. 继承只会在生成css时复制选择器,而不会复制大段的css属性 如果不小心会让生成css中包含大量的选择器复制 避免这种情况的最好办法: 不要在继承css规则中使用后代选择器如
代码语言:javascript
复制
 .dsf{}
 .foo .bar {
 @extend dsf //不推荐
 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
    • Sass继承
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档