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

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

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

.

13 ответов

Решение

Каждый браузер, поддерживающий 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-парсерами. Все эти ссылки "Действительный 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>

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

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

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

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

Со справочного сайта W3 Schools:

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />

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

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

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

basefont, bgsound, frame, isindex

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

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

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

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

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

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

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

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

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

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

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

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

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

Действительно для авторов: area, base, br, col, команда, embed, источник событий, hr, img, вход, ссылка, meta, param, source

Недопустимо для авторов: basefont, bgsound, frame, spacer, wbr

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

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

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

<title/>

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

<script/>

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

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

<title/>

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


другой

Другие вопросы по тегам