Czy musisz zamknąć meta i tagi linków w HTML?

136

Właśnie czytałem czyjś HTML, który nigdy nie zamykał tagów meta i linków w sekcji nagłówka HTML. Kod działał dobrze; czy zamknięcie tych tagów jest opcjonalne?

Pomyślałem, że byłoby źle sformułowane, gdyby tag nie był zamknięty.

bcollins
źródło

Odpowiedzi:

171

Tag muszą być zawsze zamknięte przez tag ścisłej symbolu >(jeśli pominiemy pewne zasady SGML że nominalnie zastosowanie w braku XHTML HTML, ale nigdy nie były realizowane w przeglądarkach).

Chcesz zapytać, czy elementy muszą być zamykane znacznikami końcowymi. Odpowiedź jest taka, że ​​kod HTML inny niż XHTML (w tym HTML5 w serializacji HTML), żaden znacznik końcowy nie jest wymagany ani dozwolony dla elementów metai link. W praktyce jednak przeglądarki po prostu ignorują ich wyraźne znaczniki końcowe, a także /wcześniejszy kult cargo >, jeśli ich używasz. A HTML5 czyni tę permisywność regułą, nawet formalnie zezwalając na /serializację w HTML.

W XHTML obowiązują reguły XML, więc każdy element bez wyjątku musi mieć zarówno znacznik początkowy, jak i końcowy, ale ten sam znacznik może być używany dla obu ról, jeśli zawartość elementu jest pusta, np. <meta name="foo" content="bar"/>Jako skrót od <meta name="foo" content="bar"></meta>. Jeśli naruszysz ten przepis, udostępniając dokument z typem zawartości XML (XHTML) do zgodnej przeglądarki, wówczas dokument w ogóle nie zostanie wyświetlony; zamiast tego wyświetlany jest komunikat o błędzie.

Podczas korzystania z serwera XHTML z typem zawartości HTML ( Content-Type: text/html), ponieważ dokumenty XHTML prawie zawsze znajdują się w Internecie, przeglądarki będą faktycznie stosować reguły HTML inne niż XHTML.

Podsumowując:

  • zwykle używaj po prostu <meta ...>bez/
  • jeśli naprawdę używasz XHTML w kontekście, w którym parsowanie XHTML jest faktycznie stosowane, graj według reguł XML (i upewnij się, że je znasz)
  • jeśli twój szef każe ci pisać <meta ... />, zrób to; nie jest użyteczne, ale nie powoduje żadnych szkód (chyba że spróbujesz zweryfikować np. w oparciu o doctype HTML 4.01).
Jukka K. Korpela
źródło
3
użycie /> spowodowało problem polegający na tym, że robot google nie rozpoznał metatagu robots. dziwne!!!
DevZer0
13
Uważam, że termin „kult cargo” jest w tym kontekście niewłaściwy. Niektórzy zamykają te elementy, po prostu dlatego, że tłumią, że XHTML nie zwyciężył.
Marcus
7
Alert pedanta! „Kult ładunku” nie jest łączony w normalnej praktyce, ale tylko wtedy, gdy używa się całego wyrażenia jako przymiotnika do czegoś innego (tj. „Programowanie kultu cargo”, „kult cargo /przed >”). Pomyślałem, że wyjaśnię, aby uniknąć bałaganu w Internecie z większym zamieszaniem. </pedant_alert>:)
Aaron Wallentine
2
@ DevZer0 - czy na pewno ukośnik był przyczyną? Spodziewałbym się, że Google będzie elastyczny w takich sprawach.
Simon East
3
Czy zapewnienie zgodności kodu HTML z regułami XHTML nie jest powodem umieszczania znaku / before>?
Kyle Delaney
29

To zależy od typu dokumentu. HTML5 nie potrzebuje zamknięcia. XHTML tak.

W HTML5 tak zwane elementy void (elementy, które nie mogą mieć treści) nie wymagają zamykania, ponieważ są samozamykające. Ale nadal obowiązuje, jeśli je zamkniesz.

Przeczytaj więcej na ten temat tutaj: void-elements

Sebsemillia
źródło
6
HTML5 ma dwie serializacje, a jedna z nich (serializacja XHTML) sprawia, że ​​tagi końcowe są obowiązkowe.
Jukka K. Korpela