Day07【CSS】特异性 Specificity(样式权重)

「特异性」是让浏览器计算
哪个 CSS 属性值
与某个 HTML element 最有关系,
然後套用该属性。

比方说,如果 CSS 同时在两处
定义了同一个 HTML element 的 color
则会依照撰写时的特异性(权重分数)
来决定该 HTML element 要套用哪个 color

CSS 特异性(样式权重)排序

  1. !important
  2. 行内样式(inline style)
  3. id 选择器(id selector)
  4. class / attributes / 伪类选择器(class / attribute / pseudo-class selector)
  5. 元素 / 伪元素选择器(type selector / pseudo-element selector)
  6. *,全体选择器(universal selector)

计算特异性的规则如下

  • 等级 A:「id」选择器的个数加总
  • 等级 B:「class、attributes、伪类」选择器个数加总
  • 等级 C:「元素、伪元素」选择器个数加总
  • *,全体选择器不计分
  • 等级只能同级比较,低等级无法叠加来超越更高的等级
  • inline style 永远会覆写 stylesheets 中的样式
  • !important 拥有最高优先权,规则如下:
    • !important 在样式中出现时,浏览器会直接套用,不计算特异性
    • 如果同时有两个 !important,会进行选择器的特异性计算
    • 如果两个 !important 特异性相同,则後面声明的样式会覆盖前面的样式
    • 一个样式只能使用一个 !important ,叠加没有效果

如下的第二个 !important 是没有意义的

 color:blue !important !important;

特异性计算范例

*               /* A=0 B=0 C=0 -> 特异性分数 = 0-0-0 */
LI              /* A=0 B=0 C=1 -> 特异性分数 = 0-0-1 */
UL LI           /* A=0 B=0 C=2 -> 特异性分数 = 0-0-2 */
UL OL+LI        /* A=0 B=0 C=3 -> 特异性分数 = 0-0-3 */
H1 + *[REL=up]  /* A=0 B=1 C=1 -> 特异性分数 = 0-1-1 */
UL OL LI.red    /* A=0 B=1 C=3 -> 特异性分数 = 0-1-3 */
LI.red.level    /* A=0 B=2 C=1 -> 特异性分数 = 0-2-1 */
#x34y           /* A=1 B=0 C=0 -> 特异性分数 = 1-0-0 */
#s12:not(FOO)   /* A=1 B=0 C=1 -> 特异性分数 = 1-0-1 */

参考资料:


<<:  08 - Metrics - 观察系统的健康指标 (2/6) - 使用 Metricbeat 掌握 Elastic Stack 的健康状态

>>:  [Day8] 注册API – migrate

利用Redlock演算法实现自己的分布式锁

前言 我之前有写透过 lock or CAS 来防治,Racing condition 问题,但如果...

DAY 24 『 客制化文字输入框 Custom TextField 』

昨天介绍完客制化按钮,今天会分享客制化文字输入框( 加入图示、图示显示在左边或右边 ) 成品: 刻好...

[2021铁人赛 Day13] General Skills 10

引言 今天会讲两题,因为第二题是我们讲过的,就当作复习吧! 第一题继续延伸进位制,第二题是已经出现...

Day19 该如何发问问题?

大家好,我是乌木白,今天想和大家聊聊,如果在该如何去发问问题? 遇到问题该怎麽办? 在现今网路发达...

Day 1:前言

程序语言的种类成千上万,决定好要学哪个了吗? 在FB程序语言社团里,几乎每天都会有人提问:「我该从...