在我的测试中,div > ul
规则的样式也适用于div ul li ul
元素。为什么>
子选择器并不总是强制执行?
我有一个解决方案,但我想了解为什么我需要使用此解决方案。
在CSS中,我了解a b
将选择匹配b
的每个元素,a
是匹配a
的元素的后代。 b
元素可以出现在a > b
元素上方的层次结构中的任何位置。
我认为我理解b
只会选择与a
匹配的元素,如果它们是匹配a
的元素的直接子元素。 b
元素必须是font-weight: bold;
元素的直接父级。
但是,在下面的测试中,样式ul
适用于所有div
项,甚至是那些不是color
元素的直接子项的项。为了防止应用样式,我需要首先设置一个冲突的样式,就像我对div ul {
color: black;
}
div > ul {
font-weight: bold;
color: red
}
属性一样。
CSS中的逻辑是什么使它按照它的方式工作?
<div>
<ul>
<li>red and BOLD 1</li>
<li>red and BOLD 2</li>
<li>red and BOLD 3
<ul>
<li>black and BOLD 1</li>
<li>black and BOLD 2</li>
</ul>
</li>
<li>red and BOLD 4</li>
</ul>
</div>
if (!/^V[09]\d{7}$/.test(rid)){
alert("Enter your ID correctly: V0 followed by seven numbers.");
return false;
}
答案 0 :(得分:3)
此效果不是子选择器的结果。您所看到的是property inheritance的结果。
CSS中属性的值由3个规则定义:
如果某个属性未在级联中定义,则会自动为其分配值“继承”。对于嵌套的ul
元素,您没有为font-weight
定义值,font-weight
为one of those properties,默认为inherit
(请注意& #34;继承&#34;顶部表格中的条目),因此它将使用其父元素使用的任何内容(您已将其定义为粗体)。
您的选择器正在准确选择直接子项,但该规则由子项的子项继承,因为该特定属性的行为方式。默认情况下不继承的属性不会影响子项。
#parent {
font-weight: bold;
}
&#13;
<span id="parent">
All of the text in here is bold,
<span id="child">
even the text in the child.
</span>
</span>
&#13;
答案 1 :(得分:2)
font-weight
和color
(ul
和li
元素)的默认值为inherit
。
因此,您的规则仅适用于子ul
元素(将font-weight
设置为bold
),然后li
元素会继承该值。
如果您的某个列表项中包含a
元素的href
元素,那么它将为蓝色,因为color
的{{1}}的默认值为a:link
而非blue
。
答案 2 :(得分:1)
在你的CSS中:
div > ul {
font-weight: bold;
color: red
}
字体粗细和颜色将直接应用于div内部ul内的所有元素,除非其他样式覆盖它们。
试试这个:
div > ul {
font-weight: bold;
color: red;
}
div > ul ul {
font-weight: normal;
color: black;
}
这应该使嵌套的ul不是粗体,而是黑色而不是红色。
答案 3 :(得分:-2)
它选择元素的直接后代,是的。在这种情况下div > ul
,它选择每个ul作为任何div的直接后代。然而,它也选择了ul的后代。这就是它的工作方式。
正如评论中所解释的那样,由于font属性被所有后代继承 - 你得到了。