这是一个很长的镜头,但是是否有可用的工具通过删除不需要的特异性来优化 CSS 选择器?
我发现当我写 CSS 时,我故意让我的选择器比必要的更具体,以避免冲突和准文档。
如果有一种工具可以分析给定的一组规则,确定它们与其他规则重叠的“唯一性”,然后去除任何不必要的特殊性,那就太好了。
我什至无法想象工具开发人员将如何处理这需要的所有场景,但我之前曾被其他人在该领域的独创性所震撼,并认为值得一问。
更新:
我为这个问题添加了一个赏金,我越想它,我就越意识到CSS 特异性过滤器的价值。
例如,在Sass和LESS中使用嵌套规则/选择器时,过度嵌套是一种常见且众所周知的反模式,很容易导致选择器过于具体。
在优秀的 TutsPlus 课程使用 Sass 和 Compass 可维护的 CSS中有一个很好的说明:
body {
div.container {
p {
a {
color: purple;
}
}
}
}
Sass 将遵循这些嵌套指令并生成以下 CSS 输出,不反对任何不必要的特殊性:
body div.container p a {
color: purple;
}
但是,如果存在/确实存在特异性过滤器,它将为 CSS 开发人员带来潜在的好处:
您可以将样式表组织为 DOM 的 1:1 映射,类似于您在 Firebug 和 Chrome 开发工具中检查样式规则时看到的内容。智能编辑器/IDE 可以为具有共享样式/类的 DOM 元素自动填充样式。当然,这种冗余会被特异性过滤器/优化器过滤掉。
样式表的结构可以由扫描 DOM 并将其转换为 CSS 选择器/规则的工具预先填充。这意味着开发人员只需要更新 HTML;CSS“树”将保持同步以反映 DOM 的当前状态。智能编辑器可以让您跳转到元素/类的 CSS 定义以进行样式设置——甚至可以在单独的面板中显示其样式规则。
在某种程度上,这似乎是一种倒退——就像您在 Dreamweaver 或 WebAssist 中发现的帮助新手学习 CSS 的功能一样。但是 CSS 选择器优化工具的基本思想似乎很简单,我所描述的工作流自动化类型将是合乎逻辑的下一步——催化剂将是特异性过滤器。
我查看了一些更知名的 CSS 编辑器和 Web IDE,但除了针对单个元素并为其生成选择器之外,没有发现任何提供此类功能的东西。
更新 2:CSS 选择器性能
针对 Spliff 的评论,这里有两篇关于 CSS 选择器性能的精彩文章:
CSS 选择器的性能影响Steve Souders
Chris Coyier 的《高效渲染 CSS 》
两者都同意微优化 CSS 不值得努力,但过度限定的后代选择器是“效率灾难”。我自己还没有进行基准测试,但怀疑我建议的那种“DOM 映射”方法会在没有优化步骤的情况下导致性能下降,无论是手动的还是自动的。
相关问题、链接和工具: