层叠规则

  1. CSSCascading Style Sheets 的缩写,这暗示层叠(cascade)的概念是很重要的;

  2. 在最基本的层面上,它表明 CSS 规则的顺序很重要,但它比那更复杂;

  3. 什么 选择器 在层叠中胜出 取决于 三个因素(这些都是按重量级顺序排列的,前面的一种会否决后一种):

    • 重要性(Importance
    • 专用性(Specificity
    • 源代码次序(Source order

重要性

  1. CSS 中,有一个特别的语法可以让一条规则总是优先于其他规则 !important

  2. 建议要使用它,除非必须使用它;不得不使用它的一种情况是,当你在修改某个组件样式时,不能编辑该组件核心的 CSS 模块,又或者确实想要重写一种不能以其他方式覆盖的样式;

  3. 但如果能避免的话,不要使用它由于 !important 改变了层叠正常工作的方式,因此调试 CSS 问题,尤其是在大型样式表中,会变得非常困难;

专用性

  1. 专用性基本上是衡量选择器的具体程度的一种方法,主要是指它能匹配多少元素;

    • 元素选择器 具有很低的专用性;
    • 类选择器 具有更高的专用性,所以将战胜元素选择器;
    • ID 选择器 有甚至更高的专用性, 所以将战胜类选择器,战胜 ID 选择器 的方法则是 style 中的样式或者 !important
  2. 一个选择器具有的专用性的量可以用四种不同的值(或组件)来衡量的,它们可以被认为是 千位百位十位个位 ,在四个列中的四个简单数字:

    • 千位:如果声明是在 style 属性中该列加 1 分(这样的声明没有选择器,所以它们的专用性总是 1000)否则为 0
    • 百位:在整个选择器中每包含一个 ID 选择器 就在该列中加 1 分;
    • 十位:在整个选择器中每包含一个 类选择器属性选择器或者伪类 就在该列中加 1 分;
    • 个位:在整个选择器中每包含一个 元素选择器伪元素 就在该列中加 1 分;
  3. 注:通用选择器 (*)、复合选择器(+、>、~、空格)和否定伪类(:not)在专用性中无影响;

  4. 举个例子:

    选择器 千位 百位 十位 个位 合计值
    h1 0 0 0 1 0001
    #indentifier 0 1 0 0 0100
    h1 + p::first-letter 0 0 0 3 0003
    li > a[href*=”zh-CN“] > .inline-warning 0 0 2 2 0022
    没有选择器,规则在一个元素的 style 属性里 1 0 0 0 1000

源代码次序

  1. 如果多个相互竞争的选择器具有相同的重要性和专用性,那么第三个因素将帮助决定哪一个规则获胜,也就是说,选择哪一个选择器取决于源码顺序,例如:

    p {
        color: red;
    }
    
    p {
        color: blue;
    }
    
  2. 不过有一点需要注意的是,当多个 CSS 规则匹配相同的元素时,它们都被应用到该元素中;只不过后面因为层叠规则被层叠掉了而已;

继承规则

什么是继承

  1. 所谓继承,就是应用于某个元素的一些属性值将由该元素的子元素继承,而有些则不会;

  2. CSS 为处理继承提供了四种特殊的通用属性值:

    • inherit:继承父元素的值;
    • initial:使用浏览器的默认值;如果浏览器默认样式表中没有设置值,那么该属性值就被设置为 inherit ,不被 IE 支持;
    • unset:属性的值继承 inherit ,若 inherit 没有继承到值则继承 initial ,不被 IE 支持。
    • revert:属性值被设置成自定义样式所定义的属性(如果被设置), 否则属性值被设置成用户代理的默认样式;

继承的就近原则

  1. 由于属性值是由继承而来,所以属性值会继承离自己近的那个元素的属性,例如:

    html
    css
    <div class="one">
      <div class="two">
        <p>Lorem ipsum dolor sit amet.</p>
      </div>
    </div>
    
    .two {
      color: blue;
    }
    
    .one {
      color: red;
    }
    
  2. 在上面的示例中 twoone 更加接近 p ,所以最终采用的是 twocolor 值,段落呈现蓝色;

面试题

请简述 CSS 中的层叠规则

CSS 中当属性值发生冲突时,通过层叠规则来计算出最终的属性值,层叠规则可以分为 3 块:

  1. 重要性(Importance):!important 设置该条属性值最重要,但是一般不推荐使用;
  2. 专用性(Specificity):专用性主要是指它能匹配多少元素,匹配得越少专用性越高;
  3. 源代码次序(Source order):在重要性和专用性都一致的情况下,属性值取决于源代码的先后顺序;
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于产品、设计、开发的问题和看法,还有技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程

了解更多

目录

  1. 1. 层叠规则
    1. 1.1. 重要性
    2. 1.2. 专用性
    3. 1.3. 源代码次序
  2. 2. 继承规则
    1. 2.1. 什么是继承
    2. 2.2. 继承的就近原则
  3. 3. 面试题
    1. 3.1. 请简述 CSS 中的层叠规则