Можно ли назвать свои собственные элементы <date>
, <person>
, <city>
или другие без использования тире? Можете использовать элементы без них?
У пользовательских элементов требуется тире в их имени?
Ответ 1
Все браузеры поддерживают конечный список элементов HTML, которые считаются "известными". Неизвестные элементы (например, <city>
, <person>
) обычно не вызывают ошибок с парсером HTML в современных браузерах и вместо этого наследуют от HTMLUnknownElement
. Однако в более старых версиях IE такие элементы будут вставлены в DOM как пустой node без каких-либо дочерних элементов (1).
Пользовательские элементы требует, чтобы все пользовательские элементы содержали дефис (-
) в имя. Поэтому вместо <person>
используйте <my-person>
или <x-person>
. Это допустимые имена, а <person
> считается неизвестным элементом.
Черточка эффективно позволяет анализатору HTML различать истинные пользовательские элементы и регулярные элементы. Это также позволяет нам обеспечить уровень будущих возможностей, когда группы стандартов добавляют в HTML новые теги.
Вы можете использовать любое дешифрованное имя, за исключением:
-
annotation-xml
-
color-profile
-
font-face
-
font-face-src
-
font-face-uri
-
font-face-format
-
font-face-name
-
missing-glyph
Насколько я знаю, эти имена являются зарезервированными именами из SVG, MathML и других спецификаций. Например, здесь больше info в элементе <font-face>
.
(1) Это привело к взлому, когда разработчики создавали фиктивный тег HTML5 в IE (например, <article>
) с использованием JavaScript, чтобы затем стирать его для любого нормального элемента с помощью CSS.
Ответ 2
Технически, они действительно работают. Вы можете также стилизовать их и все такое. То, что вы НЕ можете сделать, это доверять им. Это помогает решению. Не используйте их в проекте, который имеет значение и будет жить достаточно долго, чтобы потерпеть неудачу, когда браузер решит строго соблюдать его.
Опять же, это не значит, что они "плохие". Возможно, в будущем они будут абсолютно понятны или даже станут принятыми стандартами, как <section> в HTML5. Тег, подобный <city> , абсолютно значим, поэтому он практически доходит до того, что (и когда) такие вещи входят в официальные спецификации.
TL;DR: они работают нормально, но не используют их.