当为元素添加新的样式规则时,Chrome生成的选择器包含整个层次结构而不仅仅是类名。
例如:
<body>
<div class="container">
<span class="helper"></span>
</div>
</body>
为
.helper
添加新的样式规则将生成一个选择器,如body > div > span
而不仅仅是.helper
。这是为什么呢?当为元素添加新的样式规则时,Chrome生成的选择器包含整个层次结构而不仅仅是类名。
例如:
<body>
<div class="container">
<span class="helper"></span>
</div>
</body>
.helper
添加新的样式规则将生成一个选择器,如body > div > span
而不仅仅是.helper
。这是为什么呢?.helper
可能并不一定是body > div > span
,因为它也可能是body > div > div > span
,无论是现在还是以后。helper
类(即使在您的DOM中只有一个元素具有该类),而是假设元素结构,这更可靠。由于它看到只有一个span
是body
的子节点的div
的子节点,因此它会生成选择器body > div > span
,用于为您选择的元素添加样式规则。(大概率上,它以body >
开头而不是html > body >
,是因为body
始终是html
的子节点,因此这个额外的约束完全冗余。):nth-child(1)
。body > div > span:nth-child(1)
。如果它尝试使用.helper
而不是:nth-child(1)
生成选择器,即body > div > span.helper
,它将匹配两个元素,这显然不是突出显示一个元素并添加样式规则的预期结果。.helper
规则属性以影响所有匹配规则的元素,或者只编辑元素样式以影响单个元素。 "新建规则" 按钮似乎更适用于添加自定义规则,而不是复制现有规则/创建单个元素规则。 - Fabrício Mattéelement.style
被添加为内联样式而不是内部样式表,尽管我不确定大多数用户会如何看待这个问题。 - BoltClock这可能有多种原因。 如果不知道正在采取的确切属性,则很难确定。 此外,查看您的CSS也会有所帮助。
我最好的理解是,您想知道为什么当您使用<span class"helper">
时,它也会带有其父div
和父body
的属性。
这可能是因为它本身是body
和div
的子级。
另一个逻辑解释是,在 jsfiddle 上提供了一个工作示例。
根据您的元素,您可能会遇到某些冲突。 在我的示例中,添加了!important
标记,使其color
属性优先于span class
。 但在下一行中,它适用得很好。
<body>
<div class="container">
<span class="helper">I am being applied</span>
<div>
<span class="helper">I am helper but i am not red</span>
</div>
</div>
</body>
body > div > span {
color: red !important;
}
.helper { color: green }