当前位置: 首页 > 面试题库 >

说说CSS的优先级是如何计算的?

隗翰海
2023-03-14
本文向大家介绍说说CSS的优先级是如何计算的?相关面试题,主要包含被问及说说CSS的优先级是如何计算的?时的应答技巧和注意事项,需要的朋友参考一下

发现之前已经思考了这个问题,今天刚好回顾复习一下。
原文链接:https://xiangshuo.blog.csdn.net/article/details/52749250

以下是回答:

选择器种类

严格来讲,选择器的种类可以分为三种:标签名选择器、类选择器和ID选择器。而所谓的后代选择器和群组选择器只不过是对前三种选择器的扩展应用。而 在标签内写入 style="" 的方式,应该是CSS的一种引入方式,而不是选择器,因为根本就没有用到选择器。而一般人们将上面这几种方式结合在一起,所 以就有了5种或6种选择器了。

三种基本的选择器类型
语法如下:
◆标签名选择器,如:p{},即直接使用HTML标签作为选择器。
◆类选择器,如.polaris{}
◆ID选择器,如#polaris{}

伪类,属性选择器特指度等同于类
伪元素特指度等同于标签名选择器

扩展选择器
◆后代选择器,如 .polaris span img{},后代选贼器实际上是使用多个选择器加上中间的空格来找到具体的要控制标签。
◆群组选择器,如 div,span,img{},群组选择器实际上是对CSS的一种简化写法,只不过把有相同定义的不同选择器放在一起,省了很多代码。

特指度-优先级计算

我们需要引入一个概念——特指度(specificity)。特指度表示一个css选择器表达式的重要程度,可以通过一个公式来计算出一个数值,数越大,越重要。
这个计算叫做“I-C-E”计算公式,

I——Id;
C——Class;
E——Element;

即,针对一个css选择器表达式,遇到一个id就往特指度数值中加100,遇到一个class就往特指度数值中加10,遇到一个element就往特指度数值中加1。

下面举几个css表达式的特指度计算结果,大家也自己算一算,是不是对的:

还有一个重点要注意:!important 优先级最高,高于上面一切。* 选择器最低,低于一切。

后代选择器的定位原则

在这里介绍一下对于后代选择器,浏览器是如何查找元素的呢?

浏览器CSS匹配不是从左到右进行查找,而是从右到左进行查找。比如div#divBox p span.red{color:red;},浏览器的查找顺序如下:先查找html中所有 class='red'span 元素,找到后,再查找其父辈元素中是否有 p 元素,再判断 p 的父元素中是否有 iddivBoxdiv 元素,如果都存在则匹配上。
浏览器从右到左进行查找的好处是为了尽早过滤掉一些无关的样式规则和元素。

简洁、高效的CSS

所谓高效的CSS就是让浏览器在查找style匹配的元素的时候尽量进行少的查找,下面列出一些我们常见的写CSS犯一些低效错误:

◆不要在ID选择器前使用标签名
一般写法:div#divBox
更好写法:#divBox
解释: 因为ID选择器是唯一的,加上 div 反而增加不必要的匹配。

◆不要再class选择器前使用标签名
一般写法:span.red
更好写法:.red
解释:同第一条,但如果你定义了多个.red,而且在不同的元素下是样式不一样,则不能去掉,比如你css文件中定义如下:

p.red{color:red;}  
span.red{color:#ff00ff} 

如果是这样定义的就不要去掉,去掉后就会混淆,不过建议最好不要这样写。

◆尽量少使用层级关系
一般写法:#divBox p .red{color:red;}
更好写法:.red{..}

◆使用class代替层级关系
一般写法:#divBox ul li a{display:block;}
更好写法:.block{display:block;}

参考文章:
1.http://www.cnblogs.com/wangfupeng1988/p/4285251.html
2.http://www.cnblogs.com/iloveyoucc/archive/2012/09/06/2673003.html

 类似资料:
  • 本文向大家介绍说说线程优先级?相关面试题,主要包含被问及说说线程优先级?时的应答技巧和注意事项,需要的朋友参考一下 理论上来说系统会根据优先级来决定首先使哪个线程进入运行状态。当 CPU 比较闲的时候,设置线程优先级几乎不会有任何作用,而且很多操作系统压根不会不会理会你设置的线程优先级,所以不要让业务过度依赖于线程的优先级。 另外,线程优先级具有继承特性比如 A 线程启动 B 线程,则 B 线程的

  • 问题内容: 我的网页包含: 引用的样式表包含: 我在ID中有一张表格,希望单元格有一些填充。但是,引用的样式表优先于内联样式。我可以通过Firebug直观地看到这一点。如果我关闭Firebug中的指令,则向左填充将生效。 我该如何上班? 问题答案: 正如其他人提到的那样,您有一个特异性问题。当确定两个规则中的哪一个优先时,CSS引擎会计算每个选择器中的s 数量。如果一个比另一个多,就使用它。否则,

  • 本文向大家介绍说说你对移动优先布局的理解相关面试题,主要包含被问及说说你对移动优先布局的理解时的应答技巧和注意事项,需要的朋友参考一下 移动优先布局,应该是基于这样一个前提: 如今web页面的移动端用户量(访问量)要远远大于pc端等设备 所以是优先服务于移动端的 那么采用移动优先布局的策略才能最大化页面的使用 移动优先布局即首先针对移动端设备设计页面的布局方式 然后在这个基础上逐渐向平板、电脑等宽

  • 问题内容: CSS问题:如果两个不同的选择器应用于一个元素,谁会赢? 我知道这不应该发生,但是我想调整旧应用程序,而CSS居于中间。 问题答案: 规范中的实际上是合理可读的。综上所述: 规则和内联规则获胜。 否则,通常会赢得更具体的胜利。是比更加具体的选择器。 如果规则同样具体,则以最后宣布的为准。 没有特别的理由说明为什么这种“不应该发生”。通常先指定一个广泛适用的规则,然后添加一个更具体的规则

  • 由于前面章节所述的CSS继承特性以及多种类型的选择器作用域范围会出现重叠,所以常会有多个CSS规则作用于同一个HTML元素。比如对于下面的HTML代码: <p class="message" id="introduction"> wenjiangs is a leading search engine on free HTML tutorials. </p> 我们分别使用标签(tag)、类(c

  • 正则表达式与数学表达式的不同在于,数学表达式执行数学运算,而正则表达式执行字符运算;相同的是,它们都按一定的优先级进行运算 运算符 操作 \ 转义符 () 捕获、匹配、断言 [] 字符类 *+? 限定符 {} 范围 ^$ 位置和顺序 | 或