CSS生日快樂:CSS之父H?kon Wium Lie訪談錄

jopen 10年前發布 | 13K 次閱讀 CSS

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 today 

That 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 家,請他為我們唱這首歌的時候,他卻拒絕了,而且放出了他的看門狗FontTagBgcolor。那還是算了,為紀念這個好日子,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代替),只描述相對定位(從而有時間好好討論絕對定位)。但微軟已經實現了自己的建議,不情愿刪掉這個功能。最終,唯一重要的變化就是添加了rightbottom屬性(平衡lefttop),以及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 FiguresCSS 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>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!