有没有一款可以通过移除不必要的特异性来优化CSS选择器的工具?我发现当我编写CSS时,故意使选择器比必要的更具体,以避免冲突和“准文档”的目的。如果有一款工具能够分析一组给定规则,并确定它们在与其他规则重叠方面的“独特性”,然后去除任何不必要的特异性将会很好。我甚至无法想象开发人员如何处理所有这些情况,但我曾经被其他人在此领域的创意所震撼,所以觉得问问也无妨。
更新:
我在这个问题上添加了一个赏金,我越想越发现一个CSS特异性过滤器是多么有价值。例如,在Sass和LESS中使用嵌套规则/选择器时,过度嵌套是一个常见的且众所周知的反模式,很容易导致选择器过于具体。在TutsPlus的优秀课程Maintainable CSS with Sass and Compass中有一个很好的示例来说明这一点:
body {
div.container {
p {
a {
color: purple;
}
}
}
}
Sass 将遵循这些嵌套指令,并生成以下的 CSS 输出,对任何不必要的特异性不提出异议:
Sass将按照这些嵌套指示进行操作,并生成相应的CSS输出,不会对任何不必要的特权产生异议。
body div.container p a {
color: purple;
}
如果确实存在一个特异性过滤器,那么它将为CSS开发人员带来潜在的好处:
您可以将样式表组织为DOM的一对一映射,类似于您在Firebug和Chrome Dev Tools中检查样式规则时看到的内容。智能编辑器/IDE可以自动填充具有共享样式/类的DOM元素的样式。当然,这种冗余将被特异性过滤器/优化器过滤掉。
样式表的结构可以由扫描DOM并将其转换为CSS选择器/规则的工具预先填充。这意味着开发人员只需要更新HTML,CSS "树"将保持同步以反映DOM的当前状态。智能编辑器将让您跳转到元素/类的CSS定义以进行样式设置——甚至可以在单独的面板中显示其样式规则。
某种程度上,这似乎是向后退一步——就像您在Dreamweaver或WebAssist中找到的功能,可以帮助新手学习CSS。但是CSS选择器优化工具的基本思想似乎是个毋庸置疑的事实,我所描述的工作流自动化将是逻辑上的下一步,而催化剂将是特异性过滤器。
我调查了一些知名的CSS编辑器和Web IDE,但除了针对单个元素并为其生成选择器之外,没有找到任何提供此类型功能的东西。
更新2:CSS选择器性能
针对Spliff的评论,以下是两篇关于CSS选择器性能的好文章:
CSS选择器性能影响,作者Steve Souders
高效地渲染CSS,作者Chris Coyier
两篇文章都认为微观优化CSS不值得付出努力,但是超限定的后代选择器是“效率灾难”。我还没有自己进行基准测试,但我怀疑我建议的“DOM映射”方法将在没有手动或自动化优化步骤的情况下导致性能损失。
相关问题、链接和工具:
header
元素吗?aside
元素只会出现在section.sidebar
中吗?)。否则,将规则的优先级*降低而不改变其含义的唯一方法是删除重复的简单选择器(例如,section> div.foo.foo:nth-of-type(odd)
变为section> div.foo:nth-of-type(odd)
)。 - BoltClockhtml body div p#lorem span
通常可以缩短为#lorem span
。 - Madara's Ghost