本文推荐 PC 端阅读~
本文版权归 “公众号 | 前端一万小时” 全部,未经受权,请勿转载!
复制代码
css_03
复制代码
1. 选择器的优先级是如何计算的?
2. 什么是 CSS 继承?哪些属性能继承,哪些不能?
复制代码
前言: 在上一篇《CSS 选择器详解》中,咱们文章一开始就谈到了“结构树”,也明白了以后的种种“选择器”都是创建在有这个“结构树”的基础之上。这篇,咱们将详细阐述“结构树”之于“继承”、“层叠”等的重要性。
① 继承:继承是指在结构树中,从一个元素向其后代元素传递属性值所采用的机制;
② 层叠:层叠是一个“过程”,是浏览器“考虑”的“过程”——浏览器在肯定应当向一个元素应用哪些值时,浏览器不只要考虑“继承”,还要考虑“声明的特殊性”,另外还须要考虑“声明自己的来源”。css
“特殊性/特定性”对于理解如何向文档应用声明很重要。
若是一个规则能“更准确”地选择一个元素,那么这个规则就更为“特定/特殊”!
能够经过计算的方法来获得这个“特定性”,值越大,特定性越强:前端
例如:面试
h1 {
color: red;
background: yellow;
} /*specificity=0001*/
p,div {
font-family: sans-serif;
} /*specificity=0002*/
#txa {
width: 300px;
height: 200px;
margin-left: -12px;
} /*specificity=0100*/
.done {
text-decoration: line-through;
} /*specificity=0010*/
li[class] {
color: red;
background:yellow;
} /*specificity=0011*/
复制代码
⚠️ 注: 通配选择器对一个选择器的特定性没有贡献,其“特定性=0000”,虽全是 0 ,但这不表明他没有“特定性”。反而须要记住的是:0 特定性比无特定性要强。
⚠️ 注:有时某个声明可能很是重要,超过了全部其余声明,则在这些声明结束分号前加上 !important
。
如:浏览器
h1 {
color: red;
background: yellow !important;
}
复制代码
继承是 CSS 中最基本的内容之一。bash
继承的值没有“特定性”,甚至连 0 特定性也没有。所以咱们随时能使用一个更“特定”的选择器来覆盖其从父选择器继承的属性。性能
通常来说,若是样式会影响你的文本外观,则全部这些样式都能“继承”。如:字体颜色 color 、全部与字体相关的属性:学习
font-family
font-size
font-weight
font-style
复制代码
⚠️ 而大多数 “框模型属性” 就不能继承(包括外边距、内边距、背景和边框),好比给 <body>
元素加了一个边框样式,不表明咱们但愿这个“身体”里全部的元素都有“边框”。字体
CSS:Cascading Style Sheets 层叠样式表。spa
CSS 基于的方法就是让全部样式“层叠”在一块儿,这是经过结合“继承”和“特殊性”作到的。code
层叠是一个“过程”,是浏览器“考虑”的“过程”——浏览器在肯定应当向一个元素应用哪些值时,浏览器不只要考虑“继承”,还要考虑“声明的特殊性”,另外还须要考虑“声明自己的来源”。
站在“浏览器”的角度,它会进行如下几步来决定应用什么样式:
第一步: 收集全部样式表;
第二步: 找到全部匹配的声明;
第三步: 对全部匹配的规则排序;
!important
的规则的权重要高于没有 !important
标志的规则。!important
标志的读者样式强于全部其余样式(包括有 !important
标志的创做人员样式);创做人员样式和读者样式都比浏览器默认样式要强。第四步: 按上文讲的“特定性”计算值对全部声明排序;
第五步: 按出现顺序对应用到给定元素的全部声明排序。
a:link {
color: blue;
}
a:visited {
color: red;
}
a:hover {
color: orange;
}
a:active {
color:black;
}
复制代码
如上一篇文章所说:咱们须要按以上顺序来声明连接样式。
经过这篇的学习,咱们知道了缘由:
即:
a
的颜色是“蓝色”;:hover
在顺序上在下边,因此变为“橙色”;:link
、 :hover
、 :active
都生效,但按层叠规则,:active
在顺序上的最下边,故对以上产生覆盖,因此变成“黑色”;:link
和 :visited
生效,:visited
将 :link
覆盖并永久生效。后记: 本篇知识点很少,属于基础知识,须要烂熟于心。路还很长,但愿收获在路上,快乐在路上。
祝好,qdywxs ♥ you!