问题代码如下:
HTML
<p>Hello,<span>CSS</span></p>
CSS
*{
color:red;
}
p{
color:green;
}
Result
span
标签内的文本颜色居然是红色,而不是绿色
问题:
为什么span
标签没有继承p
标签设置的{color:green;}
属性呢?
问题代码如下:
<p>Hello,<span>CSS</span></p>
*{
color:red;
}
p{
color:green;
}
span
标签内的文本颜色居然是红色,而不是绿色
为什么span
标签没有继承p
标签设置的{color:green;}
属性呢?
span是在p里边,但是span并没有指定样式(或者指定的样式中不包含color),整个过程式先计算的层叠的值,然后再考虑继承的值;这里的情况就是层叠的值是red,因为*是匹配所有元素的,所以显示的值就是red;根本轮不到继承自p的color值。
详细请看 http://blog.aijc.net/css/2014/08/04/CSS%20%E5%B1%82%E5%8F%A0%20Cascadi...
5 回答1.3k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
4 回答2k 阅读
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
这就是俗称的通配选择器(*)造成的“继承失效”或“继承短路”。
在 CSS 的特殊性规则中,继承的声明根本没有任何特殊性,而使用通配选择器的声明具有0, 0, 0, 0特殊性。当二者冲突时,通配选择器胜出,导致继承失效。
正因为如此,一般不建议使用 (*)。