CSS 标准化流程

Avatar of Chris Coyier
Chris Coyier 发布

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

以下是来自瑞典的 Web 开发人员 Sebastian Ekström (@seb_ekstrom) 的客座文章。我对此很感兴趣,因为我们经常在这里讨论 CSS,但从未讨论过 CSS 是如何产生的。CSS 只是一个由像你我这样的开发者发明的语法,试图解决问题。这是一个极其复杂的事情,涉及:易用性、向后兼容性、浏览器以令人满意的速度实现的能力、用例覆盖、尝试预测未来需要什么以及事物如何使用,等等。众所周知,错误的选择会造成伤害,并且会持续很长时间。这就是为什么存在这个流程的原因。以下是 Sebastian 对此流程的介绍。在发布之前,我请 Tab Atkins 审查并发表评论。

新的 CSS 属性是如何被标准化的?谁做决定?我为什么要关心标准化流程?航空餐有什么问题?我将在本文中介绍这些问题,以及更多内容。

背景

CSS 的标准化由 W3C 层叠样式表工作组 (CSSWG) 管理,该工作组目前由来自浏览器供应商、大学、大型公司和独立 CSS 专家组成的 98 名成员 组成。该小组由 Peter LinssDaniel Glazman 组织,他们 协调 CSSWG 的会议,并确保讨论的相关性和推进。

CSSWG 中的沟通和决策以 不同的方式 进行。关于规范的讨论通过电子邮件和电话会议持续进行,他们每年还会举行线下会议。

决策基于 共识。讨论持续进行,直到所有成员就该主题达成一致,之后才能对创建新规范做出最终决定。
标准化流程通常包括 六个阶段,其中两个是过渡阶段。

1. 编辑草案 (ED)

示例: 颜色 (级别 4)

这是规范的起始阶段。一个新的 CSS 属性或选择器的想法正在被指定,并且正在由 CSSWG 内部进行开发。在这个阶段,规范可能会发生很多变化。如果小组同意应该正式发布它,则继续执行下一步。

编辑注:CSS 模块以不同的级别出现。“CSS3”几乎不存在,它只是“2.1 之后的所有内容”。CSS4 并不存在。从这里开始,模块将具有级别,并且将独立于其他模块通过此流程移动。

2. 工作草案 (WD)

示例: 动画

在编辑草案之后是工作草案,这是标准化的设计阶段。该小组迭代地使用规范,并接收来自内部和外部的反馈。此阶段的结果要么是规范因技术困难或其他可能出现的问题而被完全拒绝。另一方面,如果规范通过了此阶段,则将其发布为第一个公开工作草案 (FPWD)。规范的粗略版本,表明 CSSWG 将继续对其进行开发。

3. 过渡 – 最终征求意见工作草案 (LCWD)

示例: 文本

这是第一个过渡阶段。当规范被认为已准备好从工作草案过渡到下一阶段时,将设定一个截止日期,以便收集任何最后可能的反馈,以进行微调。

编辑注:Tab 告诉我这些过渡阶段(另请参见第 5 部分)相当微不足道。主要的重点阶段是 ED、WD 和 CR。

4. 候选推荐 (CR)

示例: 背景和边框Flexbox

这是规范经过彻底测试的阶段,由 CSSWG 和选择实施此规范的浏览器供应商(Chrome、Safari、Firefox、Opera 等)进行测试。这通常发生在规范达到此阶段时。为了继续下一阶段,CSSWG 必须证明规范有两个正确的实现。

5. 过渡 – 提议推荐 (PR)

示例:目前没有模块处于 PR 阶段

当达到此阶段时,W3C 咨询委员会(作为 W3C 的全球咨询小组)将决定规范是否应继续到最后阶段。

6. 推荐 (REC)

示例: 颜色

如果规范达到此步骤,则认为它已完成并可以供浏览器供应商实施。W3C 和 CSSWG 不再积极参与规范,仅在需要时对其进行少量维护工作。

编辑注:事实证明,推荐状态更像是坟墓而不是理想状态。浏览器在候选推荐阶段进行实施。Tab Atkins 做了如下澄清

当规范达到 REC 时,它实际上已经 **死亡** 了,而不是稳定。错误可能已经累积,并且尚未修复,因为更新 REC 非常麻烦。规范的新版本可能已经在开发中,功能本身可能已经失效,等等。

我为什么要关心?

你为什么要关心标准化流程?我认为了解规范在不同阶段的行为方式以及过早使用它们可能带来的后果非常重要。

我们都记得当无法就语法达成一致时,渐变 属性是如何搞砸事情的。这是 2011 年初规范处于工作草案阶段时的 旧语法

background-image: -webkit-gradient(linear, 0 100%, 0 0, from(fuchsia), to(yellow));

查看 sebastianekstrom 在 CodePen 上创建的笔 iKmjh (@sebastianekstrom)

后来,当规范达到候选推荐阶段时,语法更改为以下内容

background-image: -webkit-linear-gradient(fuchsia, yellow);
background-image: linear-gradient(fuchsia, yellow);

产生了完全不同的结果

查看 sebastianekstrom 在 CodePen 上创建的笔 gJCzd (@sebastianekstrom)

编辑注:功能的稳定性实际上与它处于标准化流程的哪个阶段没有太大关系。Tab Atkins 这样说道

稳定性与流程阶段基本上没有关系,至少在候选推荐之前是这样。当某个功能发布并且由于向后兼容性而无法再更改时,它就变得稳定了。这可能发生在编辑草案规范中的某个功能上。并且一些候选推荐具有未实现(因此不稳定)的功能。这是衡量稳定性的正确标准,而不是它在 W3C 流程中的阶段。

结束语

所以,如果你要使用一些新的前沿特性,请检查该规范处于哪个阶段。工作草案?我会谨慎对待。候选推荐?我说可以尝试,但要留意变化。

如有疑问,我建议你问问自己这个问题:“如果这个不起作用,事情会崩溃吗?”

如果某个已实现的功能由于语法更改而停止工作,功能或可用性会受到损害吗?如果你的按钮不再具有圆角,这不是世界末日。但如果你的新网站完全基于一个新的布局系统,并且语法发生了变化,那么你将遇到一些麻烦。