Skip to content

二、CSS 层叠性

TIP

  • 层叠是 CSS 的一个基本特征,它是一个定义了如何合并来自多个源(css 规则)的属性值的算法。

  • 它在 CSS 处于核心地位,CSS 的全称层叠样式表正是强调了这一点。

我们来看下面这个例子

有两个 css 规则同时作用于同一个 div 标签,那最后之两个 css 规则中的属性值是如何合并计算的,以谁为主呢?这就需要一套明确的规则来规定,这套规则就是指CSS 层叠性。

<style>
  /* css规则1 */
  .box {
    color: red;
    font-size: 30px;
  }
  /* css规则2 */
  div {
    color: blue;
  }
</style>
<body>
  <div class="box">艾编程</div>
</body>

渲染效果: ![[Pasted image 20260226171030.png]]

1、CSS 层叠性解读

TIP

  • 所谓的层叠性是指多个 CSS 规则可以同时作用于同一个标签,效果 叠加,并不完全 覆盖。

  • CSS 的层叠性有两层含义:叠加 和 覆盖

  • 不同选择器作用同一元素,不同属性会叠加,相同属性会 覆盖 。

  • 在 覆盖 时需要遵循以下两大原则:“就近原则” 和 “优先级”

2、CSS 的叠加原理

TIP

不同选择器作用于同一元素,不同属性会叠加作用于元素。

<style>
  /*
  以下三个选择器中的样式属性都不一样,则会叠加
  最后div效果:
  背景颜色:黄色
  字体大小:20像素
  字体颜色:红色
  */
  div {
    background: yellow;
  }
  div {
    font-size: 20px;
  }
  .box {
    color: red;
  }
</style>
<body>
  <div class="box">文本内容</div>
</body>

渲染效果: ![[Pasted image 20260226171142.png]]

3、CSS 的覆盖原则

在 覆盖 时需要遵循以下两大原则:“就近原则” 和 “优先级”

就近原则

  • 当两个或多个 优先级相同 的选择器作用到同一个元素时。如果出现相同的 CSS 属性,则以写在后面的选择器中的属性为主。

  • 所谓的就近原则是指,离 html 元素最近的那个为主。本质和选择器谁写在后面以谁为主是一个意思。

/*
以下两个选择器的优先级一样,
则相同属性会覆盖,覆盖时,以写在后面的为主
不同属性会叠加。
*/

div {
  /* background属性会叠加 */
  background: yellow;
  /* 无效 */
  color: blue;
}

div {
  /* font-size属性会叠加 */
  font-size: 20px;
  /* 选择器优先级一样,以后面为主,则此属性生效 */
  color: red;
}

/* 最终的css实际效果 */
div{
  background:yellow;
  font-size:20px;
  color:red;
}

优先级

当两条或多条规则(选择器)作用到同一个元素,如果出现相同的属性,则以优先级高的选择器中的属性值为主。

<style>
  /*
  基础选择器优先级从高到低分别是: id选择器 >class选择器 >标签选择器
  id优先级最高,则最后以id中的color:red为最终显示效果
  */
  #box {
    /* 生效 */
    color: red;
  }
  .box {
    /* 不生效 */
    color: blue;
  }
  div {
    /* 不生效 */
    color: green;
  }
</style>
<body>
  <div class="box" id="box">div中内容</div>
</body>

渲染效果: ![[Pasted image 20260226171321.png]]

4、层叠性的冲突处理

TIP

  • 不同 css 规则集同时作用于同一个标签,不同属性相互叠加,相同属性会覆盖。

  • 相同属性覆盖,首先需要计算选择器的权重,最后以选择器权重高的为主。

  • 如果选择器权重相同,则写在后面的会覆盖写在前面的。

  • 如果想要实现的效果,因为选择器因为权重低而不生效,则通过提高选择器权重来达到效果。

<style>
  /* id权重最高,样式全部应用 */
  #box {
    width: 200px;
  }
  /*
        .box与.box2权重一样,相同属性叠加,不同属性,以写在后面的为主
        最后生效样式:
        color:orange; background:skyblue; font-size:30px
    */
  .box {
    color: blue;
    background-color: skyblue;
  }
  .box2 {
    color: orange;
  }
  /*
        div权重低于.box和.box2,相同属性叠加,不同属性,以权重高的为主
        则color不生效,border属性生效
    */
  div {
    color: green;
    font-size: 30px;
  }
  /*
        计算后最终生效样式
        width:200px;
        color:orange;
        background-color:skyblue;
        font-size:30px;
    */
</style>
<body>
  <div class="box2 box" id="box">文本内容</div>
</body>

渲染效果: ![[Pasted image 20260226171442.png]]