首先,请注意 CSS 中的 Child 组合子 (>) 表示直接的子关系。而 Descendant 组合器 ( ) 将适用于直接和间接子代。
考虑到这一点。选择器div * .test 将采用类test 的元素,这些元素是div 的子元素的子元素。而且,由于我们使用的是后代组合器,因此它们可以是间接子代。
但是,div .test 将采用 test 类的元素,这些元素是 div 的子元素。
因此,div .test 将选择<div><span class="test">test</span></div> 中的span。然而,div * .test 不会,因为在 div 和 span 之间没有其他元素。
他们都会在<div><p><span class="test">test</span></div> 中选择span。 在这种情况下,* 匹配 p 元素。然而,没有必要匹配它,因为我们使用的是后代组合器。在这种情况下,使用* 会给浏览器带来额外的工作。
请注意,div * 和 div 选择的元素不同。 div * 选择 div 的所有子代。而div 选择所有div。
顺便说一句,作为一般规则,选择器越简单,浏览器就越容易检查它。浏览器通常的实现会向后检查这些选择器(从匹配最右边的部分开始)。这意味着对于div *,浏览器必须检查页面上的每个元素以查看它是否在div 内。因此,选择器越短越具体越好。
例如,如果您只希望类为 test 的元素是 div 的直接子元素,请使用 div > .test。这样一来,浏览器就不会爬上 DOM 来查找是否存在包含该元素的 div。
当然,如果你能摆脱.test,那就更好了。
*.test 将获取类为test 的所有元素,与.test 相同。
根据测试您的选择,使用border: 1px solid black 之类的东西。这将允许您区分何时选择元素和选择其父元素。