CSS三大特性
一、层叠性
样式冲突,遵循就近原则,执行样式离结构近的
样式不冲突则不层叠
二、继承性
子标签会继承父标签的某些样式,如文本颜色和字号
1 2 3 4 5 6 7
| div { color: red; }
<div> <p>继承div的样式,变为红色</p> </div>
|
恰当使用继承可以简化代码,降低CSS的复杂性
子元素可以继承父元素的样式 (text-,font-,line-等开头的元素可以继承,以及color属性)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| body { font: 12px/24px; 12为字号,24为行高 font: 12px/1.5; 行高使用倍数方便子元素根据字体大小自动调整行高 } div { font-size: 10px; }
<body> <div>继承body行高,1.5*10=15px</div> <ul> </li>li继承父类的大小行高,父类ul未指定则再上一层body,而body的字体大小为12,行高1.5,则行高最后为当前文字大小的1.5倍,则为12px*1.5=18px</li> </ul> </body>
|
三、优先级
选择器权重
| 标签选择器 |
计算权重公式 |
| 继承或者 * |
0,0,0,0 |
| 每个元素(标签选择器) |
0,0,0,1 |
| 每个类,伪类 |
0,0,1,0 |
| 每个ID |
0,1,0,0 |
| 每个行内样式 style=”” |
1,0,0,0 |
| 每个!important 最重要的 |
∞ 无穷大 |
值从左到右,左面的最大,一级大于一级,数位之间没有进制(会加到0,0,0,7也不会有进位),级别之间不可超越。
关于CSS权重,我们需要一套计算公式来去计算,这个就是 CSS Specificity(特殊性)
div { color: pink !important; }
注意权重对应的对象是谁,有可能对于这个标签来说其实是继承。
不管父元素的权重多高,子元素得到的权重都只是继承而已。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <style> .test { color: red; } div { color: pink!important; } #demo { color: green; } </style> </head> <body> <div class="test" id="demo" style="color: purple">你笑起来真好看</div> </body>
|
权重叠加:(如果是复合选择器,则会有权重叠加)
1 2 3 4
| div ul li ------> 0,0,0,3 三个标签选择器权重相加 .nav ul li ------> 0,0,1,2 a:hover -----—> 0,0,1,1 伪类 加 标签 .nav a ------> 0,0,1,1
|
注意:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <style> .nav li { color: red; } .nav { color: pink; font-weight: 700; } </style>
<body> <ul class="nav"> <li class="pink">人生四大悲</li> <li>家里没宽带</li> <li>网速不够快</li> <li>手机没流量</li> <li>学校没wifi</li> </ul> </body>
|
这里.nav未产生继承,因为.nav后面加了li,所以直接选择了li元素,所以.nav算为类的权重