Могу ли я создать собственный HTML-тег в HTML5?

Мне было интересно, могу ли я создать собственный HTML-тег с той же функциональностью, что и метатеги Facebook Open Graph для моего сайта.

Я думал о чем-то вроде этого:

<mysite title="My website title" description="Some description" 
    image="http://mysite.com/image.png">

А затем использовать PHP для извлечения этих данных (я уже умею это делать с помощью мета-тегов).

Некоторые моменты:

  • Я использую HTML5, есть ли проблемы с синтаксисом при использовании этого метода?

  • Google+ использует что-то вроде этого: g:plusone


person Cainã    schedule 10.11.2012    source источник
comment
Для тех элементов, которые вы перечисляете, уже есть элементы: <title>, <meta name="description"> и <link rel="icon">.   -  person Wesley Murch    schedule 10.11.2012
comment
Есть разница между этими элементами и созданием шаблона информации, как это делает Facebook.   -  person Cainã    schedule 10.11.2012
comment
Какова реальная проблема, с которой вы столкнулись? Я уверен, что есть лучшее решение. Другими словами, какова ваша конечная цель?   -  person Wesley Murch    schedule 10.11.2012
comment
Есть несколько существующих вопросов по той же теме, поиск, например. для пользовательских HTML-тегов.   -  person Jukka K. Korpela    schedule 10.11.2012
comment
@JukkaK.Korpela Это едва ли и точная копия вопроса, который вы перечислили. Если это должно быть закрыто как дубликат, то, по крайней мере, задайте вопрос, который является действительным дубликатом.   -  person Yes Barry    schedule 11.11.2012


Ответы (4)


Марат Таналин прав, в HTML5 нельзя "изобретать" элементы/атрибуты/значения, которые не указаны. Alohci приводит хороший пример, почему это является причиной.

mmmshuddup отмечает, что вы можете использовать XHTML5. Однако я думаю, что это было бы разрешено в том случае, если вы расширяете словарный запас формально корректно. В конце концов, это XML. Однако это уже не мог быть документ полиглота (X)HTML5.

Я думаю, что может быть решение (X)HTML5, которое может работать для вас (хотя это зависит от вашего конкретного варианта использования): data-* атрибут:

<div data-title="My website title" data-description="Some description" data-image="http://mysite.com/image.png">…</div>

Вы можете «изобрести» атрибуты, начинающиеся с data-, за которыми следует строка, которую вы можете определить сами.

Другим возможным (более сложным) способом может быть использование микроданных с существующим словарем. который соответствует вашим потребностям (если вы не можете его найти, вы можете создать его самостоятельно). Я бы пошел по этому пути только в том случае, если (мета)данные, которые вы хотите предоставить, ценны для других.

person unor    schedule 10.11.2012
comment
Это уже не совсем так, пользовательские элементы стали реальностью. Он еще не завершен, но вы можете прочитать черновик здесь. - person beatgammit; 25.10.2013

Основная проблема в том, что пользовательские элементы формально недействительны.

Вот что говорят документы:

Авторы не должны использовать элементы, атрибуты или значения атрибутов, которые не разрешены данной спецификацией или другими применимыми спецификациями, так как это значительно затрудняет расширение языка в будущем.

элементы HTML5

Между прочим, было солидное предложение с расчетом на будущее. для пользовательских элементов в баг-трекере W3, но он, как обычно, был отклонен крутым парнем Хикси.

person Marat Tanalin    schedule 10.11.2012
comment
Интересное предложение. Я не видел этого раньше. Я думаю, что большая проблема заключается в том, какую проблему пытаются решить пользовательские элементы. Все, что вы говорите в предложении, это то, что разметка будет немного проще. Для этого вы бы значительно усложнили использование HTML, и поэтому я подозреваю, что большинство потребителей не стали бы утруждать себя внедрением CSS-подобных правил, в результате чего вы бы просто получили бесплатно для всех. Это сделало бы расширение HTML в будущем практически невозможным. - person Alohci; 10.11.2012

Да, вы должны быть в состоянии сделать это, если вы отображаете страницу как XHTML (XML). Использование <html xmlns="http://www.w3.org/1999/xhtml"> в открывающем теге <html>. Как сказал Марат Таналин, это "формально" некорректный синтаксис.

Вы можете разобрать документ различными способами, используя simplexml_load_string() при использовании XPATH для запроса этих элементов.

$fileContents = file_get_contents('/path/to/template', FILE_USE_INCLUDE_PATH);
$template     = simplexml_load_string($fileContents);
$myTags       = $template->xpath('//mysite');
person Yes Barry    schedule 10.11.2012
comment
Итак, я не могу использовать заголовок HTML5? - person Cainã; 10.11.2012
comment
@RedCurley Я не думаю, что ты можешь ... это единственная проблема. Это обходной путь, но он действительно работает. РЕДАКТИРОВАТЬ: попробуйте, это все еще должно работать, но это не будет правильным синтаксисом HTML5. Но ваши потребности кажутся очень специфическими, так что, может быть, это вас не касается? - person Yes Barry; 10.11.2012
comment
Если вы используете XHTML, я думаю, вам все равно нужно создать свой собственный пользовательский DTD, чтобы сделать его действительным. - person bfavaretto; 10.11.2012
comment
@RedCurley да, то, что сказал бфаваретто, правда. Это важно иметь в виду. - person Yes Barry; 10.11.2012
comment
Анализируя эту ситуацию, я думаю, что можно было бы сделать что-то с комментариями HTML, например <!--MYSITE:title="" description=""-->. Это может быть интересным подходом. - person Cainã; 10.11.2012
comment
@RedCurley По какой-то причине я бы не рекомендовал это. - person Yes Barry; 10.11.2012

См. этот вопрос: Удаление свойства DOM перевода Chrome

Здесь кто-то использовал нестандартное имя атрибута (нестандартные имена элементов потенциально имеют ту же проблему) только для того, чтобы обнаружить, что имя теперь стандартизировано и интерпретируется в браузерах, и спрашивающий сталкивается с ужасным обходным путем для избежать большого количества переделок.

Я никогда не видел варианта использования, который оправдывал бы связанные с этим риски.

Конечно, если вы так же велики, как Google или Facebook, ваше нестандартное имя, скорее всего, будет достаточно известно, чтобы его не заметили конфликты имен.

person Alohci    schedule 10.11.2012
comment
Пост, на который вы ссылаетесь, является прекрасным доказательством того, почему следует избегать создания собственных элементов или атрибутов (очень рад видеть теперь стандартные атрибуты данных). - person Wesley Murch; 10.11.2012
comment
@WesleyMurch: я согласен с Алохчи. см. это Authors must not use elements, attributes, or attribute values that are not permitted by this specification or other applicable specifications, as doing so makes it significantly harder for the language to be extended in the future. это не должно и не может. - person naveen; 10.11.2012