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

188

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

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

kamens
источник
7
Разве это не по умолчанию одна из целей XHTML? Я думал, что одним из преимуществ XHTML является то, что вы можете использовать генератор XML для генерации HTML. Почему любой генератор XML должен знать, какие теги могут быть самозакрывающимися? Слишком странно.
Илия
6
Причина, по которой был принят «неправильный», «неправильный» ответ, заключается в том, что он ответил на вопрос, который, очевидно, задавал каменс. Он хотел знать, какие элементы могут быть автоматически закрыты при обработке XHTML как text / html, не вызывая проблем рендеринга в браузерах. Многие страницы написаны на XHTML и используются как text / html, хотя это технически некорректно. Этот вопрос может быть улучшен с помощью этого пояснения, но ответ на другой вопрос (что происходит, когда вы работаете как application / xml, или у единственных тегов в text / html должно быть закрытие /) в этом случае не помогает.
Ник Локвуд

Ответы:

180

Каждый браузер, поддерживающий 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 с DOCTYPE XHTML, поместите это в свой документ:

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

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

Другой способ проверить это просмотреть исходный код в Firefox. Он выделит косые черты красным цветом, когда они недействительны.

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


Напомним, что спецификация XHTML позволяет самозакрывающемуся элементу сделать XHTML приложением XML : [выделено мной]

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

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

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

Корнель
источник
7
Неправильно, потому что использование самозакрывающихся версий <script>или <div>приводит к различной визуализации / интерпретации.
ZeissS
13
@ZeissS только в text/html. В реальном XHTML, отправлено, как application/xhtml+xmlэто работает просто отлично. Пожалуйста, прочитайте статью, на которую я ссылался (или Приложение C спецификации XHTML), перед тем как понизить голосование.
Корнел
3
@pornel Можете ли вы гарантировать, что самозакрывающиеся теги <script /> будут работать в старых браузерах? Я так не думаю. Вы говорите авторитетно, и большая часть вашей информации точна, но опыт подсказывает мне, что самозакрывающиеся теги сценария будут проблематичными, и лучше всего избегать их полностью, а не испытывать головную боль.
Метаграф
6
@Metagrapher, если старые браузеры не поддерживают настоящий XHTML, ИЛИ вам не удалось установить тип MIME , он не будет работать. Однако в браузерах с поддержкой XHTML (все основные на данный момент) с application/xhtml+xmlтипом MIME я могу гарантировать, что это <script/>будет работать. С типом MIME. Только.
Корнел
4
@capdragon: старые браузеры не поддерживают XHTML (используется как «application / xhtml + xml»). Если вы отправите им документ XHTML как «text / html», то XHTML будет отображаться как суп меток (т. Е. Браузер анализирует его как HTML и считает ошибки самозакрывающихся тегов, которые он корректно восстанавливает). Ваши варианты: 1. написать HTML 4 (не совсем вариант, если используется ASP.NET, который отображает XHTML), 2. использовать ваш XHTML как «application / xhtml + xml» (требуется IE9 +, и этот тип MIME будет нарушать сценарии во всех браузерах во всяком случае, так что def не вариант), 3. написать HTML 5, который в основном делает тег супа стандартным :)
Triynko