CSS 选择器渲染优先级
一般情况下,CSS的优先顺序如下,这个大家应该都知道:
important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符 通配符 > 继承。
根据这个规律,可以先做下一下的题目:
#p1{color:red}
.p1{color:green}
p{color:blue}
<p id="p1" class="p1">TEST TEST TEST</p>
应该不难判断,文字的颜色是红色的,因为优先级最高。稍作修改
.d1 #p1{color:red}
#d1 .p1{color:green}
<div class="d1" id="d1">
<p id="p1" class="p1">asdfasdfasdfasd</p>
</div>
此时文字变成了绿色,是不是可以说#d1 .p1的优先级比高呢,其实还不能。换一下两组css的顺序,再看。发现颜色变红了,其实两组选择器的优先级是一样的,这种情况,写在后面的css会覆盖掉前面的定义,所以由于Css顺序的不同,呈现了不同颜色。
再回头看第一个例子,将三个样式调换顺序,如下:
.p1{color:green}
p{color:blue}
#p1{color:red}
发现第一个例子的文本颜色,还是红色,所以说优先级大的选择器,无论放在前后,都不会被优先级小的覆盖掉。
那么优先级到底怎么判断呢,如果说一个CSS组合很复杂,是不是有办法计算一个值,来衡量它的优先级呢?
比如:
.d1 .d2 #d3 .d4 .d5 .d6 .p1{color:green}
.d1 #d2 .d3 .d4 #d5 p{color:red}
如果没有计算方法,在不跑浏览器的情况下,很难确定谁的优先级比较高。当然这种多级的CSS写法很不推荐,存在效率问题。
W3C官方的确有推荐的优先级计算方法,也叫CSS权值计算方法。W3C把权值用一组数来衡量:(a,b,c,d)。
a:代表行内样式,它没有选择器,固定为1
b:代表选择器组合中,ID选择器的个数
c:代表选择器组合中,类选择器、属性选择器或伪类选择器的个数
d:元素或者伪元素选择器的个数
一些简单的例子:
* {} /* a=0 b=0 c=0 d=0 -> specificity = 0,0,0,0 */
li {} /* a=0 b=0 c=0 d=1 -> specificity = 0,0,0,1 */
li:first-line {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */
ul li {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */
ul ol+li {} /* a=0 b=0 c=0 d=3 -> specificity = 0,0,0,3 */
h1 + *[rel=up]{} /* a=0 b=0 c=1 d=1 -> specificity = 0,0,1,1 */
ul ol li.red {} /* a=0 b=0 c=1 d=3 -> specificity = 0,0,1,3 */
li.red.level {} /* a=0 b=0 c=2 d=1 -> specificity = 0,0,2,1 */
#x34y {} /* a=0 b=1 c=0 d=0 -> specificity = 0,1,0,0 */
style="" /* a=1 b=0 c=0 d=0 -> specificity = 1,0,0,0 */
通过这个计算方法,计算下例子中的选择器组合的权值:
第一组:0,1,6,0
第二组:0,2,3,1
虽然拿到了数据,但还是不知道怎么比较,231>160么。大多数情况下,可以这么判断,但是如果是(0,1,60,0)跟(0,2,3,1)呢,这时候就没法用1600 > 231 去判断。
前面说个,权值是一组数,不是一个数,所以(0,1,6,0) != 160。
判断的逻辑应该这样:
从左往右,如果同位上,值大的整个组合的权值就大,如果相同,再进行下一位比较。如果位数不够,在左边补0处理。数位之间没有进制,不会满10向前一位进1。
再看例子中,第二组中第二位2大于第一组中第二位的1,所以第二组的权值大于第一组。
那important的权值怎么算呢,W3C中算然没说,但一般情况下important的权值看成1,0,0,0,0。
有些人需要用一个数代表一个权值的办法来计算,比如
1. 内联样式: 1000
2. ID 选择器: 100
3. Class 类选择器: 10
4. 标签选择器: 1
这种算法很容易让人误以为是10进制数学运算,所以当同一个选择器有10个以上时,就不能用这种方法计算。比如ID选择器有11个,那他的权值是1100,但其实还是内联样式的优先级高,虽然内联样式的权值只有1000.
分享到:
相关推荐
CSS选择器的权重分为四类:内联样式、ID选择器、类选择器/属性选择器/伪类、以及元素选择器/伪元素。它们对应的权重分别是: 1. 内联样式(如`style="..."`):1000 2. ID选择器(如`#example`):100 3. 类选择器/...
高效的CSS选择器能够提高页面渲染速度,优化用户体验,特别是在处理大型或者复杂的页面结构时显得尤为重要。本篇文章将探讨如何使用CSS选择器来优化代码,使之适用于IE7+、Firefox 3、Opera 9以及Chrome等主流浏览器...
CSS选择器的优先级也是我们需要掌握的关键点: 1. **内联样式**:如`style="..."`,具有最高优先级。 2. **ID选择器**:优先级次之。 3. **类选择器、属性选择器、伪类**:优先级相同,低于ID选择器。 4. **类型...
CSS选择器是根据特定规则选中页面元素的方法,它们的种类繁多,不同的选择器类型具有不同的特性和用途,同时也伴随着性能上的差异。在本文中,我们将对CSS中的选择器种类进行总结,并对它们的效率进行比较。 首先,...
CSS选择器种类繁多,包括类型选择器、类选择器、ID选择器、属性选择器、伪类和伪元素等。层叠原则(Cascading)决定了当多个规则应用于同一元素时,哪个规则优先级更高。一般情况下,更具体的选择器优先级更高,ID...
四、CSS选择器和优先级 1. 选择器:CSS选择器用于选取要应用样式的元素,如类选择器、ID选择器、标签选择器、伪类等。 2. 优先级:理解CSS的优先级规则至关重要,ID选择器优先级最高,接着是类选择器、属性选择器...
理解选择器的优先级对于编写高效且无冲突的CSS至关重要。 2. 属性与值:CSS由属性和相应的值组成,如color,font-size,margin等。学习如何正确设置这些属性,可以实现丰富的视觉效果。 3. 嵌套与继承:CSS允许...
CSS选择器是用于选取HTML元素的工具,常见的选择器包括: - 类选择器:使用"."前缀,如`.myClass`。 - ID选择器:使用"#"前缀,如`#myID`。 - 标签选择器:直接使用元素名,如`p`代表所有段落元素。 - 属性选择器:...
在本篇文章中,我们将了解一些常见的CSS面试题知识点,包括CSS3中的box-shadow问题、完成左中右布局、使用CSS画一个扇形、CSS选择器优先级、flex布局的常用API等。 一、CSS3中的box-shadow问题 在CSS3中,box-...
CSS 优先级算法用于计算选择器的优先级,可以总结为: * 选中且设置 !important 的 > 权重高的 > 权重相同位置靠后的 > 来自继承的 * 一个选择器的优先级可以由四部分计算得分: + 千位:如果声明在 style 的属性...
编写高效的CSS选择器对于页面性能至关重要,尤其是在处理大量DOM元素的大型网站中。以下是一些关于如何编写高效CSS选择器的指导原则和注意事项: 1. **选择器优先级与效率**: - **ID选择器 (#id)**:拥有最高的...
优先级是根据CSS选择器的类型和结构来计算的,并非一个简单的数值比较。具体来说,浏览器根据以下几种类型的选择器来计算CSS规则的优先级: 1. **通用选择器** (`*`):具有最低的优先级。 2. **元素(类型)选择器*...
4. 相同类型CSS选择器,不同CSS引入方式的优先级:位置在后的优先级高于位置在前的 5. 使用!important类型样式具有最高优先级 六、CSS继承 1. 字体系列属性可继承:font、font-size、font-family、font-style、...
- **选择器性能**: 避免使用复杂选择器,如后代选择器,以提高渲染效率。 7. **浏览器兼容性**: - 理解各主流浏览器对CSS特性的支持情况,使用前缀(-webkit-, -moz-, -ms-)来解决兼容问题。 - 使用 ...
1. **CSS选择器效率**:不同的选择器有不同的计算复杂度,如ID选择器(#id)最快,类选择器(.class)次之,标签选择器(*)最慢。合理使用选择器可以提高页面渲染速度。 2. **CSS合并与压缩**:将多个CSS文件合并为一个...
### 一、CSS选择器的优先级 CSS的选择器具有不同的优先级,这直接影响到样式的覆盖和继承。在给定的部分内容中,可以看到`!important`的使用,这通常用来提高某个CSS规则的优先级,使其能够覆盖其他规则。然而,...
1. **选择器的深度和优先级**:书中详细讲解了如何正确理解和使用选择器,包括类选择器、ID选择器、元素选择器以及伪类和伪元素的区别。此外,还介绍了权重计算和优先级的概念,帮助开发者更好地控制样式应用。 2. ...
- 选择器优先级:理解ID选择器、类选择器、属性选择器和标签选择器的优先级,以及内联样式、内部样式表和外部样式表的影响。 - 继承与覆盖:了解哪些CSS属性可以被继承,哪些不能,以及如何使用`!important`强制...
通过调整CSS选择器的优先级,可以避免这种情况发生。 ```css /* 提高优先级 */ #some-element { color: red !important; } ``` ##### 2.4 使用CSS预处理器 如Sass、Less等,它们提供了更高级的CSS编写方式,可以...