.slide:hover > div > span {
border-color: #c8c8c8;
}
或者
.slide:hover div span {
border-color: #c8c8c8;
}
非常感谢!
更新:问题
这些中的任何一个都存在可靠性问题吗?
.slide:hover > div > span {
border-color: #c8c8c8;
}
或者
.slide:hover div span {
border-color: #c8c8c8;
}
非常感谢!
更新:问题
这些中的任何一个都存在可靠性问题吗?
ul > li
看起来比 ul li
更清晰,则按照该方式编写。如果不是,请不要这样做。保持简单。li
元素可以包含其他的ul
元素,因此你实际上可以无限嵌套它们。请参见我的答案以获取更多信息。 - BoltClock.slide:hover > div > span
比.slide:hover div span
更有效率。
然而,在普通大小的页面上,你永远不会注意到差异。
如果在样式表中使用子元素选择器代替后代选择器,对于非常庞大/复杂的页面,您可以节省可感知的渲染时间(请参见@Boris Zbarsky的评论)。对于普通大小的页面,您可能只能减少几毫秒。
使用子元素选择器有一个缺点-IE6不支持它。
对于99%的网站,IE6支持不是问题,但仍有一些人在使用它:
<
符号和一个额外的空格也会增加两个字符,这可能会“膨胀”您的CSS文件并“增加”加载时间。显然是一种权衡。 - Cody Graydiv>span
来避免用空格使 CSS 代码臃肿 :) - thirtydot<section class="slide">
<div>
<span></span> <!-- [1] -->
<div>
<span></span> <!-- [2] -->
</div>
</div>
<div>
<p>
<span></span> <!-- [3] -->
</p>
</div>
</section>
哪些是选中的,哪些不是:
两个选择器都选中了
这个 span
是一个 div
的子元素,而这个 div
又是一个带有类名为 slide
的元素的子元素。由于 span
是 div
的子元素,它也是 div
的后代。同样地,div
和它的 .slide
父/祖先也是如此。
当鼠标悬停在 .slide
元素上时,这个 span
被选中。应用的规则是第二个规则,因为两个选择器的特异性相等,但第二个规则排在第一位。
只被 .slide:hover div span
选择
这个 span
在一个 div
中,但它的父元素 div
位于另一个没有类名为 slide
的 div
中。因此,第一个选择器找不到这个元素。
然而,内部父元素 div
是一个 .slide
元素的孙子。无论深度如何,它仍然是 .slide
的某种后代(它在其中某个地方包含)。
当鼠标悬停在 .slide
元素上时,这个 span
被选中。应用的规则是第二个规则,因为它是唯一匹配的规则。
只被 .slide:hover div span
选择
这个 span
的父元素是一个 p
元素,而不是一个 div
。很容易理解;第一个选择器找不到这个元素。
然而,span
是一个 div
元素的孙子,而这个 div
本身位于一个 .slide
中。
当鼠标悬停在 .slide
元素上时,这个 span
被选中。应用的规则是第二个规则,因为它是唯一匹配的规则。
最后一件事:在所有三种情况下,仅第二个选择器中的规则被应用。这是纯粹的巧合;支持的浏览器在查找要匹配的元素方面的差异仍然是真实存在的。
<
和额外的空格会使代码膨胀更多的字符,从而增加加载时间。Google担心这种事情,那么为什么不每个人都应该担心呢?:-p - Cody Gray>
而不是空格。但是,对于大多数用途来说,这并不重要。当您有大量规则、元素或动态更改(或任何组合)时,它开始变得重要。例如,加载HTML5单页规范的选择器匹配大约占据了25%的加载时间,其中很多原因是由于其在选择器中使用了空格。 - Boris Zbarsky