以下是来自瑞典的 Web 开发人员 Sebastian Ekström (@seb_ekstrom) 的客座文章。我对此很感兴趣,因为我们经常在这里讨论 CSS,但从未讨论过 CSS 是如何产生的。CSS 只是一个由像你我这样的开发者发明的语法,试图解决问题。这是一个极其复杂的事情,涉及:易用性、向后兼容性、浏览器以令人满意的速度实现的能力、用例覆盖、尝试预测未来需要什么以及事物如何使用,等等。众所周知,错误的选择会造成伤害,并且会持续很长时间。这就是为什么存在这个流程的原因。以下是 Sebastian 对此流程的介绍。在发布之前,我请 Tab Atkins 审查并发表评论。
新的 CSS 属性是如何被标准化的?谁做决定?我为什么要关心标准化流程?航空餐有什么问题?我将在本文中介绍这些问题,以及更多内容。
背景
CSS 的标准化由 W3C 层叠样式表工作组 (CSSWG) 管理,该工作组目前由来自浏览器供应商、大学、大型公司和独立 CSS 专家组成的 98 名成员 组成。该小组由 Peter Linss 和 Daniel 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)
这是规范经过彻底测试的阶段,由 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 流程中的阶段。
结束语
所以,如果你要使用一些新的前沿特性,请检查该规范处于哪个阶段。工作草案?我会谨慎对待。候选推荐?我说可以尝试,但要留意变化。
如有疑问,我建议你问问自己这个问题:“如果这个不起作用,事情会崩溃吗?”
如果某个已实现的功能由于语法更改而停止工作,功能或可用性会受到损害吗?如果你的按钮不再具有圆角,这不是世界末日。但如果你的新网站完全基于一个新的布局系统,并且语法发生了变化,那么你将遇到一些麻烦。
是否有简单的方法查看属性、它们所处的过渡状态以及任何正在使用的重要更改?
表格会很棒,但我认为这不容易。(
这个有点你想要的。除此之外,你必须查看属性规范。
我发现这个网站非常有用。
你的链接文本在这里…
提供了CSS3、HTML5、SVG等的状态。列出它们是发布候选版本还是工作草案,并在主要桌面和移动浏览器中提供支持表格。
我想知道为什么所谓的“CSS快照”,它被标记为“最新稳定版CSS”并且包含类似CSS正式定义的内容,只有“组注释”状态(据我所知,这意味着该文档不仅仅是一个失效的规范,而根本不是一个规范),并且几乎3年没有更新。我认为如果该文档能够随时反映CSS的实际状态,在一个地方提供易于访问的实现就绪和生产就绪规范列表,并通过“活文档”模型持续更新,那将会很好。
我们从哪里可以了解到处于工作草案阶段的新CSS属性?
嗨,Chris,你带我们来到了起源(万物的开始)。了解这些事实非常重要,就像你所说的“如果这个不起作用,事情会崩溃吗?”我只是好奇未来10年整个网络会是什么样子。我是否可以将此发布在我的博客咨询网站上,让我的读者和学习者了解其起源?
你可以在自己的网站上完整地重新发布这篇文章吗?你可以,但这有点粗鲁。你可以从你的博客链接到它吗?当然,你不需要我的许可。我还删除了你评论中“博客咨询网站”的重复链接。这也会让人觉得有点粗鲁和SEO垃圾邮件。只是一些关于你的博客咨询业务的建议。
我在文章中没有看到,但应该注意的是,CCSWG有一个公开的邮件列表,任何人都可以订阅*(如果愿意,也可以参与)。
* 在我看来,这绝对值得;但请注意,每月大约有600到1000封邮件。
Tab说推荐是“失效的”是一种观点。修改推荐确实很困难,但这就是想法。它成为一个稳定的参考,不像候选推荐可能会在开发者脚下发生变化,当有人证明其中的某些内容在实践中不起作用时。
具体来说,除了确定需要更改的内容的工作之外,还需要发布几个草案,准备草案至少需要一个小时。通常,该小组还需要说服W3C主管需要编辑该推荐,这通常需要30到60分钟的会议。
但通常的做法是生成下一个版本,其中将包含更多功能。如果它以使现有推荐失效的方式更改了某些内容,那么同时生成该推荐的编辑版本是最佳实践。
(如果你真的对W3C流程很感兴趣,请注意他们正在考虑稍微更改一些细节,并且讨论对公众开放,可以通过W3Process社区小组阅读和积极参与)
谢谢,这很有用,看到谁在做决定也很有趣。在实施任何功能之前检查新功能处于什么状态是个好主意,我以后会这么做! :)