CSS 代码审查可能是什么样的

Avatar of Geoff Graham
Geoff Graham

DigitalOcean 为您的旅程各个阶段提供云产品。 立即开始使用 价值 200 美元的免费积分!

许多编程语言在部署之前都会经过代码审查。 无论是快速浏览、深入的同行评审还是完整的单元测试,代码审查都有助于我们充满信心地将代码发布到生产环境中。

我开始想象 CSS 代码审查可能是什么样的。 CSS 可以用多种方式编写,最佳方式通常取决于项目。 我当然不是想通过这样的帖子来固执己见,而是为如何在发布之前从 CSS 中获得最大收益奠定基础。

为什么需要对 CSS 进行审查?

人们可能会质疑为什么要对 CSS 进行审查。 审查是又一个需要时间、成本和精力的步骤,这些东西似乎都在阻碍我们发布产品。

与此同时,代码审查让我们能够后退一步,脱下战斗装备,对我们的工作进行诚实的评估,或者将其交给其他人进行新的视角。 这使我们 区别于机器,最终可以让我们免受处理本来可以在发布之前捕获的错误和性能修复的麻烦。

这里的好处远不止预先消除错误。 我发现将审查分解为关注这些好处的特定领域有助于构建对话并优先考虑这些积极的结果。 对您来说,好处可能与我这里列出的不同,但这些是我经常发现自己反复提及的。

区域 0:它能完成工作

我们不要过多地关注这一点,但也不要忘记它。 CSS 的首要任务是为页面设置样式,使其看起来像预期的那样。 它与设计师的模型匹配或符合样式指南,或执行它应该做的任何事情。 它可以处理可变内容(不同长度的标题和内容、不同大小的图像等)。 如果不能,则需要首先修复它。

如果设计是响应式的,请确保设计按预期在每个断点流畅地运行。

区域 1:样式和一致性

这里的目标是确保 CSS 写得很好、组织良好且有文档。 我们中那些继承了其他开发人员项目的人知道这里的好处。 使用一致的命名约定并包含完整文档的代码更容易理解,并为将来如何维护和增强代码提供说明。

要问的问题

  • 此项目是否有可用的 CSS 样式指南? 如果有,代码是否遵循它?
  • 代码是否经过了彻底的文档记录? 是否存在令人困惑的元素、属性或黑客,会阻止其他开发人员了解为什么某些东西以这种方式编写?
  • 元素的命名方式或属性的组织方式是否存在明显的差异?

可用资源

  • CSS Lint用于查找错误或不一致的优秀工具。 它甚至可以作为 GruntGulp 任务,可以配置为根据您自己的规则集进行检查。
  • CSS 样式指南样式指南示例的汇总,可作为创建您自己的样式指南的灵感来源。
  • 什么是好的文档?Dave DeSandro 深入浅出地介绍了文档与营销的关系。

区域 2:浏览器兼容性

一旦 CSS 组织良好且一致,我倾向于将注意力转向它在不同浏览器和设备上的外观。 写得好的代码是一回事,但如果它不能在它应该的地方和时间工作,那就毫无价值。

要问的问题

  • 此项目支持哪些浏览器和设备? 我们是否有权访问它们进行测试?
  • 此网站是否有分析数据? 如果有,它们是否能让我们了解哪些浏览器更重要,需要优先测试?
  • 是否存在针对特定浏览器或设备的“黑客”? 如果有,是否有其他方法可以避免使用它们? 它们是否经过了良好的文档记录?

可用资源

  • Can I Use一个中央存储库,用于参考哪些 CSS 属性与任何浏览器和版本兼容。
  • Ghostlab一个用于跨多个设备同步浏览器测试的应用程序。
  • OpenDeviceLab.com一个交互式地图,用于查找附近的设备实验室以进行测试。
  • 建立一个开放式设备实验室Smashing Magazine 深入探讨了设备实验室的好处以及如何建立一个设备实验室的技巧。
  • 支持与优化Brad Frost 精妙地阐述了这两者的区别以及它们如何影响代码的编写方式。
  • 跨浏览器测试服务Cross Browser TestingBrowserstack.

区域 3:特异性

现在是衡量代码中元素的具体程度以及确定是否有重构机会的时候了。 这将创建一个负责任的样式级联,其中元素要么像我们想要的那样模块化,要么像我们想要的那样具体。

要问的问题

  • 任何地方都使用过 ID 吗? 如果是这样,是否可以使用类名代替? 样式指南对此有何说法?
  • !important 是否出现在代码中? 如果是这样,为什么使用它? 代码是否可以重构以避免使用它?
  • 我们是否依赖于前缀,如果是,前缀是否以一种有条理的方式进行组织,以便为不支持的浏览器提供适当的默认值?
  • 元素的模块化程度如何? 它们是否通过“所有元素”测试,即它们都在同一个 HTML 文档中一起使用?

可用资源

区域 4:预处理器使用

如果项目没有使用预处理器,请忽略这一点。 但如果使用了,那么肯定还有一些额外的需要考虑的东西。

要问的问题

  • 是否在应该使用的地方使用了现有的变量? 是否引入了新的变量? 如果是这样,它们是否有意义,是否经过了文档记录?
  • 是否有效地使用了其他抽象(例如扩展、mixin、循环、映射等)? 它们是否符合代码的其他部分的执行方式?
  • 新的 CSS 是否放置在正确的部分中? 是否使用了新的部分? 它们在架构上是否有意义?
  • 它们是否遵循任何既定的预处理器特定样式指南?

可用资源

区域 5:性能

我在审查的最后部分加入性能,不是为了贬低它,而是为了确保它是我们审查圣代的点睛之笔。 高性能 CSS 通常是关于优化以及如何打包和提供服务的,因此将其作为审查过程的收尾似乎很合适,即使在工作过程中我们始终将性能放在心上。

要问的问题

  • 最终的 CSS 文件大小是多少?我们是否计划进行压缩和 gzip 压缩(是的,请!),以及压缩后的文件大小差异是多少?
  • 我们正在加载多少个不同的样式表(通过 `<link>` 或原生 `@import`)?我们可以减少数量吗?它们可以根据条件提供吗?异步?
  • 我们在生产环境中缓存 CSS,对吧?

可用资源

  • CSS Stats 输入网站的 URL,并获得大量返回的统计数据,包括对所有使用的字体和颜色的报告。
  • CSS Dig 与 CSS Stats 非常类似,但打包为方便的 Chrome 浏览器扩展。
  • unCSS 通过将 CSS 与 HTML 和 JavaScript 标记进行比较,删除未使用的 CSS 的任务运行器。可用于 Grunt、Gulp 和 Broccoli。
  • Critical CSS 另一个任务运行器,但它基于给定页面的 HTML 标记创建单独的 CSS 文件。这种优化一直受到 Google PageSpeed Insights 的推荐。
  • loadCSS: 用于异步加载 CSS 的函数

总结

我绝对不会说这里提到的每个问题和工具都是所有项目所需要的,甚至相关。实际上,可能还有更多问题和工具需要考虑。在发布 CSS 之前,你是否会定期提出一些问题?例如,可访问性对你来说应该放在哪里?请分享!

另外,请记住,审核我们的代码的目的是不是让它完美。出于多种原因(无论是有意还是无意),我们在 CSS 中做出了妥协,最终,尽力做好 就足够了,这也是其中的一部分努力。