Действительность имен тегов пользовательских элементов
Мы можем быть заняты, но в то же время можем уделить внимание мненинию Дэвида Биссета, которое заканчивалось на </$0.02>
.
Это выглядит довольно мило. Даже в голову не приходят мысли о том, что идиома выражалась таким образом.
Это правильный HTML. Но если его превратить в веб-компонент, то как бы он мог выглядеть.
Вы можете сделать, <my-two-cents>
, но как насчет более краткого <my-$0.02>
. Или же <my-2¢>
?
Является ли <my-$0.02> допустимым имя тега для веб-компонента?
Сначала мы должны задаться вопросом: Какие символы разрешены в именах тегов для пользовательских элементов?
Вот ответ ChatGPT:
В HTML5 имена тегов пользовательских элементов могут содержать буквы (включая AZ и az), цифры (0-9), дефисы (-) и точки (.). Имя тега должно начинаться с буквы и не может содержать пробелов.
Но отвечает ли данный ответ действительности?
Пользуясь поисковиком, мы многого не нашли. Было несколько разрозненных сообщений в блогах и ответы StackOverflow со стандартными правилами именования веб-компонентов, которые мы знали, например, «имена тегов пользовательских элементов должны содержать дефис».
Это отсутствие ясности неизбежно привело нас к спецификации действительных имен пользовательских элементов, в которой говорится, что имена тегов должны соответствовать этому шаблону:
[a-z] (PCENChar)* '-' (PCENChar)*
Что такое PCENChar
?
"-" | "." | [0-9] | "_" | [a-z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
Это расширенная форма Бэкуса-Наура (EBNF) из спецификации XML.
#xN
: гдеN
- шестнадцатеричное целое, выражение соответствует символу, номер которого (кодовая точка) в ISO/IEC 10646 равенN
.
Но я вижу, PCENChar
что точки и цифры разрешены (как сказал мне ИИ), так что это <my-0.02>
будет правильно. А как быть со знаком доллара?
Мы могли бы попытаться найти, какие символы попадают в диапазон этих #xN
кодовых точек. Или мы могли бы просто остановиться здесь, открыть Codepen и начать пробовать разные имена тегов.
Если есть сомнения, откройте Codepen. Вот невероятно сложный пример, подробно описывающий допустимость имен тегов пользовательских элементов HTML. Это указывает на то, что символы доллара и цента запрещены.
Как насчет смайликов?
В своем исследовании мы можем наткнуться на проблему WHATWG с этим комментарием для имен тегов:
Вы уже можете включать Unicode в имена тегов HTML; это работает нормально. (Пример: http://software.hixie.ch/utilities/js/live-dom-viewer/?saved=5782 ). Единственное, что делает этот алгоритм, — это допустимая строка, переданная ему через API JavaScript.
Пример довольно забавен тем, что он показывает, что вы можете написать что-то вроде, <mytag™>
и оно будет отображаться как тег в DOM.
Это заставляет задуматься: можете ли вы поместить товарный знак или символ авторского права на пользовательский элемент? Мы не знаем, что попадает в диапазон этих #xN
кодовых точек, но в спецификации сказано следующее:
допускается большое разнообразие имен, чтобы обеспечить максимальную гибкость для таких случаев использования, как<math-α>
или<emotion-😍>
.
Итак, смайлики разрешены в пользовательских элементах?!?
Может быть, в теории, но на практике (на момент написания этой статьи) эти пользовательские имена элементов не работают в Codepen.
Интересно, когда-нибудь мы увидим, как кто-то попытается юридически зарегистрировать торговую марку имени пользовательского тега элемента для какого-то соглашения, которое они якобы изобрели, — скажите что-нибудь вроде — а затем подаст в суд, <command-palette™>
если кто-то попытается использовать то же имя для сети. компонент лол.
Заключение
Мы кратко попытались найти тестовые примеры для именования имен тегов пользовательских элементов в исходном коде webkit, но ничего не смогли найти. Они, наверное, существуют? И отказались от попыток.
Мы действительно надеялись, <my-$0.02>
что это будет действительный веб-компонент. Это почти похоже на тег, который должен оборачивать каждый комментарий в Интернете, а затем оформляться так, чтобы указывать: «Читатель, будьте осторожны: это всего лишь мнение одного человека».