您对浅层,最好是一级选择器更可取这一事实是正确的- 至少从性能角度来看,至少在理论上是这样。然而,在大多数情况下,渲染引擎优化抵消了原本微不足道的性能开销。
这是样式表易于维护、可读性和大小开始发挥作用的时候。降低的特异性允许回收“部分”类 - 如果您查看呈现的标记,.ui-dialog
将会有一大堆其他类应用于它:
ui-dialog ui-widget ui-widget-content ui-corner-all ui-front ui-draggable ui-resizable
将所有属性应用到一个规则中会更好吗?绝对不是从开发人员的角度来看,这种方法会使其成为维护的噩梦。想象一下,更改单个表示属性,然后必须将其回溯到您的示例中的所有“特定”规则!
限定 ansector 选择器(例如.ui-dialog .ui-dialog-content
)的理由要简单得多,如果不是立即显而易见的话 - 以增加这些选择器的特异性。例如,.ui-helper-reset
类基本上取消了任何先前设置的样式,因为该规则是在 css 文件的底部声明的:
.ui-helper-reset {
border: 0 none;
font-size: 100%;
line-height: 1.3;
list-style: none outside none;
margin: 0;
outline: 0 none;
padding: 0;
text-decoration: none;
}
要覆盖任何这些属性,必须使用更高特异性的选择器。
我个人不喜欢这种模式 - 我希望代码一致性对这种类结构背后的推理做出更多贡献。