大多数浏览器似乎允许您创建您喜欢的任何元素标记,并将您喜欢的任何属性名称添加到元素中。例如:
<!DOCTYPE html>
<html>
<body>
<div my-attribute="has no data- prefix, but seems to behave like an attribute should">
<br/>
<hello-world style="display:block;background:#eee">Hello Everybody</hello-world>
<goodby-world style="background:#faa">Default display is inline</goodbye-world>
</div>
</body>
</html>
以上显示正常。看起来未定义的元素表现得非常像跨度。 它看起来像AngularJS利用自定义标签&amp;属性非常多 - 它几乎取决于它。
但是,据我所知,做这种事情是禁忌,除了自定义html5属性带有“data-”前缀的情况。
所以,我的问题是:构成自己的自定义元素标签和/或属性名称不再是禁忌吗?换句话说,AngularJS是否依赖于非标准怪癖,而这些怪癖并不是HTML5规范的真正组成部分,但恰好还是有效?谷歌有人发现了一个长期丢失的html5规范秘密章节吗?或者我完全误解了什么?
答案 0 :(得分:17)
它不会验证,但会渲染。
HTML5旨在非常宽容(与XHTML相反)。这在某种程度上是因为年龄较大的&#34; HTML5浏览器可以允许新版本(以及格式错误的HTML),该版本在不破坏页面的情况下不支持该版本。
这当然可以被剥削&#34;介绍自定义标签。
话虽如此 - 您也可以使用HTML4执行此操作。
正如评论中所述:您还可以使用data-
为普通代码中的任何属性添加前缀,并且它将进行验证。
答案 1 :(得分:11)
从W3C规范:
作者不得使用本规范或[其他适用规范] [1]不允许的元素,属性或属性值,因为这样做会使语言在将来更难扩展。
然而,虽然页面主体的初始源(在角度处理ng-app元素之前)可能不符合W3C标准,但如果在指令中使用replace: true
,则自定义元素将替换为模板HTML ,这可能是有效的。因此,在这种情况下,您可以将角元素视为仅用终端HTML输出替换的占位符。
答案 2 :(得分:4)
这有点自以为是,但主题也是如此。网络现在是我们制作的,我们有能力创建/样式/修改非规范元素。 Angular团队可能并不真正关心规格,它的前沿,它们可以让你做你想做的事。话虽这么说,你可以在Angular中做任何事情,并使用可以验证并符合HTML5规范的标记(因为它们支持两种方式)。
答案 3 :(得分:4)
AngularJS并不在乎,这完全取决于你。如果您希望您的指令与旧版IE兼容,则需要使用<div data-hello-world>
而不是<hello-world>
并将数据放在所有自定义属性的前面。
HTML5仍然不是100%的常态,但它正逐渐成为常态。