css中使优先级下降,@layer规则使用

2022-06-28  本文已影响0人  keknei

@layer的作用可以让 CSS 声明的优先级下降一整个级联级别

比如说我们用了一些ui的框架,但是在实际开发当中,ui的框架颜色和项目的主题颜色不对,就需要修改ui的颜色,例如原来的框架的btn按钮背景颜色是

.el-button--primary {
  background: #409EFF;
}

我们要修改成红色,就需要添加优先级去覆盖上面的css

body .el-button--primary {
  background: red;
}

但是这样就显得代码又长又罗嗦,甚至还会影响别的元素样式,所以@layer就横空出世,喜大普奔了,如果我们将ui里的css优先级降低,我们直接设置css就可以了,不用提高优先级

/*此时的@layer里的css优先级是降了一级的*/
@layer{
    .el-button--primary {
        background: #409EFF;
    }
}

然后我们直接设置css就可以了,这样就可以把ui里的css样式覆盖掉

.el-button--primary {
  background: red;
}
@layer4种语法规则

1. @layer layer-name {rules};
2. @layer layer-name;
3. @layer layer-name, layer-name, layer-name;
4. @layer {rules};

<p id="text">我是要显示的内容</p>

如果size1和size2有重复的css,最后会显示size2设置的css,也就是说后面的优先级大于前面的优先级

@layer size1{
  #text{
    font-size:20px;
  }
}

@layer size2{
  #text{
    font-size:40px;
  }
}
@layer size;
/*
 css
*/
@layer size{
  #text{
    font-size:20px;
  }
}

@layer size2,size1;
@layer size1{
  #text{
    font-size:20px;
  }
}

@layer size2{
  #text{
    font-size:40px;
  }
}

如果size1和size2有重复的css,最后会显示size1设置的css,也就是说@layer size2,size1后面name的优先级大于前面name的优先级

#text{
  color:red;
}
@layer{
   #text{
     color:blue;
   }
}
整个文件都降低优先级,让整个css文件都变成layer

此时应当注意,@import "url"应该放在css的最上方,不然不起作用,可以命名,名称可以自己随意定义,如果layer多的话,想要调整layer优先级,就可以利用名称排序了

@layer lib2,lib1;
@import './lib.css' layer(lib1);
@layer lib2{
  .lib{
    padding:20px;
  }
}

也可以匿名.layer就是一个关键字了,而不是一个方法

@import './lib.css' layer
link标签引入css的使用layer

同样,支持自定义名称,也支持匿名用法。

<link rel="stylesheet" href="/index.css" layer="index">
<link rel="stylesheet" href="/index.css" layer>
嵌套layer的规则
@layer A{
  p{
    color:red;
  }
  @layer B{
    p{
      color:blue;
    }
  }
}

@layer C{
  p{
    color:orange;
  }
  @layer D{
    p{
      color:green;
    }
  }
}

嵌套layer的规则:
每多一层 @layer,则样式的优先级就下降一层,内部的 @layer 的优先级由外部的 @layer 规则决定。
所以以上的优先级是这样的: C>D>A>B

上面layer A的嵌套也可以写成这样:

@layer A{
  p{
    color:red;
  }
}
@layer A.B{
  p{
    color:blue;
  }
}
上一篇下一篇

猜你喜欢

热点阅读