随着 CSS 3 的普遍应用,不少新的 CSS 属性层出不穷,有不少陌生的 CSS 属性出现,因此常常须要去学习新的 CSS 属性。新的属性每每介绍文章很少,因此有时候就须要去看看官方文档,此时会发现官方文档有好几个版本,看下图:css
当初学 flex-box 的时候就发现有好多种写法,还好官方文档开头有标明那些文档时最新的。不过此时我萌生了去了解 CSS 标准流程的想法,我想做为一个合格的 CSSER 也应该去了解吧。这里讲到的知识基原本自 CSS-tricks 上 CHRIS COYIER 的一篇文章:https://css-tricks.com/css-standards-process/ 。html
CSS 的标准化流程由 W3C Cascading Style Sheets Working Group (CSSWG)——W3C层叠样式列表小组,由浏览器商,大学,大公司(google,IBM等),以及独立CSS专家组成。W3C 自己并不制定标准,而是做为一个论坛式的平台,接收来自小组成员的提交,并经过会议来商讨制定标准,全部的提交以及讨论都是公开透明的,能够在 W3C 网站上看到会议的记录,标准肯定通常有6个阶段,其中两个是过渡阶段:css3
1. 编辑草案 Editor's Draft (ED)git
这个是规范的开始阶段,一个CSS属性或者选择器被提出来,并在CSSWG内部研究。若是小组成员赞成这个属性能够正式推出,它就能进入下一阶段。github
二、工做草案 Working Draft (WD)web
编辑草案后是工做草案,标准的设计阶段。小组反复处理来自 CSSWG 内部和来自小组外部的反馈,这个阶段有两个结果:一是可能会由于技术困难或者可能会引发其余问题而使新属性被彻底拒绝;二是规范会经过这个阶段,并会做为第一次公开工做草案( First Public Working Draft (FPWD))发布,后面还会有数个工做草案,会处理来自 CSSWG 内部和小组外部更普遍社会的反馈。浏览器
三、过渡-最后通告工做草案 Transition – Last Call Working Draft (LCWD)学习
这是第一个过渡阶段,当规范开始考虑从工做草案进入到下一个阶段时,将会对新属性的一些小改动的反馈设置一个截止日期,LCWD 便是日期截至后最后的一次公开草案处理。测试
注:最重要的阶段是 ED, WD, and CR(下面会讲到的),其余阶段不是很重要。flex
4. 候选推荐标准 Candidate Recommendation (CR)
规范会在这个阶段经过完整的测试,测试人员来自 CSSWG 以及被选为实现这个规范的浏览器生产商(Chrome, Safari, Firefox, Opera, 等等)。为了继续进入下一阶段,CSSWG 会推出两个正确的实现规范。
5. 过渡-建议推荐标准 Transition – Proposed Recommendations (PR)
当到达这个阶段,W3C全球资源小组:W3C咨询委员会(W3C Advisory Committee),决定这个规范是否会继续进入下一个阶段。这个阶段通常不多有异议出现,因此也是一个过渡阶段而已。
6.推荐标准 Recommendation (REC)
若是规范到达这个阶段,说明规范已经考虑完备并可让浏览器商实现,W3C 和 CSSWG 对这个规范的讨论处理再也不活跃,只作一些必要的维护。
注:推荐标准阶段其实不是一个理想的状态,而是一个规范的坟墓,浏览器并不会等到这个阶段才去实现它,而是在 CR 阶段就会实现这个规范。为何说是坟墓呢,由于到达 REC 阶段后,规范会止步不前,而不是变得稳定。由于在 REC 阶段 CSSWG 并不会投入精力去修复新出现的错误,因此错误会不断积累,而新版本的规范已经在开发了,老的规范已经失去了继续发展的活力以及意义,留下的问题就只能经过 hack 去弥补,同时会有新的属性去代替它实现更好的功能。
那何时规范才是稳定的呢?文章中有引述了 Tab Atkins Jr (google团队成员,也是 CSSWG 以及 W3C 的成员)的一段话,内容大概是:规范的稳定性基本和它所在的流程阶段没有关系。当规范特性已经开始传播开来,并由于向后兼容性不能改变时,它才是稳定的,这个阶段可能会在 ED 规范阶段或者 CR 阶段,这才是稳定性评判的正确方法,而不是 W3C 的标准发布流程。说到这里,做者也提到了怎样根据 CSS 新属性的稳定性状况去使用它,避免跳坑,其实就是可以实现渐进加强与优雅降级。这里不得不提到一个有名的网站 http://caniuse.com 估计这个网站大多数人都会用到了,简直是 CSSER 的福音啊,经过这个网站,当键入某个属性时,能够在下面的resources标签很快速地找到它的官方文档以及不少最新的学习文章,同时了解到到一些现有的使用问题(issues)。举个例子,好比键入flex时,下面有这样的标签:
里面有来自css-trick、github等著名网站的文章,不少都是比较新,而且写得很好的文章。
这里还有个小常识,就是关于 CSS 3 的这个命名,Tab Atkins Jr 在文章 A Word About CSS4 表明 CSSWG 作了阐述,主要内容就是 CSS 3 表明了 CSS 2.1 后新增的 CSS属性,并且不会有 CSS4 这样的东西出现。下面是我看完后结合文章内容以及本身的一些理解,不想看原文的能够稍微了解一下。可能理解不是很到位,不过应该不会偏颇太多:CSSWG 想结束 CSS 2.1 这个版本时,发现 “versions”(版本)这个东西很差用,由于一旦使用版原本发布 CSS 时,CSS 变得很难维护,发展也会变慢。结合上面 CSS 的标准发布流程以及如今 CSS 的使用状况,不难想到确实是这样。由于 CSS 的总体性不强,CSS 属性都是为了实现某个效果单独被提出并反馈,和其余提出的属性并无什么交集;有的属性一直在用不须要什么新的更新,而有的属性可能很快要被淘汰,因此以一整个版本去发布 CSS 很不科学。基于这样的想法,CSSWG 决定把 CSS 分红不少独立的小模块,每一个模块只包含一个主要的特性(feature),能够本身单独升级开发,为何要分红小的只包含少数特性的模块呢?这样就不会由于一个模块包含太多特性,而后由于某个特性特别棘手很差解决而阻碍整个模块其余特性的发展升级。由于这个想法是在结束 CSS 2.1 版本的时候决定的,那么如今 CSS 就要以模块来整理一下,也要相应定一些等级(level)。规则是这样的:
一、若是模块在 CSS 2.1 就有相关的内容,那么这些模块就从 level 3 开始。
二、若是是彻底新的属性(好比 Flexbox),就直接从 level 1 开始。
三、一个模块的级别和它所在 CSS 的版本无关,即无论它是 CSS 2.1 的内容仍是彻底新的属性。由于模块的概念是新提出来的,因此只要是模块,就都属于 CSS 3(或者也能够说都是 CSS),无论它们处于什么模块等级。
四、可能会看到相似 css4-backgrounds 这样的写法,其实表明的是 CSS Background & Borders Level 4,即4表示的是模块的等级。
后来发现大漠前辈也写了相关文章,内容更全面,讲到了浏览器前缀的问题。我也参考了一下,你们能够点下面的参考连接去看看。
本文来源:JuFoFu
本文地址:http://www.cnblogs.com/JuFoFu/p/5140302.html
本文参考:
Tab Atkins Jr. http://www.xanthir.com/b4Ko0#nav
CHRIS COYIER . https://css-tricks.com/css-standards-process/
大漠 . CSS秘密花园:Web 标准是友是敌?
水平有限,错误欢迎指正。原创博文,转载请注明出处。