CSS【详解】样式选择器的优先级(含提升优先级的方法)

简介: CSS【详解】样式选择器的优先级(含提升优先级的方法)

数值越大,优先级越高,尽量保持较低的优先级,以便使用更高优先级的选择器重置样式

  • 0级——通配选择器、选择符和逻辑组合伪类。逻辑组合伪类有:not()、:is()和:where等,这些伪类本身并不影响CSS优先级,影响优先级的是括号里面的选择器。
:not() {}
  • 1级——标签选择器
  • 2级——类选择器、属性选择器和伪类
  • 3级——ID选择器
  • 4级——style内联
  • 5级——!important
.foo { color: #fff !important; }
  • !important是顶级优先级,可以重置JavaScript设置的样式,唯一推荐使用的场景就是使JavaScript设置无效。

继承的样式优先级最低。

写在后面的样式会覆盖写在前面的同类样式。

数值计算法

每一段CSS语句的选择器都可以对应一个具体的数值,数值越大优先级越高,

  • 一个0级选择器,优先级数值+0;
  • 一个1级选择器,优先级数值+1;
  • 一个2级选择器,优先级数值+10;
  • 一个3级选择器,优先级数值+100。

选择器

计算值

计算细则

* {}

0

1个0级通配选择器,优先级数值为0

dialog {}

1

1个1级标签选择器,优先级数值为1

ul > li {}

2

2个1级标签选择器,1个0级选择符,优先级数值为1+0+1

li > ol + ol {}

3

3个1级标签选择器,2个0级选择符,优先级数值为1+0+1+0+1

.foo {}

10

1个2级类名选择器,优先级数值为10

a:not([rel=nofollow]) {}

11

1个1级标签选择器,1个0级否定伪类,1个2级属性选择器,优先级数值为1+0+10

a:hover {}

11

1个1级标签选择器,1个2级伪类,优先级数值为1+10

ol li.foo {}

12

1个2级类名选择器,2个1级标签选择器,1个0级空格选择符,优先级数值为1+0+1+10

li.foo.bar {}

21

2个2级类名选择器,1个1级标签选择器,优先级数值为10×2+1

#foo {}

100

1个3级ID选择器,优先级数值为100

#foo .bar p {}

111

1个3级ID选择器,1个2级类名选择器,1个1级标签选择器,优先级数值为100+10+11

实战范例

<div class="lightblue">
    <div class="darkblue">
        <p>1. 颜色是?</p>
    </div>
</div>
<div class="darkblue">
    <div class="lightblue">
        <p>2. 颜色是?</p>
    </div>
</div>

当css如下时,1和2都是深蓝色,因为两个后代选择器优先级相同,深蓝色的样式在后,会覆盖之前的样式。

.lightblue p { color: lightblue; }
.darkblue p { color: darkblue; }

:not(.darkblue) p { color: lightblue; }
.darkblue p { color: darkblue; }

但当css如下时,1和2都是浅蓝色,因为.lightblue.lightblue p的优先级更高。

.lightblue.lightblue p { color: lightblue; }
.darkblue p { color: darkblue; }

提升优先级的方法

  1. 重复选择器自身(不了解的人可能以为是写错了)
.foo.foo {}
  1. 添加属性选择器【推荐】
.foo[class] {}
#foo[id] {}
  1. 使用!important【不推荐】
.foo { color: #fff !important; }

自测题

最终页面效果是?

答案

解析

    /* css 权重 101 */ /* 影响内容 100  200  300*/  
    #container p { color: blue; }
    /* css 权重 101 */ /* 影响内容 100  200 */  
    div #p1, div #p2 { color: red; }
    /* css 权重 111 */     /* 影响内容 100 */  
    #container p.yellow-text { color: yellow; font-weight: bold; }
    /* css 权重 12 */  /* 影响内容 200 */  
    div p.green-text { color: green; font-weight: bold; }
    /* css 权重 2 */  /* 影响内容 100  200  300*/ 
    div p { color: gray; }
  • 影响100的样式有
    /* css 权重 101 */ /* 影响内容 100  200  300*/  
    #container p { color: blue; }
    /* css 权重 101 */ /* 影响内容 100  200 */  
    div #p1, div #p2 { color: red; }
    /* css 权重 111 */     /* 影响内容 100 */  
    #container p.yellow-text { color: yellow; font-weight: bold; }
    /* css 权重 2 */  /* 影响内容 100  200  300*/ 
    div p { color: gray; }

最高权重为

    /* css 权重 111 */     /* 影响内容 100 */  
    #container p.yellow-text { color: yellow; font-weight: bold; }

所以 100 是黄色

  • 影响200的样式有
    /* css 权重 101 */ /* 影响内容 100  200  300*/  
    #container p { color: blue; }
    /* css 权重 101 */ /* 影响内容 100  200 */  
    div #p1, div #p2 { color: red; }
    /* css 权重 12 */  /* 影响内容 200 */  
    div p.green-text { color: green; font-weight: bold; }
    /* css 权重 2 */  /* 影响内容 100  200  300*/ 
    div p { color: gray; }

最高权重为

    /* css 权重 101 */ /* 影响内容 100  200  300*/  
    #container p { color: blue; }
    /* css 权重 101 */ /* 影响内容 100  200 */  
    div #p1, div #p2 { color: red; }

权重相同时,写在后面的样式会覆盖前面的,所以最终 200 的颜色是红色

  • 影响300的样式有
    /* css 权重 101 */ /* 影响内容 100  200  300*/  
    #container p { color: blue; }
    /* css 权重 2 */  /* 影响内容 100  200  300*/ 
    div p { color: gray; }
/* css 权重 101 */ /* 影响内容 100  200  300*/  
    #container p { color: blue; }
 

所以300的颜色是蓝色

目录
相关文章
|
3月前
|
前端开发
如何设置 CSS 盒子模型的边框样式?
CSS盒子模型的边框样式可以通过`border`属性设置,包括边框宽度、样式和颜色。例如:`border: 2px solid red;` 设置了2像素宽的红色实线边框。也可分别设置四边,如`border-top`、`border-right`等。
|
1月前
|
JavaScript 前端开发
jQuery和CSS3斑马线样式range滑块特效
jQuery和CSS3斑马线样式range滑块特效
|
2月前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
58 5
|
2月前
|
前端开发 JavaScript UED
|
2月前
|
缓存 监控 前端开发
CSS 提高性能的方法
【10月更文挑战第24天】在实际应用中,还需要根据具体项目的特点和需求,灵活选择和组合这些方法,不断进行优化和改进。同时,随着技术的不断发展,也需要持续关注新的性能优化技巧和最佳实践,以保持在性能优化方面的领先地位。你对 CSS 性能优化还有哪些深入的思考和经验呢?欢迎进一步交流和分享。
|
2月前
|
前端开发 JavaScript UED
深入理解与应用 CSS 伪类选择器
【10月更文挑战第23天】通过以上对 CSS 伪类选择器的深入探讨,我们可以更好地理解和应用它们,为网页设计和开发带来更丰富、更灵活的样式效果。同时,要注意在实际应用中根据具体情况合理选择和使用伪类选择器,以达到最佳的设计效果和用户体验。
63 2
|
2月前
|
前端开发
css页面顶部底部固定,中间自适应几种方法
【10月更文挑战第22天】css页面顶部底部固定,中间自适应几种方法
|
3月前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
363 1
|
2月前
|
前端开发
HTML 样式- CSS3
内部样式表适用于单个文件的特别样式,通过&lt;head&gt;部分的&lt;style&gt;标签定义;外部样式表适用于多个页面,通过&lt;link&gt;标签引用外部CSS文件;&lt;style&gt;定义样式,&lt;link&gt;引用资源;已弃用的标签有&lt;font&gt;、&lt;center&gt;、&lt;strike&gt;,属性有color和bgcolor。
HTML 样式- CSS2
HTML样式实例展示了如何使用`font-family`、`color`和`font-size`属性来定义字体样式,以及使用`text-align`属性来设置文本的对齐方式。示例包括标题和段落的样式设置。