Каковы все допустимые самозакрывающиеся элементы в 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, в любом случае не принимают конечный тег, поэтому, если вы поместите косую черту, они выглядят как самозакрывающиеся синтаксис поддерживался.
Ответ 4
С справочный сайт W3 Schools:
<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />
Ответ 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/ > является другим