time: 2018.11.16
以往只知道 css 选择器权重的基本规则,每当需要覆盖的时候都是设置的 !important
,感觉不能一直这么写,在加入伪元素和后代选择器的时候,就不知道谁的优先级最高了。所以有必要深入学习一下 css 选择器的权重知识
目录:
1 选择器类型
2 权重分配
2.1 权重分配规则
2.2 权重比较规则
2.3 实例
3 伪类和伪元素
常用
不常用
css3 新增伪类选择器
基本规则:行内样式 > 页内样式 > 外部引用样式 > 浏览器默认样式, ID > class > 元素
十进制
!important 优先级最高
1,0,0,0 > 0,99,99,99
从左往右,等级逐渐降低a{color: yellow;} /*元素:0,0,0,1*/
div a{color: green;} /*元素:0,0,0,2*/
.demo a{color: black;} /*类 + 元素:0,0,1,1*/
.demo input[type="text"]{color: blue;} /*类 + 元素+ 属性:0,0,2,1*/
.demo *[type="text"]{color: grey;} /*类 + 通配 + 属性:0,0,2,0*/
#demo a{color: orange;} /*id + 元素:0,1,0,1*/
div#demo a{color: red;} /*元素 + id + 元素:0,1,0,2*/
伪类: :hover
, :first-of-type
伪元素: ::before/:before
, ::after/:after
2者如何区分呢?
::
来表示伪元素匹配处于特定状态的一个或多个元素。元素可能有的状态:初始化、鼠标悬浮、聚焦、禁用、选中、访问过等等,但是不是所有元素都有这些状态
最近遇到一个问题,要在邮件中实现 tab 切换,但是邮件中不能使用 javascript ,那么就考虑到了只用 css 来实现,就需要考虑到元素的状态有哪些已经支持了,这里来总结一下
:hover
:checked
,仅限于 radio, checkbox, select