CSS生日快樂:CSS之父H?kon Wium Lie訪談錄
英文原文:CSS: It was twenty years ago today — an interview with H?kon Wium Lie
20 年前的今天(10 月 10 日),Opera CTO H?kon Wium Lie 發布 Cascading HTML style sheets – a
proposal。假如 Paul McCartney 是一名 Web 開發者,并在今天寫下《Sergeant Pepper's Lonely Hearts Club Band》,那他一定會這樣寫:
It was twenty years ago todayThat H?kon wrote a doc to say
That if the Web's gonna last a while
Then we need a way to define style.
So may I introduce to you
a way to add visual treats:
It's Sergeant H?kon's Cascading Style Sheets!
不過,當我們找到 Paul 家,請他為我們唱這首歌的時候,他卻拒絕了,而且放出了他的看門狗FontTag
和Bgcolor
。那還是算了,為紀念這個好日子,Bruce 面對面向H?kon 提了一些問題,關于 CSS 的過去、現在和未來。
CSS 的構想誕生于 20 年前。你對自己這個寶貝、孩子、小青年的成長感到滿意嗎?
當然,我對 CSS 的發展非常滿意。CSS 是 Web 規范的一塊基石,有了 CSS 網頁漂亮多了。HTML 依舊生機勃勃就是 CSS 成功的明證。不過就像一個年青人一樣,它還是有很大的上升空間。
你說過自己建議 CSS 是“要拯救 HTML”,為什么這么說?
如果沒有 CSS,那么 HTML 恐怕會與今天大不相同。有桌面出版背景的作者認為它沒有<color>
和<font>
標簽,很不習慣。當然也包括我自己。我自己發布的第一個網頁就使用了帶有文本內容的圖片, 歷史存檔在這里。 如果按照這個思路繼續發展下去,Web 就會變成一臺巨型傳真機,文本圖片可以傳來傳去。但對視障用戶或者搜索引擎而言,這就很討厭了。我建議 CSS 就是想阻止這種發展勢頭,同時為作者提供一種表達自己設計意圖又不必增加新 HTML 標簽的方式。
在第一稿建議中,有一個影響百分比說明符,像h1.font.size = 24pt 100%
,就是這樣描述的:
該行末尾的百分比表示要求的影響程度(這里是 100%)。如果它在一個初始樣式表(如用戶控制的樣式表)里面,則這個要求可以滿足,比如用 Helvetica 來顯示所有標題元素。如果這個語句來自后來的樣式表,則保證滿足未聲明影響的樣式。
為什么又拋棄了?
這種辦法是想把作者和用戶的要求與偏好組合到一起,是受了 MIT Media Lab 的一個思路的啟發,他們認為未來電視可能不會提供亮度和色彩的控制,而是會控制色情和暴力,或者左派、右派之類的。我的 CSS
建議是想著有一把滑尺,作者對滑尺的一端有完全控制力,而用戶則對另一端有完全控制力。在滑尺中間,瀏覽器又可以混入一些要求,從而讓所有人都能接受。這
個辦法對有的屬性管用(如font-size
),但對另一些屬性(如font-family
)則不行。Bert 在對第一稿的回復中 批評了這個思路:
我覺得把兩種設計方案折中成一個中性樣式表的思路是錯誤的。如果我要求藍黃,而別人要求黃藍,那怎么辦?結果難道是綠綠嗎?誰希望看到標題很新潮,而正文卻使用 Helvetica?
我回復道:
有些屬性可以混合,有些不行。“加權平均數”的典型應用是弱化作者的個性化傾向,比如建議的字號大小,而用戶仍然可以對此有所控制。當然不一定非要使用這個功能,盡管“100%”等于二進制的“1”,但在二進制里反過來則不行。我認為計算機接口的二進制有點過。
當然,Bert 是對的(通常他都是對的),那樣的話不僅不解決問題還會制造新問題,所以我就拋棄了混合的思路。
上面使用的是 JS 風格的點語法。后來為什么又改了?
你管它叫 JS 風格的語法,這很有意思。我在提出 CSS 建議的時候,JavaScript 還不存在呢,所以我不可能借鑒它的語法。實際上這個寫法借鑒了 X11 Window System 中的 X資源,那是 MIT 的又一個令人激動的項目。
之所以 CSS 語法由font.size
改成font-size
,有兩個想法。首先,連字符讓屬性更像書面英語,讓人覺得親切易懂。其次, DSSSL 和 DSSSL-Lite 就使用這種連字符屬性名。編寫過 DSSSL-Lite 第一稿的 James Clark 參加了 W3C 關于樣式表的第一次研討會,Bert 和我就從 DSSSL 中借鑒了連字符。說到不方便,就是連字符在數學里表示減號,有時候會給解析器制造點麻煩。
Bert Bos 是怎么參與進來的,你們倆怎么分工?
Bert Bos 審閱了我的建議初稿。他的背景和興趣跟我有點不一樣,但在他寫完了 他的建議后,我們很快意識到我倆的建議可以整合成一個。那時候,CERN 不再支持 Web 項目,而 W3C 成立了。于是我就在 INRIA 組建了 W3C 的歐洲分支,立刻聘用了 Bert。CSS1 的大部分內容都是 1995 年 7 月我們在索菲亞安替城(Sophia-Antipolis )用白板討論出來的。Bert 直到現在還在索菲亞安替城的 W3C 上班。每當我遇到棘手的技術難題,都會想起 Bert 和那塊白板。
說到對 CSS 做出過貢獻的人,我不能不提 Thomas Reardon 和 Chris Wilson,他們都是微軟的。Thomas 是 IE(Internet Explorer)的項目經理,他很早就想到了為 Web 引入樣式表。Chris Wilson 是負責把 CSS 加入 IE3 的程序員。IE3 的實現很不標準,但別忘了它是在 CSS1 制定完成前發布的。Simon Daniels(也是微軟的)用 IE3 寫了一些叫人過目不忘的演示。他們的工作表明了一家大軟件公司在支持剛剛誕生的標準。
有其他競爭性的建議嗎?為什么你們的比別的好?
樣式表語言的建議大概有十來個吧。不過,這些建議并不都適合 Web。比如,瀏覽器會漸進地渲染并顯示文檔,那就必須處理找不到樣式表的情況。能上網的設備也不少,需要能夠為不同的設備編寫樣式表。因此,樣式表語言 必須能表達可伸縮且適應性強的設計。這是一個令人神往的研究領域,我為此還寫過 一篇博士論文,其中比較了不同的樣式表建議的手段。
當然,你的第二個小問題,我肯定就比較主觀了。但我相信 CSS 確實具有幾個顯著的特性,特別適合在 Web 上使用:層疊、偽類和偽元素、向前兼容的解析規則、支持不同的媒體類型、重點突出選擇符,還有特別棒的 em 單位。
你(和 Bert)犯過最大的錯誤是什么?
我的博士論文專有一章說明 CSS 的問題。確實有問題,甚至有些都是自找的。但 CSS1 遇到過的最大的問題并非其設計(設計還是相當好的,我覺得),而是最初的實現。Jeffrey Zeldman 曾提到這個情況:
如果 Netscape 3 忽略應用到<body>
元素的 CSS 規則,并隨意為頁面中的每個結構化元素都添加一些空白,如果 IE4 能正確處理<body>
但填充卻很拙劣,那怎么寫 CSS 才能放心?有些開發者為此根本就不會寫 CSS。有人寫了一個樣式表來補償 IE4 的缺陷,寫了另一個樣式表糾正 Netscape 4 的錯誤。
微軟和網景(Netscape )在這個問題上都有責任,而我們——我、Bert、W3C——如果能依照 CSS1 規范拿出一套測試也可以避免很多問題。第一個真正的 CSS 測試是 1998 年 10 月份才出現的,那就是 Todd Fahrner 發布的 Acid 測試。那個測試很有創意、一目了然,讓開發者馬上就知道自己是否通過了測試。一開始,沒有一款瀏覽器能通過測試。但自從有了這個測試,加上 CSS 社區的強力推動,事情開始有了轉機。 WaSP 在推動標準化的進程中扮演了重要角色。Opera 瀏覽器也起到了重要作用,它向世人展示 CSS 實際上是可以正確實現的。在了解到 Opera 的 CSS 實現非常徹底(比微軟和網景都強太多)之后,我加入了 Opera。
我在加入之前,Opera 就以其瀏覽器能裝進一張軟盤(1.44 MB)而著稱。“裝進一張軟盤”在當時是個很厲害的標志。添加對 CSS 的支持之后,瀏覽器有點“發福”,Opera 不能再那么宣傳了。“幾乎可以裝進一張軟盤”聽起來可沒原來那么牛。
最初的 Acid 測試之后又出現了 Acid2 和 Acid3,背后的邏輯都一樣:一個可視化的高要求的網頁,用于測試各種 CSS 特性。Acid2 的推出是受到 比爾·蓋茨一封公開信的 激發,那封信贊美了互操作性。讓 IE7 遵循 CSS 標準看起來就是自然而然的了,隨后微軟就受到了 Acid2 的挑戰。公平地講,其他瀏覽器也有問題,Acid2 讓它們暴露了很多 bug。微軟的 IE7 對 Acid2 視而不見,但隨后的 IE8 卻完美地通過了測試,挺神奇的。現在的瀏覽器也都能了。
為什么你決定在盒模型中使用外邊距、內邊距、邊框聲明寬度,而沒有使用 IE5 的box-sizing: border-box
盒模型?
這兩種盒模型都有相應的用武之地。如果你想拉伸一張圖片以填充整個內容盒子,那么就要使用最初 CSS
的盒模型。如果你認為內邊距和邊框不應該擴展到某個區域之外,那 IE5 的盒模型更合適。個人認為,CSS
盒模型的用途更廣一些,可一些我很敬重人都不這么認為。這個沖突現在已經通過增加對box-sizing
屬性的支持得到了很好的解決。
我一直非常不喜歡絕對定位。是我的問題嗎?規范中怎么會加入這個特性呢?
你這個問題讓我想起了 1996 年的一些激烈的爭論。簡單地說,就是微軟在一個叫做 CSS Regions: Absolute Positioning and Z-Ordering 的草案中提出了絕對定位這個特性(沒記錯的話,當時的討論僅限于 W3C 成員的郵件列表;最接近的公開文檔是 WD-positioning)。有些新成立的 CSS 工作組成員持保留意見,Bert 和我寫了 一個簡單的反對案。我們提議刪掉position
屬性(用display
代替),只描述相對定位(從而有時間好好討論絕對定位)。但微軟已經實現了自己的建議,不情愿刪掉這個功能。最終,唯一重要的變化就是添加了right
和bottom
屬性(平衡left
和top
),以及position: fixed
。這就在后來的 CSS2 中體現了出來。
跟你一樣,我也一直不怎么喜歡絕對定位。有人說,絕對定位在 Web 上已經有了它的位置,而我時不時會用它實現一些編碼不太可能實現的效果。
我曾聽人說過不應該使用浮動來布局,因為這不是浮動特性“設計的初衷”,浮動最初只是為了實現圖文繞排的。這樣用有問題嗎?
圖文繞排是一個基本的布局技術。因此毫無疑問,浮動應該可以用于布局。我希望 CSS 能進入 屏幕分頁展示這個領域。在分頁內容時,浮動會更重要,因為你可以把元素浮動到屏幕的上頭和下頭。
如果你能施展魔法,那你最希望當前 CSS 中的哪些東西從這個世界上銷聲匿跡,又希望添加并讓哪些東西瞬間無所不在?
我希望清除特定于瀏覽器版本的代碼,比如<!--[if lt IE 7 ]>
。雖然從技術上說這不屬性 CSS,但這種“注釋”不應該成為必要的東西,它們敗壞了 Web 標準的名譽。
你提的后一個問題更有意思。如果是在 2006 年,我想說 Web 字體。如果是在 2007 年,我想說<video>
元素(誤入 HTML 領地有年頭了)。這兩者現在所有瀏覽器都支持了。
2011 年,看到那么多應用使用頁面(不帶滾動條)創建令人眩目的幻燈片,我開始想讓網頁變成真正的頁面。思路就是樣式表可以觸發分頁模式,把內容分配到多個頁面 中。用戶可以通過手勢或者 PageUp 和 PageDown 切換頁面。我希望這樣一來在瀏覽器中創建電子書不僅成為可能,甚至更容易。為此,有點魔法會更好。你可以幫我在所有瀏覽器提供商的額頭上撒些仙塵嗎?
為什么我們還不能通過 CSS 實現分頁布局,又不是什么尖端技術?(Flexbox,注意啦……)
布局很復雜,在 Web 上實現布局更復雜,因為頁面要在很多不同設備中顯示。CSS 有幾種排布內容的機制,包括絕對定位元素、浮動、多欄布局和 CSS 表格。這些特性綜合運用起來非常復雜,但我也不認為這是什么尖端技術。不過我承認沒有怎么用過 Flexbox。
你怎么看 SASS 和 LESS 這些預處理器?CSS 可以從這些技術上借鑒什么?
當然,預處理器很有用。我想可能可以從預處理器的功能里選擇 5 個左右最流行的,內置到 CSS 里。我個人比較喜歡嵌套選擇符、單行注釋(以//
開頭)。等 CSS 50 歲的時候,我會告訴你為什么 CSS 一開始并沒有考慮這些。
你是 WHATWG 的成員,怎么會出現這個組織?
WHATWG 成立于 W3C 想要放棄 HTML,并把工作重心轉移到基于 XHTML、XForms、SMIL 和 SVG 構建 混合文檔上的時候。對瀏覽器制造商而言,HTML 太重要了,怎么能放棄呢!因此,當時還在我的 Opera 團隊的 Ian Hickson 成立了 WHATWG,繼續開發新的 Web 標準。同時,我們也關注微軟的 XAML,它在專有應用語言上面加入了一層簡單的 XML。因此 WHATWG 的目標就是應用,而不是文檔。Ian 作為編輯還在繼續開發 HTML 標準, 碩果累累。
你是 CSS 之父,但你最近卻在 WHATWG 而非 W3C 的 CSS 工作組名義下發布了一些規范。為什么?
事實上, CSS Figures 和 CSS Books 是 WHATWG 的工作項目。以 WHATWG 的名義發布這些規范有重大的意義。這個“活標準”模型可以低成本快速更新,這與過去發布 W3C Working Drafts 的困難程度形成了鮮明的對比。WHATWG 保持規范適度超前于實現而不致使實現放棄的目標,我非常認同。
最后一個問題,CSS 還能勝任自己的角色嗎?或者說,我們是不是應該換一個新模型,比如網格樣式表(Grid Style Sheets)?
1999 年,Ethan Munson 和 Philip M Marden 就提到“對樣式表語言的研究嚴重不足”。這個結論到今天依然不過時,任何研究和改進樣式表的努力都必須鼓勵。
GSS 是個有意思的例子,它在樣式表機制中添加了“Cassowary”約束求解器。在 1995 年最初的 CSS 實現中,我使用的是“SkyBlue”約束求解器來解決樣式表語句的沖突。(順便說一下,這兩種約束求解器都是華盛頓大學開發的。)通過約束求解器可以表 達任意兩個元素之間的關系,并能自動解決沖突。可是,隨著舊元素的消失和新元素的加入(比如通過 DOM 操作),問題會變復雜。此外還要恰當地處理好循環依賴。考慮到這些問題,我很早就打消了通過 CSS 表達任意元素間布局約束的念頭。
過去,要支持新規范必須說服所有瀏覽器制造商,要他們拿出寶貴的開發時間。這就提高了門檻,可能還高得離譜。而現在,已經可能像通過庫擴展 JavaScript 一樣擴展瀏覽器了,試驗和研究樣式表容易多了。
回到你的問題上:CSS 還勝任它的角色嗎?我認為勝任。我還沒看到有可能取代它的新模型出現。新想法一定會有,但應該會擴展而非替代 CSS。我相信我們今天寫的 CSS 代碼,500 年后的計算機仍然能看懂。
謝謝你接受采訪,祝 CSS 生日快樂!
<span id="shareA4" class="fl">
</span><span><p><code><!--[if lt IE 7 ]></code>。雖然從技術上說這不屬性 CSS,但這種“注釋”不應該成為必要的東西,它們敗壞了 Web 標準的名譽。</p>
你提的后一個問題更有意思。如果是在 2006 年,我想說 Web 字體。如果是在 2007 年,我想說元素(誤入 HTML 領地有年頭了)。這兩者現在所有瀏覽器都支持了。
2011 年,看到那么多應用使用頁面(不帶滾動條)創建令人眩目的幻燈片,我開始想讓網頁變成真正的頁面。思路就是樣式表可以觸發分頁模式,把內容分配到多個頁面 中。用戶可以通過手勢或者 PageUp 和 PageDown 切換頁面。我希望這樣一來在瀏覽器中創建電子書不僅成為可能,甚至更容易。為此,有點魔法會更好。你可以幫我在所有瀏覽器提供商的額頭上撒些仙塵嗎?
為什么我們還不能通過 CSS 實現分頁布局,又不是什么尖端技術?(Flexbox,注意啦……)
布局很復雜,在 Web 上實現布局更復雜,因為頁面要在很多不同設備中顯示。CSS 有幾種排布內容的機制,包括絕對定位元素、浮動、多欄布局和 CSS 表格。這些特性綜合運用起來非常復雜,但我也不認為這是什么尖端技術。不過我承認沒有怎么用過 Flexbox。
你怎么看 SASS 和 LESS 這些預處理器?CSS 可以從這些技術上借鑒什么?
當然,預處理器很有用。我想可能可以從預處理器的功能里選擇 5 個左右最流行的,內置到 CSS 里。我個人比較喜歡嵌套選擇符、單行注釋(以//
開頭)。等 CSS 50 歲的時候,我會告訴你為什么 CSS 一開始并沒有考慮這些。
你是 WHATWG 的成員,怎么會出現這個組織?
WHATWG 成立于 W3C 想要放棄 HTML,并把工作重心轉移到基于 XHTML、XForms、SMIL 和 SVG 構建 混合文檔上的時候。對瀏覽器制造商而言,HTML 太重要了,怎么能放棄呢!因此,當時還在我的 Opera 團隊的 Ian Hickson 成立了 WHATWG,繼續開發新的 Web 標準。同時,我們也關注微軟的 XAML,它在專有應用語言上面加入了一層簡單的 XML。因此 WHATWG 的目標就是應用,而不是文檔。Ian 作為編輯還在繼續開發 HTML 標準, 碩果累累。
你是 CSS 之父,但你最近卻在 WHATWG 而非 W3C 的 CSS 工作組名義下發布了一些規范。為什么?
事實上, CSS Figures 和 CSS Books 是 WHATWG 的工作項目。以 WHATWG 的名義發布這些規范有重大的意義。這個“活標準”模型可以低成本快速更新,這與過去發布 W3C Working Drafts 的困難程度形成了鮮明的對比。WHATWG 保持規范適度超前于實現而不致使實現放棄的目標,我非常認同。
最后一個問題,CSS 還能勝任自己的角色嗎?或者說,我們是不是應該換一個新模型,比如網格樣式表(Grid Style Sheets)?
1999 年,Ethan Munson 和 Philip M Marden 就提到“對樣式表語言的研究嚴重不足”。這個結論到今天依然不過時,任何研究和改進樣式表的努力都必須鼓勵。
GSS 是個有意思的例子,它在樣式表機制中添加了“Cassowary”約束求解器。在 1995 年最初的 CSS 實現中,我使用的是“SkyBlue”約束求解器來解決樣式表語句的沖突。(順便說一下,這兩種約束求解器都是華盛頓大學開發的。)通過約束求解器可以表 達任意兩個元素之間的關系,并能自動解決沖突。可是,隨著舊元素的消失和新元素的加入(比如通過 DOM 操作),問題會變復雜。此外還要恰當地處理好循環依賴。考慮到這些問題,我很早就打消了通過 CSS 表達任意元素間布局約束的念頭。
過去,要支持新規范必須說服所有瀏覽器制造商,要他們拿出寶貴的開發時間。這就提高了門檻,可能還高得離譜。而現在,已經可能像通過庫擴展 JavaScript 一樣擴展瀏覽器了,試驗和研究樣式表容易多了。
回到你的問題上:CSS 還勝任它的角色嗎?我認為勝任。我還沒看到有可能取代它的新模型出現。新想法一定會有,但應該會擴展而非替代 CSS。我相信我們今天寫的 CSS 代碼,500 年后的計算機仍然能看懂。
謝謝你接受采訪,祝 CSS 生日快樂!
</div> --></code></p> </span></div>