Вам нужно закрыть мета-теги и теги ссылок в HTML?

133

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

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

bcollins
источник

Ответы:

167

Тег всегда должен быть закрыт символом тега близко >(если мы будем игнорировать определенные правила SGML , которые номинально применяются в не-XHTML HTML , но никогда не были реализованы в браузерах).

Вы хотите спросить, нужно ли закрывать элементы концевыми тегами. Ответ заключается в том , не XHTML HTML (включая HTML5 в HTML сериализации), не закрывающий тег не требуется или допускается metaи linkэлементы. На практике, однако, браузеры просто игнорируют явные конечные теги для них, а также грузопассажирские культ /перед тем >, если вы их используете. И HTML5 делает эту вседозволенность правилом, даже формально разрешая /сериализацию в HTML.

В XHTML применяются правила XML, поэтому каждый элемент без исключения должен иметь как начальный тег, так и конечный тег, но один и тот же тег может использоваться для обеих ролей, если содержимое элемента пустое, например, <meta name="foo" content="bar"/>как сокращение <meta name="foo" content="bar"></meta>. Если вы нарушите это при обслуживании документа с типом содержимого XML (XHTML) в соответствующем браузере, то ваш документ не будет отображаться вообще; вместо этого отображается сообщение об ошибке.

При использовании сервера XHTML с типом содержимого HTML ( Content-Type: text/html), поскольку документы XHTML почти всегда находятся в сети, браузеры фактически будут применять правила HTML, отличные от XHTML.

Подвести итоги:

  • обычно используйте только <meta ...>без/
  • если вы действительно используете XHTML в контексте, где фактически применяется синтаксический анализ XHTML, играйте по правилам XML (и убедитесь, что вы их знаете)
  • если ваш начальник говорит вам писать <meta ... />, сделайте это; это бесполезно, но не причиняет никакого вреда (кроме случаев, когда вы пытаетесь проверить, например, по типу документа HTML 4.01).
Юкка К. Корпела
источник
3
Использование /> вызвало проблему, когда бот Google не распознал метатег robots. странный!!!
DevZer0
13
Я считаю термин «карго-культ» неуместным в этом контексте. Некоторые люди закрывают эти элементы просто потому, что они подавляют то, что XHTML не преобладал.
Маркус
6
Педантная тревога! «Культ карго» не переносится через дефис в обычной практике, а только когда целиком используется фраза в качестве прилагательного к чему-то еще (например, «программирование культа карго», «культ карго /до >»). Просто подумал, что я уточню, чтобы не запутывать интернет еще большей путаницей. </pedant_alert>:)
Аарон Wallentine
1
@ DevZer0 - вы уверены, что причиной была косая черта? Я ожидаю, что Google будет гибким в подобных вещах.
Саймон Ист
3
Разве приведение вашего HTML в соответствие с правилами XHTML не является причиной для включения / before>?
Кайл Делани
28

Это зависит от типа документа. HTML5 не требует закрытия. XHTML делает.

В HTML5 так называемые элементы void (элементы, не имеющие содержимого) не нуждаются в закрытии, поскольку они самозакрывающиеся. Но это все еще действует, если вы их закроете ..

Подробнее об этом здесь: void-elements

Sebsemillia
источник
4
HTML5 имеет две сериализации, и одна из них (сериализация XHTML) делает закрывающие теги обязательными.
Юкка К. Корпела