(1)选择器
1.ID选择器
2.Class选择器
3.标签选择器
4.相邻选择器(h1+p)
5.子元素选择器(h1>p)
6.后代选择器(.class ol li a)
7.通配选择器(*)
8.属性选择器(a[rel = ’external’],例如:为带有title属性的所有元素设置样式)
9.伪类选择器
1)例如:链接不同活动状态
a:link 活动
a:visited 已访问
a:hover 鼠标移动至链接
a: focus 键盘移动至链接
a: active 选定链接
2)(a:hover,li:nth--child(n))规定属于其父元素的第n个子元素的每个li
可继承的属性:font-size, font-family, color
不可继承的样式:border, padding, margin, width, height
(2)优先级
(!Important>id>class>标签名)!important比内联优先级高,内联优先级比id优先级高
1. !important声明的样式优先级最高,如果冲突再进行计算。
2. 如果优先级相同,则选择最后出现的样式。
3. 继承得到的样式的优先级最低。
(3)怎么确定权重
权重记忆口诀。从0开始,一个行内样式+1000,一个id+100,一个属性选择器/class或者伪类+10,一个元素名,或者伪元素+1.比如
(4)选择器匹配规则
浏览器读取你的选择器,遵循的原则是从选择器的右边到左边读取。换句话说,浏览器读取选择器的顺序是由右到左进行
· 避免普遍规则
· 不要在ID选择器前加标签名或类名
· 不要在类名选择器前加标签名
· 尽可能使用具体的类别
· 避免使用后代选择器
· 标签分类规则中不应该包含一个子选择器
· 子选择器的问题
· 借助相关继承关系
· 使用范围内的样式表
浏览器是怎样解析CSS选择器的?
CSS选择器的解析是从右向左解析的。若从左向右的匹配,发现不符合规则,需要进行回溯,会损失很多性能。
若从右向左匹配,先找到所有的最右节点,对于每一个节点,向上寻找其父节点直到找到根元素或满足条件的
匹配规则,则结束这个分支的遍历。两种匹配规则的性能差别很大,是因为从右向左的匹配在第一步就筛选掉
了大量的不符合条件的最右节点(叶子节点),而从左向右的匹配规则的性能都浪费在了失败的查找上面。
而在 CSS 解析完毕后,需要将解析的结果与 DOM Tree 的内容一起进行分析建立一棵 Render Tree,最终
用来进行绘图。在建立 Render Tree 时(WebKit 中的「Attachment」过程),浏览器就要为每个 DOM Tree
中的元素根据 CSS 的解析结果(Style Rules)来确定生成怎样的 Render Tree。