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

StackOverflow https://stackoverflow.com/questions/97522

Вопрос

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

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

Это было полезно?

Решение

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

<div/>, <script/>, <br></br> все должно работать просто отлично.Если они этого не сделают, то у вас есть HTML с неуместно добавленным типом ДОКУМЕНТА XHTML.

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 с 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 или “void” в HTML5, в любом случае не имеют конечного тега, поэтому, если вы добавите косую черту к ним, это будет выглядеть так, как будто поддерживается самозакрывающийся синтаксис.

Из самого Справочный сайт школ W3:

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

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

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

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

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

Действительно для авторов:область, база, br, col, команда, вставка, eventsource, hr, img, входные данные, ссылка, meta, параметр, источник

Недопустимо для авторов:базовый шрифт, bgsound, рамка, распорка, wbr

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

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

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

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

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

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

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

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

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

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

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

<title/>

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

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

<title/>

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

<script/>

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

<hr /> это другой

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top