“User agents must treat elements and attributes that they do not understand as semantically neutral; leaving them in the DOM (for DOM processors), and styling them according to CSS (for CSS processors), but not inferring any meaning from them.”
上面这段话的意思是,浏览器必须将自定义元素保留在 DOM 之中,但不会任何语义。除此之外,自定义元素与标准元素都一致。 事实上,浏览器提供了一个
HTMLUnknownElement
复制代码
对象,所有自定义元素都是该对象的实例。
var tabs = document.createElement('tabs');
复制代码
[/code]
[code]tabs instanceof HTMLUnknownElement // true
复制代码
tabs instanceof HTMLElement // true
复制代码
上面代码中,tabs是一个自定义元素,同时继承了
HTMLUnknownElement
复制代码
和
HTMLElement
复制代码
接口。
二、HTML import
有了自定义元素,就可以写出语义性非常好的 HTML 代码。
[/code]
[code]
复制代码
微博
复制代码
复制代码
复制代码
微信
复制代码
复制代码
[/code]
上面的代码,一眼就能看出语义。 如果将[code]
复制代码
元素的样式与脚本,封装在一个 HTML 文件
share-buttons.html
复制代码
之中,这个元素就可以复用了。 使用的时候,先引入
share-buttons.html
复制代码
。
[/code]
然后,就可以在网页中使用[code]
复制代码
了。
[/code]
[code] Title
复制代码
复制代码
... ...
复制代码
[/code]
[code]HTML imports
复制代码
的更多用法可以参考教程(1,2)。目前只有 Chrome 浏览器支持这个语法。
三、Custom Elements 标准
HTML5 标准规定了自定义元素是合法的。然后,W3C 就为自定义元素制定了一个单独的 Custom Elements 标准。
它与其他三个标准放在一起—- HTML Imports,HTML Template、Shadow DOM—-统称为 Web Components 规范。目前,这个规范只有 Chrome 浏览器支持。
Custom Elements 标准对自定义元素的名字做了限制。
[quote]“自定义元素的名字必须包含一个破折号(-)所以
[/code]、[code]
复制代码
和
[/code]都是正确的名字,而[code]
复制代码
和
[/code]是不正确的。这样的限制使得 HTML 解析器可以分辨那些是标准元素,哪些是自定义元素。”