寻找重复的样式
在大型代码库中,您必然会有选择器和/或样式重复。尝试尽可能多地找到。
有很多方法可以做到这一点,但您可能希望为您的平台(或 Web 工具)找到一个工具,该工具将扫描您的 CSS 以查找选择器和样式重复。那里有很多,但为了让你开始,这个 SO 答案有很多建议,包括 Dust-Me 和 CodeBeautifier。
在重复中寻找模式
这可能需要一些调查,特别是如果没有迹象表明给定元素是什么,但尝试找到模式。您是否定义了六个不同的导航列表,它们都具有大致相同的样式(display: inline-block
、、float: left
边距、填充等)?即使其中一些具有不同的左边距,您仍然可以为异常值设置默认边距以覆盖,并具有设置这些默认值的“导航”类。
对于简单的效果(颜色、边距等),您可以将它们组合到选择器列表 ( a, span, p {}
) 中。有关更复杂的效果,请参阅下面的 OOCSS 部分。
这不仅适用于单个项目,也适用于页面。如果您发现必须具有特定于页面的样式,请查看它们之间是否存在模式。#page-2
因此,您可以拥有更像或其他更模块化和描述性的东西,而不是像在您的身体上那样#theme-wide
的东西,并允许您整合代码。
确保您正在利用 Cascade
CSS 的部分优点在于您可以设置通用的东西并在以后使用特异性覆盖它们。但是,很容易陷入特殊性之战,并最终导致一英里长的选择器和大量使用 . !important
,尤其是当您有任何具有任何基本样式的第三方代码时。因此,请确保您没有做愚蠢的事情,例如#page-2 div.navigation ul.nav li a
何时.navigation a
或#page-2 .navigation a
足够。
Andy Clarke 对找出 CSS 特异性和比较两个选择器有一个很棒的解释,如果你没有很好地理解它是如何工作的。
加入一些 OOCSS 原则
我不是面向对象 CSS 的大力倡导者(我所看到的往往在 CSS 类和诸如此类的东西上过火,而且在拥有语义 HTML 时我有点纯粹主义者),但它确实有一些好主意,可以帮助使事情更加模块化。例如,我想在任何类型的容器上使用一个特别复杂的效果(复杂之处在于涉及多个选择器块和伪元素)。我真的不在乎容器是什么。因此,我创建了一个具有有意义名称的类,它或多或少是自包含的,然后我可以坚持任何我想要的元素,其余的由 CSS 处理。
如果仔细考虑并明智地使用,您可以模块化一些更复杂的样式,而不会在 HTML 中过多地使用有问题的语义类。
将特定于 IE 的样式移动到单独的样式表中,而不是在主工作表中使用 hack
IE hack 丑陋、荒谬(除非阅读文件的人已经记住了它们),并且可能会在浏览器中造成意想不到的副作用。除非有理由必须在主样式表中保留某些内容,否则将它们放在自己的样式表中并使用条件注释可能是个好主意。虽然条件注释在技术上是非标准代码,但它是故意存在的,目的是为了调整 Internet Explorer(以及技术上的非 IE 浏览器)。他们不会很快去任何地方,所以不要害怕使用它们。
这样做还避免了必须设置其他浏览器识别的样式,只是稍后使用某个版本的 IE 无法识别的语法取消设置,反之亦然。是的,它给 IE 用户带来了更多的开销,但是 IE9 和更高版本的用户可能不需要下载任何额外的样式表,所以除非你的流量与谷歌或 Facebook 相媲美,而且大部分来自 IE6 或 7在拨号连接上(即,选择 IE 版本的额外调用成本大于每个浏览器的额外 CSS 成本和您的维护成本),一个额外的调用可能可以忽略不计。
为未来...
他们说一盎司的预防胜过一磅的治疗,尤其是在这种情况下,他们是对的。虽然您当然无法预见一切,但从长远来看,您可以从一开始就做一些事情来让您的生活更轻松。请记住,无论是 CSS 之类的前端代码还是 Java 之类的业务逻辑代码,一些可怜的傻瓜都必须维护它,并且可能不太了解代码(即使那个可怜的傻瓜是你,一两年后路)。因此,查看整个生命周期通常是一个好主意,以确保您不会错过重要的基础改进,这些改进可以从一开始就避免代价高昂的大规模重构。
使用 CSS 预处理器
对于您未来的项目来说,利用 SASS 或 LESS 之类的东西可能是一个好主意,这可以使大型 CSS 更容易维护,原因有很多。一个重要的原因是它允许你嵌套样式,所以而不是
nav {}
nav li {}
nav li a {}
你得到
nav {
li {
a {}
}
}
这自然会更容易地对事物进行分组。此外,您可以在开发时将诸如重置样式之类的内容分离到自己的文件中,然后在将它们投入生产之前组合和缩小所有内容。您还可以创建基本样式(颜色主题、标准装订线宽度等)并将它们存储在变量中以便在整个 CSS 代码中使用,以便将值存储在一个位置,使其更易于维护。
好好看看你的设计方法/选择
你有这么多特定于页面的样式开始有充分的理由吗?如果您在同一个站点(相同的品牌等),通常认为最佳做法是保持一致的外观和感觉。逐页更改边距、填充、字体等可以消除这种一致性。用户可能不会确切知道有什么不同,但他们会知道有些事情发生了,因此即使他们无法确定您的网站,他们也会更少考虑您的网站。
您没有使用重置/标准化机制吗?如果不是,那可能会导致它,因为您发现您的 CSS 主要处理浏览器之间的不一致。将所有内容(或至少某些元素)设置为一个共同的、理智的、开始构建的起点通常是件好事。无论您是通过*{margin:0; padding: 0;}
调用来彻底解决所有问题,还是使用诸如 Normalize.css 之类的选择性东西,还是介于两者之间的某种东西(例如 Eric Meyer 的 CSS 重置),最终都取决于您。但是,使用为不同元素提供一致起点的东西将大大有助于避免无关的 CSS(在这种情况下,用于补偿基本样式之间的细微差异的东西,例如 Chrome 和 Firefox)。
上述问题可以帮助您确定一些维护成本的根本原因,并可能帮助您从长远来看减少它们。