之前问题没有描述清楚。
我的意思是如果权重相同该得到哪个样式?
这里的意思是多一个元素+1,一个元素是10,加权数越高越优先。
这里没有对id进行区分,按照他这个说法id的加权数应该高于class,但是这么算又乱了。。。。
总之大体的概念就是,选择的越细优先级越高,层级越多优先级越高,id高于class,实在搞不明白测一下就好了,不需要死记硬背
看到 ID 加 100
看到 Class 加 10
看到 TagName 加 1
权重就这么出来的,对了,看到 !important 加 1000
权重可不是这么加的啊。
比如,div.box1.box2....box101>div#box
你说,对于#box而言,.box1.box2....box101样式优先级大呢,还是#box优先级大。
样式优先级应当遵循就近原则。当然!important的权重是最大的。
作用在同一元素上,不同的css选择器,id优先级>class选择器>标签选择器
。
还有其他的属性选择器之类的,楼主可以测试下。
如果是样式继承的话,优先级遵循就近原则。
ps:有一个比较奇怪的事情,就是类名个数超过256个,就能覆盖掉id选择器(针对的同一元素,不是100个哦)。
权重一样,哪个排在后面就用哪个样式,叠层样式表就是这样意思,后面的会把前面的叠盖,前提是后面的权重大于前面的,或者权重一样!html
<div id="wrap">
<div id="first">
<div id="par">
<div class="hh">test</div>
</div>
</div>
</div>
css
#wrap #par .hh{
border:1px solid gery;
width:80px;
}
#par .hh{
width:120px;
}
#first #par .hh{
width:100px;
border:1px solid green;
}
#first .hh{
width:140px;
}
#wrap #par .hh
跟#first #par .hh
权重一样,但由于#first #par .hh
在后面,所以最后取的是#first #par .hh
这条样式。
5 回答1.1k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
4 回答1.8k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
反对@nightire简单实用的答案,哈哈哈。
css层叠的时候考虑3点:继承,特殊性和来源。这里只看特殊性:
内联样式:1,0,0,0
id选择器:0,1,0,0
class选择器,属性选择器,伪类:0,0,1,0
元素选择器,伪元素:0,0,0,1
通配选择器:0,0,0,0
继承值:无特殊性
计算时特殊性就是简单的把各位上的数字相加,然后从第一位开始比较。只有前一位比较不出时才会比较下一位,换言之,0,1,0,0特殊性高于0,0,10,100。
通配选择器(*)的0,0,0,0特殊性高于无特殊性的继承值。
!important其实和特殊性无关,它属于重要声明。css层叠时,所有的重要声明和非重要声明会分开进行层叠。如果重要声明和非重要声明冲突,会应用重要声明的样式。
最后,回答题主的问题,如果两个规则的来源,特殊性完全相同,会应用后出现的规则。