/*by 司徒正美 All rights reserve*/ * {} /* a=0 b=0 c=0 d=0 -> specificity = 0,0,0,0 */ /* 通配符选择器权重为0,在IE中,它无法区分元素节点与注释节点 */ li {} /* a=0 b=0 c=0 d=1 -> specificity = 0,0,0,1 */ /* 标签选择器为1 */ li:first-line {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */ /* 标签选择器与伪元素为1 */ 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 */ /* 这个相邻选择器由标签选择器与属性选择器组成,属性选择器为10 */ ul ol li.red {} /* a=0 b=0 c=1 d=3 -> specificity = 0,0,1,3 */ /*无视后代选择器,3个标签与1个类选择器,类(className)在DOM中的位置比较显赫, 拥有专门的getElementByClassName,等级为c,合计得分13 */ li.red.level {} /* a=0 b=0 c=2 d=1 -> specificity = 0,0,2,1 */ /*两个类选择器与一个标签选择器,合计得分21 */ #x34y {} /* a=0 b=1 c=0 d=0 -> specificity = 0,1,0,0 */ /*getElementById,在页面上获得元素最快的方式,权重为b,得分100 */ style="" /* a=1 b=0 c=0 d=0 -> specificity = 1,0,0,0 */ /*行内样式,得分1000,会覆盖内部样式或外部样式的设置*/
选择器 | 表达式或示例 | 说明 | 权重 |
---|---|---|---|
ID选择器 | #aaa | 100 | |
类选择器 | .aaa | 10 | |
标签选择器 | h1 | 元素的tagName | 1 |
属性选择器 | [title] | 10 | |
相邻选择器 | selecter + selecter | 拆分为两个选择器再计算 | |
兄长选择器 | selecter ~ selecter | 拆分为两个选择器再计算 | |
亲子选择器 | selecter > selecter | 拆分为两个选择器再计算 | |
后代选择器 | selecter selecter | 拆分为两个选择器再计算 | |
通配符选择器 | * | 0 | |
各种伪类选择器 | 如:link, :visited, :hover, :active, :target, :root, :not等 | 10 | |
各种伪元素 | 如::first-letter,::first-line,::after,::before,::selection | 1 |