Цитуючи з розділу Розширення специфікації 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, яку ви можете побачити тут . Зауважте, що для цього використовується стара версія бібліотеки «Полімер» - більш новітні версії працюють зовсім інакше. Однак, якщо специфікація ще знаходиться в розробці, я б це не рекомендував використовувати у виробничому коді.