當初學 flex-box 的時候就發現有好多種寫法,還好官方文檔開頭有標明那些文檔時最新的。不過此時我萌生了去了解 CSS 標準流程的想法,我想作為一個合格的 CSSER 也應該去了解吧。這里講到的知識基本來自 CSS-tricks 上 CHRIS COYIER 的一篇文章: https://css-tricks.com/css-standards-process/ 。
CSS 的標準化流程由 W3C Cascading Style Sheets Working Group (CSSWG)——W3C層疊樣式列表小組,由瀏覽器商,大學,大公司(google,IBM等),以及獨立CSS專家組成。W3C 本身并不制定標準,而是作為一個論壇式的平臺,接收來自小組成員的提交,并通過會議來商討制定標準,所有的提交以及討論都是公開透明的,可以在 W3C 網站上看到會議的記錄,標準確定一般有6個階段,其中兩個是過渡階段:
這個是規范的開始階段,一個CSS屬性或者選擇器被提出來,并在CSSWG內部研究。如果小組成員同意這個屬性可以正式推出,它就能進入下一階段。
編輯草案后是工作草案,標準的設計階段。小組反復處理來自 CSSWG 內部和來自小組外部的反饋,這個階段有兩個結果:一是可能會因為技術困難或者可能會引起其他問題而使新屬性被完全拒絕;二是規范會通過這個階段,并會作為第一次公開工作草案( First Public Working Draft (FPWD))發布,后面還會有數個工作草案,會處理來自 CSSWG 內部和小組外部更廣泛社會的反饋。
3、過渡-最后通告工作草案 Transition – Last Call Working Draft (LCWD)
這是第一個過渡階段,當規范開始考慮從工作草案進入到下一個階段時,將會對新屬性的一些小改動的反饋設置一個截止日期,LCWD 即是日期截至后最后的一次公開草案處理。
注:最重要的階段是 ED, WD, and CR(下面會講到的),其他階段不是很重要。
規范會在這個階段通過完整的測試,測試人員來自 CSSWG 以及被選為實現這個規范的瀏覽器生產商(Chrome, Safari, Firefox, Opera, 等等)。為了繼續進入下一階段,CSSWG 會推出兩個正確的實現規范。
當到達這個階段,W3C全球資源小組:W3C咨詢委員會(W3C Advisory Committee),決定這個規范是否會繼續進入下一個階段。這個階段一般很少有異議出現,所以也是一個過渡階段而已。
如果規范到達這個階段,說明規范已經考慮完備并可以讓瀏覽器商實現,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)。規則是這樣的:
1、如果模塊在 CSS 2.1 就有相關的內容,那么這些模塊就從 level 3 開始。
2、如果是完全新的屬性(比如 Flexbox),就直接從 level 1 開始。
3、一個模塊的級別和它所在 CSS 的版本無關,即不管它是 CSS 2.1 的內容還是完全新的屬性。因為模塊的概念是新提出來的,所以只要是模塊,就都屬于 CSS 3(或者也可以說都是 CSS),不管它們處于什么模塊等級。
4、可能會看到類似 css4-backgrounds 這樣的寫法,其實代表的是 CSS Background & Borders Level 4,即4表示的是模塊的等級。
后來發現大漠前輩也寫了相關文章,內容更全面,講到了瀏覽器前綴的問題。我也參考了一下,大家可以點下面的參考鏈接去看看。
本文參考:
Tab Atkins Jr. http://www.xanthir.com/b4Ko0#nav
CHRIS COYIER . https://css-tricks.com/css-standards-process/
大漠 . CSS秘密花園:Web 標準是友是敵?
水平有限,錯誤歡迎指正。原創博文,轉載請注明出處。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com