Цитирование из раздела «Расширяемость» спецификации HTML5 :
Для функций уровня разметки, которые могут быть ограничены сериализацией XML и не должны поддерживаться в сериализации HTML, поставщики должны использовать механизм пространства имен для определения пользовательских пространств имен, в которых поддерживаются нестандартные элементы и атрибуты.
Поэтому, если вы используете сериализацию XML для HTML5, вы можете сделать что-то вроде этого:
<greeting xmlns="http://example.com/customNamespace">Hello!</greeting>
Однако, если вы используете синтаксис HTML, вы гораздо более ограничены в своих действиях.
Для функций уровня разметки, предназначенных для использования с синтаксисом HTML, расширения должны быть ограничены новыми атрибутами формы «x-vendor-feature» [...] Не следует создавать новые имена элементов.
Но эти инструкции в первую очередь направлены на производителей браузеров, которые предположительно будут предоставлять визуальные стили и функциональность для любых пользовательских элементов, которые они выберут для создания.
Для автора, хотя и может быть законно встраивать пользовательский элемент в страницу (по крайней мере, в сериализацию XML), вы не получите ничего, кроме узла в DOM. Если вы хотите, чтобы ваш пользовательский элемент действительно что-то делал или отображался каким-то особым образом, вам следует обратить внимание на спецификацию пользовательских элементов .
Для более подробного ознакомления с предметом ознакомьтесь с разделом «Введение в веб-компоненты» , в котором также содержится информация о Shadow DOM и другие соответствующие спецификации. Эти спецификации все еще находятся в стадии разработки - вы можете увидеть текущий статус здесь - но они активно развиваются.
Например, простое определение greeting
элемента может выглядеть примерно так:
<element name="greeting">
<template>
<style scoped>
span { color:gray; }
</style>
<span>Simon says:</span>
<q><content/></q>
</template>
</element>
Это говорит браузеру отображать содержимое элемента в кавычках с префиксом текста «Саймон говорит:», который оформлен в сером цвете. Как правило, пользовательское определение элемента, подобное этому, будет храниться в отдельном html-файле, который вы импортируете со ссылкой.
<link rel="import" href="greeting-definition.html" />
Хотя вы также можете включить его, если хотите.
Я создал рабочую демонстрацию приведенного выше определения, используя библиотеку Polymer Polyfill, которую вы можете увидеть здесь . Обратите внимание, что здесь используется старая версия библиотеки Polymer - более поздние версии работают совсем по-другому. Однако, так как спецификация все еще находится в разработке, я бы не рекомендовал использовать ее в производственном коде.