CSS大師訪談:提供商前綴的困境
此前Tantek在W3CCSS工作小組的公開(kāi)的會(huì)議上提過(guò),Webkit-only移動(dòng)網(wǎng)站的控制,造成了瀏覽器的壟斷,Tantek陷入了當(dāng)前的在Web標(biāo)準(zhǔn)領(lǐng)域的危機(jī)處境。Tantek討論了Mozilla的解決方案——把Firefox移動(dòng)封裝成類似Webkit,并支持一些-webkit-CSS屬性,這個(gè)舉動(dòng)給web標(biāo)準(zhǔn)社區(qū)帶來(lái)了不小的轟動(dòng),特別是來(lái)自O(shè)pera和Microsoft的代表立即同意這個(gè)觀點(diǎn)并宣布和Mozilla類似的計(jì)劃。下面的討論是通過(guò)EtherPad、即時(shí)通訊、e-mail和電話來(lái)整理的。
讓我們從最基本的說(shuō)起吧。Mozilla,Opera和Internet Explorer究竟有哪些計(jì)劃?
我并不能代表Opera和InternetExplorer團(tuán)隊(duì)。Mozilla現(xiàn)在在針對(duì)一些有問(wèn)題的行為分析移動(dòng)網(wǎng)站。這些網(wǎng)站探測(cè)webkit的UA串,并對(duì)應(yīng)地只傳遞高保真的移動(dòng)網(wǎng)頁(yè)內(nèi)容,并且僅使用或主要使用-webkit-前綴的屬性。
基于這些分析,我們?cè)谟?jì)劃對(duì)Firefox移動(dòng)版(FirefoxMobile)實(shí)現(xiàn)UA串,這個(gè)UA串能通過(guò)這個(gè)UA探測(cè)。諷刺的是,這樣就好像啟動(dòng)Safari的時(shí)候Webkit添加”LikeGecko”到它的UA串——當(dāng)符合收集到的數(shù)據(jù)時(shí),實(shí)現(xiàn)基于一對(duì)一的特定的-webkit-前綴屬性。
你們不會(huì)僅僅是廣泛地把-webkit-改為-moz-對(duì)吧?這個(gè)計(jì)劃,僅僅是支持一小部分的-webkit-屬性?
是的。我們的目標(biāo)是我們把我們需要支持的其它提供商前綴屬性的數(shù)量最小化到通過(guò)數(shù)據(jù)調(diào)研過(guò)的那部分,這樣,對(duì)于Firefox移動(dòng)網(wǎng)頁(yè)用戶來(lái)說(shuō),意義是非常重大的。目前我們擁有的數(shù)據(jù),并不包含所有的-webkit-屬性。
另外,我們?cè)诳紤]支持-webkit-前綴版本的屬性,前提是我們同時(shí)支持這個(gè)屬性的非前綴版本。這樣,我們?yōu)榫W(wǎng)頁(yè)開(kāi)發(fā)者提供了基于標(biāo)準(zhǔn)的屬性而不是使用帶前綴的屬性。
但是目前為止,我們還不知道哪些屬性是被支持的,對(duì)吧?還是,已經(jīng)公布了?
目前,我們還沒(méi)有公布特定的屬性列表。對(duì)于這點(diǎn)我們比較謹(jǐn)慎,對(duì)數(shù)據(jù)列表我們經(jīng)過(guò)仔細(xì)的檢查,以確保是通過(guò)數(shù)據(jù)調(diào)研所得到結(jié)果的——確保我們僅支持這個(gè)數(shù)據(jù)認(rèn)為有理由的——確保效能,即是確保通過(guò)加上這樣的支持,確實(shí)為Firefox的移動(dòng)用戶帶來(lái)好處。
我假設(shè)這個(gè)列表會(huì)隨時(shí)間而改變。這似乎會(huì)給開(kāi)發(fā)者帶來(lái)更多的困擾,因?yàn)?webkit-的某一部分被支持,但是另一部分不被支持。你是如何讓開(kāi)發(fā)者去了解哪個(gè)提供商支持哪個(gè)前綴的哪個(gè)屬性?
提供商前綴屬性從來(lái)都不是開(kāi)發(fā)者去依賴的東西。這些屬性曾經(jīng)是,現(xiàn)在也是,用在測(cè)試階段的,是CSS從草稿成為標(biāo)準(zhǔn)的過(guò)程中的一種技術(shù)。我希望開(kāi)發(fā)者能及時(shí)學(xué)習(xí)非前綴的屬性,并學(xué)習(xí)這些屬性的實(shí)現(xiàn)。那些才是開(kāi)發(fā)者需要依賴的。
但是,這樣看起來(lái)并不理想。如果開(kāi)發(fā)者堅(jiān)持他們所依賴的東西—非前綴的屬性—那么我們就不會(huì)處于這樣的境地。
實(shí)際上,開(kāi)發(fā)者堅(jiān)持他們認(rèn)為能依賴的東西,是我們處于這樣境地的原因。一些帶前綴的屬性被認(rèn)為能依賴和支持,這樣并不助于推動(dòng)標(biāo)準(zhǔn)的形成。
Mozilla會(huì)維護(hù)一套關(guān)于哪個(gè)前綴的哪個(gè)屬性被支持到列表么?
Mozilla會(huì)繼續(xù)編寫(xiě)文檔,關(guān)于哪個(gè)前綴的哪個(gè)屬性是Firefox支持的,在developer.mozilla.org上面。
好的,那么這就是你想要做的事情,但是你做這件事的原因呢?這個(gè)計(jì)劃的目標(biāo)是什么?
Mozilla的目標(biāo)是開(kāi)發(fā)webkit專有部分的網(wǎng)頁(yè),提供給其它的瀏覽器提供商,就像在幾年前,面對(duì)IE專有的屬性,Mozilla和Opera不得不行動(dòng)一樣。我們已經(jīng)喚起了webkit移動(dòng)網(wǎng)頁(yè)壟斷的問(wèn)題,同時(shí)也喚起了競(jìng)爭(zhēng)能力的不足的意識(shí),盡管很多的從Mozilla、Opera和Microsoft來(lái)的宣講者加入到編寫(xiě)標(biāo)準(zhǔn)的工作組團(tuán)隊(duì)中。
有這么多的人在努力宣講這件事,為什么還是競(jìng)爭(zhēng)能力不足呢?
在過(guò)去的十幾年,網(wǎng)頁(yè)標(biāo)準(zhǔn)的宣講是非常有效率的,提高了關(guān)于有效的HTML+CSS、漸進(jìn)增強(qiáng)、謙虛腳本、微格式等等的意識(shí)和應(yīng)用。然而,撇開(kāi)Mozilla的和其它宣講者過(guò)去幾年的努力不說(shuō),webkit專有的移動(dòng)網(wǎng)頁(yè)增長(zhǎng)快到我們沒(méi)法制止,特別是對(duì)照針對(duì)webkit的宣講,我們的努力顯得又低調(diào)又明顯。
我們可以問(wèn)個(gè)問(wèn)題:哪里出了問(wèn)題?我們?cè)鯓咏Y(jié)束webkit移動(dòng)網(wǎng)頁(yè)的壟斷,且不說(shuō)至少有一些標(biāo)準(zhǔn)宣講者在努力?這并不僅僅是一個(gè)原因。我認(rèn)為有幾個(gè)方面的因素,共同導(dǎo)致了這樣的局面。
首先,webkit的創(chuàng)新有助于提高了尊重。
第二,webkit廣泛應(yīng)用于iPhone、Android和BlackBerry。這是個(gè)警告,即是,當(dāng)很多的提供商只使用一種方法實(shí)現(xiàn),就形成了一種壟斷。
第三點(diǎn),-webkit-特性已經(jīng)被Apple和Google很好地宣傳了,最主要的是在HTML5演講稿和demo網(wǎng)站中。這些HTML5網(wǎng)站有些已經(jīng)更新到用來(lái)實(shí)踐CSS特性,使用了很多的提供商前綴(為了更好的跨瀏覽器的演示和編碼)。然而,webkit-only版本的一些含義,至今還可以使用。
第四點(diǎn),過(guò)去幾年,在幾乎多有的網(wǎng)頁(yè)設(shè)計(jì)/網(wǎng)頁(yè)開(kāi)發(fā)的講壇上的有很多的演講,演講者會(huì)很激情地討論和演示***的***技術(shù),展示使用-webkit-前綴屬性所創(chuàng)建的網(wǎng)站和代碼。這樣,默默地鼓勵(lì)了開(kāi)發(fā)者編碼大多數(shù)都是針對(duì)webkit的瀏覽器,或者說(shuō)編碼僅支持webkit瀏覽器,特別是在移動(dòng)網(wǎng)站領(lǐng)域。
***,CSS工作組把這些創(chuàng)新的-webkit-前綴的屬性形成標(biāo)準(zhǔn)以便讓其它的瀏覽器來(lái)支持非前綴的屬性,包括webkit瀏覽器本身,并提供給開(kāi)發(fā)者一個(gè)他們可以依賴的基于標(biāo)準(zhǔn)的選擇。CSS標(biāo)準(zhǔn)形成花費(fèi)了太長(zhǎng)時(shí)間,導(dǎo)致以上陳述的幾點(diǎn)都已經(jīng)惡化了。
你說(shuō)你所做的是為了Firefox移動(dòng)用戶。所以這個(gè)計(jì)劃只是應(yīng)用在你的移動(dòng)產(chǎn)品上,而不應(yīng)用在桌面瀏覽器?
Firefox移動(dòng)版本的UA串本來(lái)就和Firefox桌面版本的有差別,所以,是的,早前提到的那部分都是針對(duì)移動(dòng)產(chǎn)品。至于實(shí)現(xiàn)特定的-webkit-屬性,我們目前僅在移動(dòng)設(shè)備支持它們。這樣,可以限制它的膨脹,給網(wǎng)頁(yè)開(kāi)發(fā)者提供可依賴的一個(gè)Firefox/Gecko平臺(tái)。
既然目標(biāo)是提供一個(gè)一致的體驗(yàn)給移動(dòng)用戶,那很大可能你會(huì)決定逐步地提供一個(gè)一致的體驗(yàn)給Firefox的用戶,不是嗎?這樣使得這個(gè)策略從移動(dòng)擴(kuò)展到桌面。
我們發(fā)現(xiàn)的問(wèn)題,是針對(duì)webkit編寫(xiě)的移動(dòng)網(wǎng)站。因?yàn)樽烂姘姹居泻芏嗟臑g覽器種類,所以僅針對(duì)webkit編寫(xiě)的網(wǎng)站占比相對(duì)較少。這就是功能需求產(chǎn)生的原因——如果沒(méi)有什么東西來(lái)幫助用戶,那就不必要去實(shí)現(xiàn)。所以,雖然我們可以在Firefox的平臺(tái)實(shí)現(xiàn)這個(gè),但是如果這樣做沒(méi)能讓用戶得到更好的體驗(yàn),那這樣做的意義相對(duì)來(lái)說(shuō)沒(méi)那么大。然而,我們?nèi)匀灰紤]這個(gè)對(duì)于開(kāi)發(fā)者的影響,并且,那可能已經(jīng)足夠。我們可以嘗試在測(cè)試階段測(cè)試什么來(lái)得到反饋。
同樣的道理,這看起來(lái)不像是局限于幾個(gè)屬性。倒更像是,既然已經(jīng)開(kāi)始,逐漸地,你會(huì)做到對(duì)待-webkit-就像你自己的前綴一樣。或者,即使Mozilla不這樣做,Opera和Microsoft也許會(huì),然后,自然而然地,你也被迫這樣做。你覺(jué)得是不是?
我覺(jué)得,那取決于我們能否打破webkit移動(dòng)網(wǎng)頁(yè)的壟斷。歷史證明,Mozilla和其它的提供商,成功打破了IE網(wǎng)頁(yè)壟斷,做法是通過(guò)實(shí)現(xiàn)有限的一些IE專有的特性,如innerHTML和XMLHttpRequest,這兩個(gè)逐漸地成為了W3C的標(biāo)準(zhǔn)的一部分。Firefox并沒(méi)有完全地實(shí)現(xiàn)IE特性。Mozilla對(duì)網(wǎng)頁(yè)兼容性有細(xì)致可靠的跟蹤記錄和一對(duì)一編程實(shí)現(xiàn)的特性。
但是,假設(shè),就像曾經(jīng)一段時(shí)間內(nèi)Opera把UA串默認(rèn)指向IE的做法一樣,如果Opera走在前面,并且廣泛地支持-webkit-。那會(huì)不會(huì)迫使mozilla走上同樣的道路呢?如果不會(huì),那又是為什么?
如果其它的移動(dòng)瀏覽器廣泛地支持-webkit-,我不覺(jué)得會(huì)對(duì)現(xiàn)狀有很大影響,因?yàn)橹鲗?dǎo)的移動(dòng)瀏覽器引擎,Webkit,已經(jīng)廣泛地支持了-webkit-前綴屬性。
Peter-PaulKoch很堅(jiān)定地說(shuō)過(guò),“不存在webkit”。很明顯,你和他的想法完全不同。
Peter-PaulKoch提出的”不存在webkit”并不重要,重要的是網(wǎng)頁(yè)開(kāi)發(fā)者相信并且表現(xiàn)得就是”存在webkit”。于是他們通過(guò)webkit的UA串和僅使用-webkit-前綴的屬性來(lái)編程和發(fā)布移動(dòng)網(wǎng)站。否定它,并不代表它就不是。
開(kāi)發(fā)者通過(guò)這樣做,他們給非webkit(如Mozilla、Opera和Explorer)的用戶一個(gè)弱化的體驗(yàn)或者更嚴(yán)重點(diǎn),一個(gè)破碎的體驗(yàn)。是的,我們看到低水平的或者”手機(jī)特征的”功能弱化的體驗(yàn)都是從非webkit瀏覽器的移動(dòng)網(wǎng)站來(lái)的。起碼在一定程度上,你完全支持了他們所做的東西,除非他們有隱藏在-webkit-前綴背后的東西?
是的,當(dāng)前版本的Firefox支持-moz-前綴的CSS3gradients,transforms和animations等。我們和CSS工作組在積極地努力,希望更快地增強(qiáng)各自的規(guī)范,并且對(duì)那些穩(wěn)定的特性,則去掉提供商前綴。那樣,我們可以幫助推動(dòng)網(wǎng)頁(yè)平臺(tái),是通過(guò)web標(biāo)準(zhǔn)而不是一大堆的提供商前綴。
一個(gè)網(wǎng)站崩潰的頻率如何?如果網(wǎng)站很不同但是功能還可以,那大概就是我們對(duì)網(wǎng)頁(yè)所期望的。看起來(lái),你的實(shí)際弱點(diǎn)是你的網(wǎng)頁(yè)渲染相對(duì)較差一些,而不是用戶被拋棄。這是對(duì)使用非webkit瀏覽器的威脅嗎?
網(wǎng)站并沒(méi)有崩潰。這個(gè)低端手機(jī)網(wǎng)站不一樣,并且相對(duì)地功能弱一些。當(dāng)用戶在同一個(gè)設(shè)備同一個(gè)網(wǎng)站的不同瀏覽器看到相對(duì)差的用戶體驗(yàn),他們抱怨的不是網(wǎng)站也不是設(shè)備,而是瀏覽器。
提供商前綴曾經(jīng)約定,是可以公開(kāi)測(cè)試實(shí)現(xiàn)過(guò)程,并且問(wèn)題要在行為形成之前改正。這樣漸變的語(yǔ)法獲得了很大成功,例如,完全不兼容的語(yǔ)法被嘗試使用,逐步地,統(tǒng)一的語(yǔ)法就出現(xiàn)了。這個(gè)計(jì)劃似乎阻礙了這樣的能力——即是,當(dāng)提供商開(kāi)始相互支持前綴,那么我們也能一起廢棄前綴。這個(gè)結(jié)論有道理嗎?
有時(shí)候人們對(duì)技術(shù)有些期望,覺(jué)得它會(huì)很***,沒(méi)有任何的瑕疵。當(dāng)然,這個(gè)期望沒(méi)有任何的根據(jù),所以,這是從何而來(lái)也不清楚了。CSS提供商前綴的道理一樣。它們實(shí)際很成功了——很多瀏覽器幾年來(lái)很憤怒地測(cè)試各種屬性,然后逐漸地標(biāo)準(zhǔn)化。
特別是,Mozilla有個(gè)對(duì)于早期嘗試-moz-前綴的很好的跟蹤記錄,當(dāng)標(biāo)準(zhǔn)形成的時(shí)候,傳送標(biāo)準(zhǔn)的非前綴的屬性,同時(shí)廢棄測(cè)試過(guò)的-moz-前綴的版本。這當(dāng)中有時(shí)候會(huì)遇到挫折:比如,border-radius變成標(biāo)準(zhǔn)需要多長(zhǎng)時(shí)間?這問(wèn)題擺在大家面前。但是,webkit移動(dòng)網(wǎng)頁(yè)的壟斷或許是***次讓我們看清楚提供商前綴是有如此多的問(wèn)題。撇開(kāi)它們的雖不***但令人印象深刻的跟蹤記錄不說(shuō),我們現(xiàn)在是否應(yīng)該放棄提供商前綴?
有些人呼吁說(shuō)要使用通用的前綴取代提供商前綴,比如-x-或者-beta-。那你的看法如何?
其它標(biāo)準(zhǔn)形成過(guò)程的經(jīng)驗(yàn)表明,當(dāng)存在測(cè)試版的前綴如-x-,那么每個(gè)提供商除了支持非前綴的版本以外,確實(shí)到***都會(huì)支持這個(gè)-x-。比如,查看你的郵件的標(biāo)題,你會(huì)看到很多的X-的頭部。或者比如,對(duì)于PNG格式的圖片,瀏覽器要支持image/png以外,還要支持image/x-png。
相反,對(duì)于CSS提供商前綴,Mozilla有可能去掉-moz-前綴的屬性,把web向前推進(jìn)。我相信,至少有其它的瀏覽器提供商已經(jīng)能夠在他們使用標(biāo)準(zhǔn)的非前綴的版本之后,逐步地廢棄他們自己的提供商前綴屬性。
為什么”全局的(universal)”的前綴不能像提供商前綴一樣廢棄?這兩者有什么不同?
全局的前綴被認(rèn)為是跨瀏覽器的可依賴的,然后,網(wǎng)絡(luò)努力促使這個(gè)前綴的使用和支持變得更強(qiáng)壯——或許強(qiáng)壯到為兼容性而要求支持它們,就像剛剛提到的X-*郵件頭部和內(nèi)容類型。
當(dāng)多種瀏覽器都支持-webkit-前綴的屬性的時(shí)候,會(huì)有類似的風(fēng)險(xiǎn)。如果這些瀏覽器支持等同的非前綴的屬性,并且我們鼓勵(lì)網(wǎng)頁(yè)開(kāi)發(fā)者使用這些來(lái)推動(dòng)標(biāo)準(zhǔn)前進(jìn),那么這個(gè)風(fēng)險(xiǎn)可以減緩一些,或者可以解決掉。然而,這并不會(huì)修復(fù)已有的針對(duì)webkit的移動(dòng)網(wǎng)站。
所以,現(xiàn)在是專注于修復(fù)問(wèn)題,冒著將來(lái)會(huì)創(chuàng)造同樣問(wèn)題的危險(xiǎn)?那不就僅僅是延緩這個(gè)痛苦嗎?
當(dāng)然這是個(gè)很復(fù)雜的問(wèn)題,因?yàn)橛泻芏嗟淖償?shù)和因素。修復(fù)歷史問(wèn)題同時(shí)又要確保將來(lái)的穩(wěn)定性,這兩者結(jié)合為幫助用戶和開(kāi)發(fā)者提供了一個(gè)很好的平衡。基于我們的策略,我們?cè)谘芯亢褪占瘮?shù)據(jù),并且期待擴(kuò)展和重復(fù)。
沒(méi)有哪個(gè)策略是沒(méi)有風(fēng)險(xiǎn)的,但是什么也不做,或者假裝沒(méi)有問(wèn)題存在,才是最有風(fēng)險(xiǎn)的事,因?yàn)槟窍喈?dāng)于讓webkit移動(dòng)網(wǎng)頁(yè)壟斷的現(xiàn)狀更加的糟糕。過(guò)去曾經(jīng)的網(wǎng)頁(yè)壟斷,導(dǎo)致開(kāi)放的網(wǎng)頁(yè)拖后了幾年。
DanielGlazman,工作組(CSSWorkingGroup)的聯(lián)合擔(dān)任主席(co-chair),對(duì)你的計(jì)劃提出了響應(yīng)。我們?cè)撊绾胃纳片F(xiàn)狀,你有什么建議嗎?
做為網(wǎng)頁(yè)開(kāi)發(fā)者,有幾件關(guān)鍵的事情要做。
首先,停止使用針對(duì)webkit的UA探測(cè)和內(nèi)容服務(wù),特別是在移動(dòng)網(wǎng)頁(yè)領(lǐng)域。
第二,停止使用-webkit-前綴屬性,建議使用標(biāo)準(zhǔn)的非前綴的屬性和穩(wěn)定的屬性,或者使用每一個(gè)提供商所支持的前綴屬性。
第三,看到使用webkitUA探測(cè)的和僅使用-webkit-前綴屬性的網(wǎng)站,幫助解釋并修正。同樣地,幫助解釋并修正這樣做的開(kāi)發(fā)中的網(wǎng)站。
最重要的是,樹(shù)立一個(gè)好榜樣。首先和最重要地在你的網(wǎng)站、發(fā)表的文章、演講當(dāng)中使用網(wǎng)頁(yè)標(biāo)準(zhǔn)。當(dāng)討論或做demo的時(shí)候或在編程的過(guò)程,不管在一個(gè)還是多個(gè)瀏覽器,都要警告自己,并且弄清楚了,今日的光鮮或許會(huì)毀了明天。
譯文來(lái)自:The Vendor Prefix Predicament:ALA’s Eric MeyerInterviews Tantek Çelik
訪談雙方分別是ERICMEYER和TANTEKÇELIK























