让我们准确定义什么是原子 CSS

Avatar of John Polacek
John Polacek 发布

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

随着原子 CSS(也称为功能性 CSS)越来越受欢迎,一些类似的相关术语也随之出现了一些混淆。本文旨在澄清这些术语。

有一些 其他项目 使用“原子”一词,包括 Brad Frost 的 原子化网页设计。原子 CSS 与这些概念是**完全独立**的。

让我们从定义原子 CSS 开始

原子 CSS 是一种 CSS 架构方法,它偏爱小型、单一用途的类,其名称基于视觉功能。

编写原子 CSS 的方法有很多种(参见下面的变体)。一个例子如下所示

.bgr-blue { 
  background-color: #357edd; 
}

“原子 CSS”一词由 Thierry Koblenz 在他 2013 年 10 月的基础文章 “挑战 CSS 最佳实践” 中创造。

一段时间后,有些人开始将这种方法称为“功能性 CSS”。尽管过去曾有将功能性 CSS 用于描述其他事物的案例,但如今功能性 CSS 和原子 CSS 两个术语可以互换使用。

虽然原子 CSS 一直是源自 Thierry 原创文章的一个开源项目的名称,但该术语本身适用于架构理念,而不是任何一种特定的变体(参见下文)

原子 CSS 的变体

静态

许多人编写原子 CSS 的方式与他们一直以来编写 CSS 的方式非常相似。通常使用预处理器生成一个类库,其中包含定义基于单元的设计系统(用于间距、颜色、排版等)的设置变体。

这种风格的优势在于,由于它很熟悉,因此入门门槛较低,并且那些不熟悉 CSS 的人更容易理解。

编程

编程方法的原子 CSS 涉及使用构建工具根据在 HTML 中找到的内容自动生成样式。

例如,给定以下内容

<!-- Programmatic Atomic CSS Example -->
<div class="Bgc(#0280ae) C(#fff) P(20px)">Lorem ipsum</div>

将生成以下 CSS

.Bgc\(#0280ae\) { background-color: #0280ae; }
.C\(#fff\) { color: #fff; }
.P\(20px\) { padding: 20px; }

这种风格的原子 CSS 使用了带有参数的函数调用的 语法。正如使用 Atomizer 以编程方式生成样式的开源 ACSS 项目 所示,现在无需编写任何 CSS。在构建过程中生成的样式表已完全优化,没有任何未使用的样式。

长手写/短手写

长手写风格偏爱更易读的类名(参见 表达性 CSSSolid),而短手写风格则偏爱简洁性(参见 TachyonsBasscss)。

/* Shorthand Atomic CSS Examples */

.bg-blue { background-color: #357edd; } 
.f1 { font-size: 3rem; }
.ma0 { margin: 0; }

/* Longhand Atomic CSS Examples */

.bgr-blue { background-color: #357edd; }
.background-blue  { background-color: #357edd; }
.backgroundcolor-blue  { background-color: #357edd; }
.text-h1 { font-size: 3rem; }
.text-3rem { font-size: 3rem; }
.text-huge { font-size: 3rem; }
.fontsize-1 { font-size: 3rem; }
.marg-0 { margin: 0; }
.margin-0 { margin: 0; }

/* Programmatic Shorthand */

Bgc(#357edd) { background-color: #357edd; }

/* Programmatic Longhand */

bgrBlue(#357edd) { background-color: #357edd; }
backgroundBlue(#357edd) { background-color: #357edd; }
backgroundColorBlue(#357edd) { background-color: #357edd; }

实用程序类

实用程序类(也称为辅助类)易于理解,是帮助处理常见样式模式的单一功能类(例如 .clearfix、.hidden)。

许多 CSS 架构都依赖于实用程序类(例如网格、间距、排版),但不一定完全遵循原子 CSS 的概念。

不可变 CSS

原子/功能性 CSS 的一个方面是,实用程序类永远不会被修改,从而产生高度可靠的结果。

不变性在原子 CSS 架构的正确执行中起着至关重要的作用。如果没有它,您将面临以下风险

.black {color:navy;}

原子 CSS 旨在将复杂性从样式表转移到 HTML 中。当原子 CSS 项目中发生设计更改时,最好拥有结构良好的 HTML 模板,以便例如,您可以使用编辑工具快速将 Bgc(colorOne) 更改为 Bgc(colorTwo),无论您需要在哪里更改。

断点前缀

此技术是一种允许实用程序类在不同断点覆盖样式的方法,从而使响应式网页设计的实现变得简单高效。

/* Examples of breakpoint prefixing */

.grid-12   /* Full width by default */
.m-grid-6  /* 2 column at medium screen sizes */
.l-grid-4  /* 3 column for large screen sizes */

入门

下面列出了您可以根据自己的喜好选择不同变体开始使用的资源。

此外,以下是一些值得阅读的基础文章

“在现实世界中”

原子 CSS 特别是在那些将其用于快速原型设计以及大型持续前端项目的人群中越来越受欢迎。


感谢 Thierry Koblenz 对本文的反馈以及多年来的辛勤工作!