如何有效地选择CSS中元素的所有直接子元素

时间:2018-08-17 21:22:04

标签: css css-selectors

在CSS中,我需要选择一个类为foobar的元素的所有直接子元素。显而易见的方法是这样做:

.foo > * {
  foo: bar;
}

这个问题不是重复的。问题Select all direct descendant dom elements regardless of type仅询问如何选择元素的所有直接子元素。答案说使用的是我上面显示的内容。但是a comment therecomment elsewhere声称这种方法效率极低,声称*选择器将导致子选择器生效之前所有元素都被选择:

  

请注意,这是一个效率极低的选择器! CSS选择器是从右到左验证的,因此,通过在选择器的末尾使用星号(*,又称通用选择器),浏览器将选择所有元素,然后开始进一步过滤(在这种情况下:仅是直接子元素的元素) “身体”元素)。因此,对于小页面而言,这不是问题,但在较大的单页面应用程序中,它可能会使速度变慢...

(坦白说,这听起来很可疑;浏览器选择算法真的不是那么聪明吗?)

所以这个问题是不同的:然后我如何做出有效的等效选择?

我这样做吗? (请注意,我更新了此选项;我喜欢使用:root,因为我不必引入任何虚拟元素。)

.foo > :not(:root) {
  foo: bar;
}

还是我这样做?

.foo > :nth-child(odd), .foo > :nth-child(event) {
  foo: bar;
}

真的比.foo > *更有效率吗?您有更好的建议吗?

(在我的特定用例中,大约只有两个或三个孩子,但是整个文档可能很大。)

0 个答案:

没有答案