button#backButton {…} /* This is an ID-categorized rule */
#urlBar[type="search"] {…} /* This is an ID-categorized rule */
table > tr > td#myCell:active {…} /*This is an ID-categorized rule*/
Class规则
如果一个规则将一个 class 作为它的关键选择器,那么它就属于该类别.
button.settingButton {…} /* A class-based rule */
.fancyText {…} /* A class-based rule */
ul > .menu-left[checked="true"] {…} /* A class-based rule */
标签规则
如果既没有 class 也没有 ID 来作为关键选择器,那么接下来的候选者就是 标签 类别.如果一条规则将一个标签作为它的关键选择器,那么这条规则就属于该类别.
table {…} /* A tag-based rule */
ul > li {…} /* A tag-based rule */
input[type="checkbox"] {…} /* A tag-based rule */
通用规则
不属于上面那些类别的规则都属于这个类别
[hidden="true"] {…} /* A universal rule */
* {…} /* A universal rule */
ul > [title="hehe"] {…} /* A universal rule */
书写高效的CSS
浏览器样式匹配规则
关键选择器
选择器的最后面的部分即为关键选择器(即用来匹配目标元素的那部分,而不是该元素的父辈元素)
拆分样式
为了提高样式匹配效率,浏览器根据关键选择器将样式拆分为四种类型,放置到4张不同的哈希表里:
ID规则
这一类别包含了那些将 ID 选择器作为关键选择器的规则
Class规则
如果一个规则将一个 class 作为它的关键选择器,那么它就属于该类别.
标签规则
如果既没有 class 也没有 ID 来作为关键选择器,那么接下来的候选者就是 标签 类别.如果一条规则将一个标签作为它的关键选择器,那么这条规则就属于该类别.
通用规则
不属于上面那些类别的规则都属于这个类别
从右向左
浏览器读取你的选择器, 遵循的原则是从选择器的右边到左边读取. 先从关键选择器开始匹配规则, 然后左移, 匹配祖先, 成功, 持续左移, 直到和规则匹配, 或者是因为不匹配而放弃。 所以,对于一个给定的元素, 需要匹配的规则越少, 样式的解析就会越快.
高效CSS指南
如何测试 ?
Chrome30(不包含30)以下的版本包含有CSS selector profile可以对选择器进行性能测试
CSS样式分析
analyze-css
参考资料:
书写高效的CSS