Каждый браузер, поддерживающий 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>