CSS 缩放:两种极端

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

最近在与 Ben Frain 的 ShopTalk Show 中,CSS 缩放这个话题被多次提及。Ben 对此话题进行了深入思考,甚至写了一本完整的书,名为 Enduring CSS,这本书围绕着完整的 ECSS 方法论展开。

他谈到,对于大规模样式设计,本质上存在两种解决方案

  1. 完全隔离
  2. 完全抽象

完全隔离 是某种在您设置的边界(例如组件)内编写样式的方法,这些样式不会泄漏到外部或内部。

完全抽象 是某种编写全局样式的方法,但这些样式非常通用且可重用,因此不会产生任何意外的副作用。

完全隔离可能来自 .vue 文件中的 <style scoped>CSS 模块(其中 CSS 类选择器和 HTML 类属性是动态生成的无意义字符)、或 CSS-in-JS 项目(例如 glamerous)。即使严格遵守命名约定(例如 BEM)也可以算作一种完全隔离的形式。

完全抽象可能来自像 Tachyons 这样的项目,它为您提供了一组固定的类名用于样式设计(Tailwind 就像它的可配置版本),或一个编程工具(例如 Atomizer),它将特殊命名的 HTML 类属性转换为包含其所需内容的样式表。

问题出在中间地带。它使用了命名方法,但没有严格遵守。它在组件中使用了一些样式,但也使用了一个全局样式表来执行其他随机操作。或者,它让许多开发人员参与到一个没有严格规则的样式系统中,该系统混合了全局样式和作用域样式。任何 不断增长 的样式表都是如此。通过删除一些未使用的样式来解决它并不是真正的解决方案(原因在此)。

请注意,网络是一个很大的地方,并非所有项目都需要缩放解决方案。一个拥有数百名开发人员且需要维护数十年的庞大代码库绝对需要。我的个人网站不需要。我遇到过很多样式问题,但我从未因为这些问题而陷入困境,以至于需要实现像原子 CSS(及类似方案)这样严格的东西来完成工作。在我参与过的任何工作中也都没有遇到过。不过,我看到了它的好处。

想象一下 Twitter.com 十年来的规模!Nicolas 发布了一个很棒的帖子,他在其中比较了 Twitter 的 PWA 和 Twitter 的传统桌面网站。

传统网站的 CSS 是数百人在多年里直接编写 CSS 的结果。特异性冲突、冗余、摇摇欲坠的纸牌屋无法修复。其结果是极其低效且容易出错的样式,给用户和开发人员都带来了困扰。