这个问题在办公室变成了激烈的讨论,所以我很想知道你的想法。
我们正在开发一款仅针对某些特定浏览器的网络应用。这些浏览器目前包括不同风格的Opera 9和Mozilla 1.7.12。在未来,我们可能还需要支持Opera 10和不同版本的WebKit。但我们不太可能不得不处理任何版本的IE。
我们的网络应用程序声明HTML 4.0严格的文档类型。
最近,我提议在HTML中使用自定义属性作为特定问题的解决方案。我提出了一些看起来像这样的东西:
<span translationkey="someKey">...</span>
由于这不是有效的HTML 4,它与我们的HTML人员的关系并不顺利,我们陷入了争论。
我的问题是:使用自定义属性的风险是什么?我知道页面不会验证,但是并非所有浏览器都忽略了他们不知道的属性?或者是否可以想象某些浏览器会更改为“怪癖模式”并将页面呈现为严格HTML 4.0 以外的其他内容?
更新:
提出实际提出的问题。
答案 0 :(得分:13)
没有浏览器限制/风险。只有w3验证器会吠叫,但吠叫的狗不咬人。
w3 spec说明如下:
- 如果用户代理遇到无法识别的属性,则为 应该忽略整个属性 规范(即属性和 它的价值)。
IE也会在怪异模式下不渲染,或者有人会想到。它只会对无效/强制文档类型执行此操作,而不会对无效属性执行此操作。
但是,请记住,一些Javascript库/框架将“无形地”在DOM树中添加/使用自定义HTML属性,例如几个jQuery插件。这样,您可能会冒着属性冲突的风险,因为“巧合”会使用与您自己的目的相同的属性。可悲的是,这通常很难甚至根本没有记录。
答案 1 :(得分:10)
HTML 5允许使用“data-”前缀的自定义属性,请参阅http://ejohn.org/blog/html-5-data-attributes/
答案 2 :(得分:9)
如果它的目标是保持有效的html4.0严格,那么为什么要放入自定义属性并不重要,你就是打破目标。
我认为你需要问的问题是,为什么你需要打破4.0严格来获得你想要的功能:你可以使用自定义属性的任何东西,你可以在现有的属性中使用: / p>
<span translationkey="someKey">...</span>
可能是:
<span class="Translationkey@someKey">...</span>
解析所有类信息将是一些额外的周期,但只要你不在该类上放置任何css信息,它就不会改变显示,不会让你处于怪癖模式,并且不会“让你在工作中打架。”
答案 3 :(得分:2)
重复尝试此线程:Is it alright to add custom Html attributes?
另请注意:Non-Standard Attributes on HTML Tags. Good Thing? Bad Thing? Your Thoughts?
答案 4 :(得分:1)
或者可以想象某些浏览器会更改为“怪癖模式”并将页面呈现为严格的HTML 4.0以外的其他内容?
不,错误的属性不会强制渲染模式更改。
如果你不关心验证做你喜欢的事情,但验证是一个有用的工具,用于检测简单的错误,否则你可能会追逐调试。鉴于有许多其他非常好的替代方法可以将数据传递给JavaScript,我更喜欢使用其中一种,而不是放弃验证。
另外,当您添加任意属性时,您实际上正在全局命名空间中播放。我们无法保证未来某些浏览器或标准版不会决定使用“translationkey”这个名称来实现一些新功能。因此,如果您必须添加属性,请为其指定一个模糊且可能唯一的名称,或者只使用HTML5 data-
前缀。
答案 5 :(得分:0)
如果页面被声明为HTML 4 strict,那么它不应该添加该HTML指定的未使用的属性。不同的是,目前尚不清楚浏览器的行为 正如已经报道的那样,添加其他属性的方法是将它们添加为类,即使这有一些限制。