我想知道使用后代选择器或直接后代选择器之间的最佳实践和性能。在下面的HTML中显示的第一种情况中,两个选择器都可以同等地工作,因为只有一个孩子。
<div>
<p>Foo Bar</p>
</div>
在上面的标记中,div p
或div > p
是更好的练习/表现吗?
在下面的HTML中,有几个子元素。
<div>
<p>
<a>
<span>Foo Bar</span
</a>
</p>
</div>
假设所需的目标是范围标记,div span
或div > p > a > span
是更好的练习/表现吗?
答案 0 :(得分:5)
不要考虑CSS性能。这几乎肯定是一个不成熟的优化。如果它现在还不成熟(即:不是真正有意义的性能考虑因素),它将在不久的将来(即:将通过覆盖绝大多数目标人群的浏览器进行优化)。
a b
和a > b
之间的区别是级别的“特殊性”选择器引擎必须搜索到的b
与a
匹配的深度}}。虽然这可能会对性能产生影响(对于匹配a b
的大量元素),a > b
情况可能意味着您将失去设计的灵活性。
在这种情况下,如果您尝试通过将a b
的所有情况更改为a > b
来“优化”效果,则您将无法在{{1}之间轻松添加更多层DOM元素您的设计中的{}和a
,而不会更改CSS。如果不那么具体,可以根据“行为”进行设计。
此外,虽然b
(理论上)的工作量少于a > b
,但在大多数情况下,在两个级别上明智地使用类都是等效的(即:a b
)。
编辑: css明智地使用术语a.x b.y
,并且算法可能不正确。最好在匹配方面说明。
答案 1 :(得分:0)
在性能方面严格回答,我发现this reference将子选择器排名为比后代选择器更好的性能。
- ID,例如
#header
- 类,例如
.promo
- 类型,例如
div
- 相邻的兄弟姐妹,例如
h2 + p
- 儿童,例如
li > ul
强>- 后裔,例如
ul a
强>- 环球,即
*
- 属性,例如
[type="text"]
- 伪类/元素,例如
醇>a:hover