这是可以的(不带空格):
li.highlight{
background:#FF9900 none repeat scroll 0 0;
}
这个不会起作用(带空格):
li .highlight{
background:#FF9900 none repeat scroll 0 0;
}
为什么?
这是可以的(不带空格):
li.highlight{
background:#FF9900 none repeat scroll 0 0;
}
这个不会起作用(带空格):
li .highlight{
background:#FF9900 none repeat scroll 0 0;
}
由于空格表示选择器之间存在关系(在这种情况下是后代关系),因此后面的选择器不起作用。
li.highlight /* defines an element of 'li' with a classname of 'highlight' */
li .highlight /* defines an element of class 'highlight' that's contained within an li element */
li > .highlight /* as pointed out by Neil (in comments), this would select an element of class highlight that is an immediate child/descendant of an li */
我应该解释一下我使用“不起作用”这个短语的原因。显然,我错误地使用了你的措辞。
它能够正常工作,只是会选择一个在您的标记中不存在的元素-如评论中所述。
第一个例子:
<li class="highlight">this will be highlighted</li>
第二个例子:
<li class="highlight">
<span class="highlight">this will be higlighted</span>
<span>this won't be.</span>
</li>
因为空格(在选择器中)意味着向下遍历DOM以查找匹配的标记,所以:
spacing是用来调用不同元素而不是与一个元素相关的项目。例如,.highlight不是一个单独的元素。而调用div table则是完全分开的元素。
li .highlight
相当于在 li
选择器后面加了个隐含的 *
,即等价于 li *.highlight
。
li.highlight
匹配具有类名为 highlight
的 li
元素:<li class="highlight">
。li .highlight
匹配嵌套在 li
内部(即后代)的具有类名为 highlight
的元素,比如 <li><strong>OMG <span class="highlight">NO WAY!</span></li>
中的 span
元素。没有空格,您正在选择一个具有高亮类的li。带有空格,您正在选择li的后代,其中后代具有高亮类。
第一种情况,您选择所有类为“highlight”的li标签。在第二种情况下,您选择具有类“highlight”的li标签的子元素。
您应该阅读W3C规范中有关CSS选择器的内容。