Vla*_*mir 16 css sass css-selectors
有人可以向我解释为什么标签限定是一个糟糕的CSS练习?为什么tag.class在自解释元素的情况下是坏的?例如
<section class="carousel-item">
<header class="header of-carousel">
<h2 class="heading of-carousel">Services</h2>
</header>
…
<footer class="footer of-carousel">
…
</footer>
</section>
Run Code Online (Sandbox Code Playgroud)
为什么它应该比带有上下文修饰符的DRY和简洁代码更好?
<section class="carousel-item">
<header class="of-carousel">
<h2 class="of-carousel">Services</h2>
</header>
…
<footer class="of-carousel">
…
</footer>
</section>
.of-carousel {
header.& {…}
h2.& {…}
footer.& {…}
}
Run Code Online (Sandbox Code Playgroud)
甚至
section.carousel-item
header
h2
footer
.carousel-item {
header {…}
h2 {…}
footer {…}
}
Run Code Online (Sandbox Code Playgroud)
我看到很多人沉迷于BEM,但我不明白为什么?他们的选择器是如此丑陋,特别是在HTTP-2__时间.
我熟悉的惯例是,如果选择者具有不同的特异性水平,则排位是不好的.这就是说,使用类或标记限定id是没有意义的(因为id已经是唯一的),或者使用标记来限定类(因为类应该比标记更独特,如果你的目的是让一个类在两种不同的情况下做两件不同的事情,你应该通过使它们成为两个不同的类来提高可读性.但是,我从来没有被告知使用class-on-class限定符是不好的做法(实际上我怀疑Bootstrap相当广泛地使用它们,纯粹基于它的语法).
来自MDN的这篇文章是"css tag qualifying"的顶级搜索结果之一,似乎与我的观点一致,至少在这是不好的做法时:
如果规则具有ID选择器作为其键选择器,请不要将标记名称添加到规则中.由于ID是唯一的,因此添加标记名称会不必要地减慢匹配过程.
它继续说:
之前的概念也适用于[用类来限定标签].虽然类可以在同一页面上多次使用,但它们仍然比标签更独特.您可以使用的一种约定是在类名中包含标记名称.但是,这可能需要一些灵活性; 如果对标记进行了设计更改,则还必须更改类名.(最好选择严格的语义名称,因为这种灵活性是单独样式表的目标之一.)
CSS技巧似乎同意,说:
ID是唯一的,因此它们不需要标记名称.这样做会降低选择器的效率.如果可以避免,也不要使用类名.类不是唯一的,所以从理论上讲,你可以让一个类名做一些可能对多个不同元素有用的东西.如果您希望根据元素使样式有所不同,您可能需要标记限定(例如li.first),但这种情况非常罕见,所以一般情况下不要.
我希望这有助于回答你的问题.