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

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

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

.

Ответы [ 13 ]

178 голосов
/ 16 октября 2008

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

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

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

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

Рабочая группа по HTML обсуждала эту проблему: целью было разрешить старым (Только для HTML) браузеров, чтобы принимать документы XHTML 1.0, следуя руководящие принципы, и выступая в качестве текста / 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 с XHTML DOCTYPE, укажите это в своем документе:

<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>

40 голосов
/ 27 сентября 2008

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

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

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

35 голосов
/ 12 ноября 2008

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

34 голосов
/ 19 сентября 2008

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

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />
28 голосов
/ 13 января 2012

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

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

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

basefont, bgsound, frame, isindex

10 голосов
/ 15 ноября 2009

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

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

<area />
<br />
<col />
<hr />
<img />
<input />
<param />
5 голосов
/ 27 сентября 2008

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

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

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

4 голосов
/ 23 апреля 2013

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

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

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

area, base, br, col, команда, embed, hr, img, вход, keygen, ссылка, meta, param, source, track, wbr

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

area, base, br, col, embed, hr, img, вход, ссылка, meta, param, источник, дорожка, wbr

4 голосов
/ 12 ноября 2008

В последний раз, когда я проверял, ниже были пустые / пустые элементы, перечисленные в 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 не может выразить это).

4 голосов
/ 19 сентября 2008

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

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