Каковы все допустимые самозакрывающиеся элементы в XHTML (как реализованы основными браузерами)?

Каковы все допустимые самозакрывающиеся элементы (например, < br/ > ) в XHTML (как реализовано основными браузерами)?

Я знаю, что XHTML технически позволяет любому элементу быть самозакрытым, но я ищу список тех элементов, которые поддерживаются всеми основными браузерами. См. http://dusan.fora.si/blog/self-closing-tags для примеров некоторых проблем, вызванных самозакрывающимися элементами, такими как < div/ > .

Ответы

Ответ 1

Каждый браузер, поддерживающий XHTML (Firefox, Opera, Safari, IE9), поддерживает самозакрывающийся синтаксис каждого элемента.

<div/>, <script/>, <br></br> все должно работать нормально. Если они этого не делают, тогда у вас есть HTML с неуправляемым добавлением XHTML DOCTYPE.

DOCTYPE не влияет на интерпретацию документа. Только тип MIME.

Решение W3C об игнорировании DOCTYPE:

В рабочей группе HTML обсуждалась эта проблема: целью было (Только HTML), чтобы принимать документы XHTML 1.0, следуя руководящих принципов и обслуживая их как text/html. Поэтому документы служили text/html следует рассматривать как HTML, а не как XHTML.

Это очень распространенная ошибка, потому что W3C Validator в значительной степени игнорирует это правило, но браузеры следуют за ним религиозно. Читать  Понимание HTML, XML и XHTML из блога WebKit:

Фактически, подавляющее большинство, предположительно, документов XHTML в Интернете, используется как text/html. Это означает, что они вообще не XHTML, а фактически недействительный HTML-код, обрабатываемый обработкой HTML-парсеров. Все эти "Valid XHTML 1.0!" ссылки в Интернете действительно говорят "Недопустимый HTML 4.01!".


Чтобы проверить, есть ли у вас реальный XHTML или неверный HTML с XHTML DOCTYPE, поместите это в свой документ:

<span style="color:green"><span style="color:red"/> 
 If it red, it HTML. Green is XHTML.
</span>

Он проверяет, и в реальном XHTML он отлично работает (см. 1 vs 2). Если вы не можете поверить своим глазам (или не знаете, как установить типы MIME), откройте страницу через прокси XHTML.

Еще один способ проверить источник просмотра в Firefox. Он будет выделять косые черты красным цветом, если они недействительны.

В HTML5/XHTML5 это не изменилось, и различие еще четче, потому что у вас даже нет дополнительных DOCTYPE. Content-Type является королем.


Для записи спецификация XHTML позволяет любому элементу самозакрываться, создавая XHTML XML-приложение: [emphasis mine]

Теги с пустыми элементами могут использоваться для любого элемента, у которого нет содержимого, независимо от того, объявлено ли оно с помощью ключевого слова EMPTY.

Он также явно показан в спецификации XHTML:

Пустое элементы должны либо иметь концевой тег, либо начальный тег должен заканчиваться на />. Например, <br/> или <hr></hr>

Ответ 2

Один элемент, который должен быть очень осторожным в этой теме, - это элемент <script > . Если у вас есть внешний исходный файл, он будет вызывать проблемы при его закрытии. Попробуйте:

<!-- this will not consistently work in all browsers! -->
<script type="text/javascript" src="external.js" />

Это будет работать в Firefox, но, по крайней мере, ломается в IE6. Я знаю, потому что я столкнулся с этим, когда чрезмерно усердно закрывал каждый элемент, который я видел; -)

Ответ 3

Самозакрывающийся синтаксис работает со всеми элементами в application/xhtml + xml. Он не поддерживается ни в одном элементе text/html, но элементы, которые "пусты" в HTML4 или "void" в HTML5, в любом случае не принимают конечный тег, поэтому, если вы поместите косую черту, они выглядят как самозакрывающиеся синтаксис поддерживался.

Ответ 5

Лучший вопрос: какие теги могут быть самозакрыты даже в режиме HTML, не затрагивая код? Ответ: только те, у которых есть пустой контент (недействительны). Согласно спецификации HTML следующие элементы недействительны:

area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr

В старой версии спецификации также перечислены command. Кроме того, согласно различным источникам, следующие устаревшие или нестандартные теги являются недействительными:

basefont, bgsound, frame, isindex

Ответ 6

Надеюсь, это поможет кому-то:

<base />
<basefont />
<frame />
<link />
<meta />

<area />
<br />
<col />
<hr />
<img />
<input />
<param />

Ответ 7

Как насчет <meta> и <link>? Почему они не включены в этот список?

Быстрое эмпирическое правило, не закрывайте любой элемент, который предназначен для содержания, потому что он рано или поздно вызовет проблемы с браузером.

Те, которые естественно самозакрываются, например, <br> и <img>, должны быть очевидны. Те, которые не... просто не закрывают их сами!

Ответ 8

Вы должны посмотреть xHTML DTD, все они перечислены. Вот краткий обзор всех основных:

<br />
<hr />
<img />
<input />

Ответ 9

В прошлый раз, когда я проверил, следующие пустые /void элементы, перечисленные в HTML5.

Действует для авторов: area, base, br, col, command, embed, eventsource, hr, img, input, link, meta, param, source

Недействителен для авторов: basefont, bgsound, frame, spacer, wbr

Помимо нескольких, которые являются новыми в HTML5, это должно дать вам представление о тех, которые могут поддерживаться при обслуживании XHTML как text/html. (Просто проверьте их, изучив DOM.)

Что касается XHTML, который использовался как application/xhtml + xml (что делает его XML), применяются правила XML, и любой элемент может быть пустым (даже если DTD XHTML не может выразить это).

Ответ 10

Они называются "пустыми" элементами в HTML 5. Они перечислены в официальной спецификации W3.

Элемент void - это элемент, модель содержимого которого никогда не позволяет иметь содержимое ни при каких обстоятельствах.

По состоянию на апрель 2013 года они являются:

область, база, br, col, команда, вставка, hr, img, ввод, keygen, ссылка, мета, параметр, источник, трек, wbr

По состоянию на декабрь 2018 года (HTML 5.2) они являются:

площадь, база, br, col, вставка, hr, img, вход, ссылка, мета, параметр, источник, трек, wbr

Ответ 11

Еще одна проблема с закрытием тега для IE - это элемент заголовка. Когда IE (просто попробовал это в IE7) увидел это, он представляет пользователю пустую страницу. Однако вы "смотрите источник", и все есть.

<title/>

Я изначально видел это, когда мой XSLT сгенерировал сам закрывающий тег.

Ответ 12

Я не собираюсь переуступать это, особенно потому, что большинство страниц, которые я пишу, либо сгенерировано, либо у тега есть контент. Единственные два, которые когда-либо вызывали у меня проблемы при их самозакрывании, заключаются в следующем:

<title/>

Для этого я просто прибегал к тому, чтобы всегда давать ему отдельный закрывающий тег, поскольку, когда он там находится в <head></head>, на самом деле это не делает ваш код каким-то беспорядочным, чтобы работать в любом случае.

<script/>

Это большая проблема, с которой я недавно столкнулся. В течение многих лет я всегда использовал самозакрывающиеся теги <script/>, когда script поступает из внешнего источника. Но я совсем недавно начал получать сообщения об ошибках JavaScript в нулевой форме. После нескольких дней исследований я обнаружил, что проблема (предположительно) заключалась в том, что браузер никогда не попадал в тег <form>, потому что не понимал, что это конец тега <script/>. Поэтому, когда я сделал это в отдельные теги <script></script>, все сработало. Почему разные на разных страницах, которые я сделал в одном браузере, я не знаю, но было очень сложно найти решение!

Ответ 13

< hr/ > является другим