CSS 的三大特性
CSS 的三大特性:层叠性、继承性、优先级。
层叠性
相同选择器设置相同的样式,此时第一个样式就会被第二个样式覆盖(层叠)。(按照程序执行的顺序,后面的样式覆盖前面的)
继承性
子标签会继承父标签的某些样式,如文本颜色和字号。降低CSS样式的复杂性。
注: 子元素可以继承父类元素的样式(以 text-, font-, line- 这些元素开头的可以继承,以及 color 属性)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS继承性</title>
<style>
div {
color: thistle;
font-size: 14px;
}
</style>
</head>
<body>
<div>
<p>CSS继承性</p>
</div>
</body>
</html>

行高的继承
body {
font: 12px/1.5 Microsoft YaHei;
}
(1)行高可以有单位px,也可以无
(2)如果子元素没有设置行高,则会继承父元素的行高 (1.5)
(3)此时子元素的行高:当前子元素文字大小的 1.5 倍
(4)body 行高设置为 1.5 最大的优势是 里面子元素可以根据自身文字的大小自动调整行高。
优先级
当同一个元素指定多个选择器时,就会有优先级的产生。
(1)选择器相同,按程序运行的顺序执行
(2)选择器不同,根据 选择器权重 执行
选择器权重如下表所示,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=x, initial-scale=1.0">
<title>CSS优先级</title>
<style>
/* div 优先级第5 */
div {
color: tomato !important;
/*!important 优先级最高第(1) */
}
/* 类选择器 第4 */
.test {
color: violet;
}
/* id 优先级第3 */
#demo {
color: yellowgreen;
}
</style>
</head>
<body>
<!-- style="" 优先级第2 -->
<div class="test" id="demo" style="color: blueviolet;">CSS优先级</div>
</body>
</html>
注:
(1)权重是由 4 组数字构成,但不会有进位
(2)等级判断从左向右,如果某一位数值相同,则判断下一位数值。
(3)继承的权重是0,若子元素本身设定的样式,则按本身的样式修改;若子元素本身没有设定样式,则其样式跟从父类的。
权重叠加
如果是复合选择器,则会有权重叠加,需要计算权重。
- div ul li ---------> 0,0,0,3
- .nav ul li ---------> 0,0,1,2
- a:hover --------> 0,0,1,1 (:hover 是伪类选择器)
- .nav a ---------> 0,0,1,1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>权重的叠加</title>
<style>
/* li 的权重 0,0,0,1 */
li {
color: dodgerblue;
}
/* ul li 的权重 0,0,0,1 + 0,0,0,1 = 0,0,0,2 */
ul li {
color: forestgreen;
}
/* .nav li 的权重 0,0,1,0 + 0,0,0,1 = 0,0,1,1 */
.nav li {
color: hotpink;
}
</style>
</head>
<body>
<ul class="nav">
<li>权重的叠加</li>
</ul>
</body>
</html>