层叠, 优先级和继承
层叠
基础
层叠
- css 规则发生冲突时;
- 如何解决冲突;
机制
- 样式表的来源;
- 选择器优先级;
- 源码顺序;
样式表的来源
样式表种类
- 浏览器默认 style sheet;
- 用户 style sheet;
- 第三方 style sheet;
- 第三方 style sheet 中的 !important 声明;
- 用户 style sheet 中的 !important 声明;
- 浏览器默认 style sheet 中的 !important 声明;
!important
- 无视特殊性和优先级;
- 强行将 !important 对应的样式;
- 设置为标签样式;
#winning {
background-color: red;
border: 1px solid black;
}
.better {
background-color: gray;
border: none !important;
}
优先级
选择器优先级
- Identifiers + Classes + Elements;
- Identifiers:ID 选择器;
- Classes:类选择器,属性选择器,伪类;
- Element:元素选择器,伪元素选择器;
- 越大优先级越高;
选择器 | Identifiers | Classes | Elements | 特殊性 |
---|---|---|---|---|
h1 | 0 | 0 | 1 | 001 |
p.class | 0 | 1 | 0 | 010 |
h1 + p[class] | 0 | 1 | 1 | 011 |
#id | 1 | 0 | 0 | 100 |
经验法则
经验法则
- 不要使用 id;
- 不要使用 !important;
继承
基础
继承
- 子标签继承父标签的属性;
可继承属性和不可继承属性
- 可继承属性:样式;
- font 相关;
- color 相关;
- text 相关;
- list 相关;
- 不可继承属性:布局,尺寸;
- 盒子模型相关;
- position 相关;
- float 相关;
- display 相关;
特殊值
inherit
- 表明子标签使用父标签对应样式
#sidebar h2 {
color: inherit;
}
initial
- 表明子标签使用浏览器默认值;
#sidebar h2 {
color: initial;
}
其他属性
- unset;
- revert;
- all;
简写属性
简写属性
- 同时给多个属性复制的属性;
font: italic bold 18px/1.2 "Helvetica", "Arial", sans-serif;
简写属性会默默覆盖其他样式
- 简写属性隐式设置省略值;
- 可能覆盖其他样式定义的值;
理解简写属性的顺序
- 简写属性尽量无视顺序;
- 上下左右;
- 1:全部;
- 2:上下,左右;
- 3:上,左右,下;
- 4:上,下,左,右;
- 水平竖直:水平,竖直;