2011-10-04 36 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模拟更快。