Lim*_*nte 33 html css css-selectors
有人可以向我解释为什么CSS > sign(direct child)会覆盖<li>
此示例中所有标记的默认颜色:
ul > li {
color:red;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
<li>This should be red
<ol>
<li>default color 1</li>
<li>default color 2</li>
</ol>
</li>
<li>And this should be red also
<ol>
<li>default color 3</li>
<li>default color 4</li>
</ol>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过添加来修复它li { color: black; }
,但我想知道为什么要ul > li
覆盖默认颜色<li>
?
Mic*_*l_B 47
问题不是子组合子(>
),它是color
属性,可以继承.
虽然color
属性的初始值因浏览器而异,但inherit
很常见.这意味着元素的文本颜色是从父级继承的.您在代码中看到了这一点.
相反,该border
属性不可继承.请注意,与文本颜色不同,它仅适用于您的目标li
:
ul > li {
color: red;
border: 1px solid black;
}
li { border: 1px solid inherit !important; }
Run Code Online (Sandbox Code Playgroud)
<ul>
<li>This should be red
<ol>
<li>default color 1</li>
<li>default color 2</li>
</ol>
</li>
<li>And this should be red also
<ol>
<li>default color 3</li>
<li>default color 4</li>
</ol>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
要实现样式目标,请为li
元素设置默认颜色.这将覆盖inherit
.这是一个例子:
ul > li {
color: red;
}
li {
color: black;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
<li>This should be red
<ol>
<li>default color 1</li>
<li>default color 2</li>
</ol>
</li>
<li>And this should be red also
<ol>
<li>default color 3</li>
<li>default color 4</li>
</ol>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
参考文献:
Que*_*tin 16
color
对于大多数元素,属性的默认值inherit
不是black
.这意味着它接受parent(ol
)元素具有的任何值.(那是在ol
继承红色之后li
).
您必须设置显式颜色才能覆盖它.例如:
ul > li li {
color: black;
}
Run Code Online (Sandbox Code Playgroud)
要么
ol > li {
color: black;
}
Run Code Online (Sandbox Code Playgroud)