2011-10-04 38 views
3

當我在回答關於inputstextareasplaceholder文本的最佳實踐的另一個問題時,出現此問題。我應該如何處理冗餘在漸進增強/優雅降解中的作用?

使用HTML5 placeholder確實是最佳選擇,但在此時,似乎還需要爲舊版瀏覽器添加降級解決方案(使用javascript)。

的jsfiddle這裏:http://jsfiddle.net/leifparker/DvqYU/16/

的問題是:因爲他們都完成幾乎完全一樣的事情,爲什麼還要包括?爲什麼不僅僅使用僅支持javascript的解決方案,並放棄HTML5實現,直到它(幾乎)被普遍接受?

在此特定示例中,添加HTML5 placeholder屬性和hasPlaceholderSupport()函數是相當少量的行(4)的添加,但由於需要降級的支持,是否有任何理由打擾逐步冗餘?

我確定雙方都有理由,我很好奇聽到它。

在此先感謝!

+0

假設我們在這裏考慮什麼時間尺度?如果這個網站預計要三年,那麼現在HTML5是否得到普遍支持,這是否重要? – robertc

+0

佔位符文本[不應該用作替代正確標籤](http://www.paciellogroup.com/blog/2011/02/html5-accessibility-chops-the-placeholder-attribute/)明確關聯與輸入(使用'for ='屬性),所以我希望你的小提琴不代表你的預期實現。 – steveax

+0

@steveax小提琴不是一個完成的實現,只是爲了這個例子的準備。 – leifparker

回答

3

有一個理由打擾。隨着時間的推移,預計所有瀏覽器都將支持佔位符屬性。目前,just a few browsers do not support it最重要的是,IE 9和劣勢,以及Android瀏覽器)。所以,最終,您的佔位符後備代碼將是不必要的。如果您使用所有瀏覽器的腳本來發佈網站,幾年後,這將完全沒有必要。

相反,通過使用功能檢測回落到一個JavaScript的解決方案只在必要時:

  1. 你不不必要其中已經支持佔位符屬性瀏覽器中運行了一下JavaScript代碼。
  2. 您只能在需要時加載回退腳本,並保存幾個字節。

這就是Modernizr和yepnope.js(包含在Modernizr中)這樣的庫已經做到的。我推薦使用Modernizr的提取您的佔位符polyfillplaceholder-polyfill.js文件,所以您的代碼看起來是這樣的:

Modernizr.load({ 
    test: Modernizr.placeholder, 
    nope: 'placeholder-polyfill.js' 
}); 

如果你只是想yepnope.js和運行自己的特徵檢測功能(S):

yepnope({ 
    test: hasPlaceholderSupport(), 
    nope: 'placeholder-polyfill.js' 
}); 

這樣可以節省資源加載並提高大多數瀏覽器的性能。將來,所有瀏覽器都會通過測試,提高性能。然後,您可以簡單地刪除yepnope.js/Modernizr調用。

對我來說,這更多的是關於未來驗證代碼的思維方式,同時已經利用了現代瀏覽器的功能。

0

我看到的收穫是你只能在需要的時候加載jsFiddle。這節省了加載,解析和執行額外代碼所需的時間。您的頁面加載速度更快,原生html5支持可能比使用JavaScript模擬更快。