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

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

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

Разве это не по умолчанию одна из целей XHTML? Я думал, что одним из преимуществ XHTML является то, что вы можете использовать генератор XML для генерации HTML. Почему любой XML-генератор должен знать, какие теги могут быть самозакрывающимися? Слишком странно.

Elijah 12.11.2008 02:24

Причина, по которой был принят «хромой», «неправильный» ответ, состоит в том, что он отвечал на вопрос, который явно задавал Каменс. Он хотел знать, какие элементы могут быть самозакрывавшимися при обслуживании XHTML как text / html, не вызывая проблем с рендерингом в браузерах. Многие страницы написаны на XHTML и обслуживаются как text / html, даже если это технически некорректно. С помощью этого разъяснения вопрос можно было бы улучшить, но ответ на другой вопрос (что происходит, когда вы выполняете роль application / xml или должны ли отдельные теги в text / html иметь закрытие /) в этом случае не помогает.

Nick Lockwood 11.08.2011 10:40
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
191
2
93 082
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

<hr /> - еще один

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

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

Исправлена ​​и очищена разметка. Будьте осторожны со ссылками на этих страницах, они медленно загружаются.

e-satis 22.09.2011 17:36

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

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />
w3schools.com/tags/default.asp I see 12 tags ending with /> : "area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"
mpen 23.10.2010 10:37

Обратите внимание, что W3schools не является аффилированным лицом W3C и даже не отвечает на исправления, отправленные членами W3C.

Kornel 05.11.2010 13:02

Как это часто бывает, w3schools почти прав. Точный способ найти пустые элементы - запустить grep EMPTY xhtml1-strict.dtd | sort или grep EMPTY xhtml1-transitional.dtd | sort.

cayhorstmann 20.01.2013 06:00

ИМХО, люди слишком сильно бьют W3Schools. Он зарекомендовал себя как отличный ресурс, когда вы НАЧИНАЕТЕ (!) Заниматься темой, о которой ничего не знаете.

Priidu Neemre 02.10.2015 11:00

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

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

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

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

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

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

Затрагивает все версии MSIE: webbugtrack.blogspot.com/2007/08/…

scunliffe 02.10.2008 00:59

<script> не закрывается автоматически в Firefox 3.

hsivonen 12.11.2008 11:11

Ну, когда я столкнулся с этим, раньше это работало в Firefox. Похоже, он больше не работает ни в одном браузере. Может также работать только в режиме причуд?

Erik van Brakel 15.11.2009 21:59

@erickson он отлично работает в Firefox, если ты правильно определит ваш тип MIME.

Kornel 13.06.2010 23:00

WebKit продолжает делать это по соображениям совместимости.

Yuhong Bao 31.05.2011 12:10

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

<title/>

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

Chromium тоже не любит теги <title/>.

uınbɐɥs 24.09.2012 05:23
Ответ принят как подходящий

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

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

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

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

The HTML WG has discussed this issue: the intention was to allow old (HTML-only) browsers to accept XHTML 1.0 documents by following the guidelines, and serving them as text/html. Therefore, documents served as text/html should be treated as HTML and not as XHTML.

Это очень распространенная ошибка, потому что W3C Validator в значительной степени игнорирует это правило, но браузеры неукоснительно следуют ему. Читать Понимание HTML, XML и XHTML из блога WebKit:

In fact, the vast majority of supposedly XHTML documents on the internet are served as text/html. Which means they are not XHTML at all, but actually invalid HTML that’s getting by on the error handling of HTML parsers. All those “Valid XHTML 1.0!” links on the web are really saying “Invalid 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 vs 2). Если вы не можете верить своим глазам (или не знаете, как устанавливать типы MIME), откройте свою страницу через Прокси-сервер XHTML.

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

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


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

Empty-element tags may be used for any element which has no content, whether or not it is declared using the keyword EMPTY.

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

Empty elements must either have an end tag or the start tag must end with />. For instance, <br/> or <hr></hr>

Неправильный afaik, потому что использование самозакрывающихся версий <script> или <div> приводит к разному рендерингу / интерпретации.

ZeissS 13.06.2010 16:18

@ZeissS Только в text/html. В реальном XHTML, отправленном как application/xhtml+xml, он работает нормально. Пожалуйста, прочтите статью, на которую я ссылаюсь (или приложение C спецификации XHTML), прежде чем голосовать против.

Kornel 13.06.2010 22:37

@porneL, можешь ли ты уточнить в терминах (X) HTML5? Какие отличия от современных браузеров, поддерживающих такую ​​разметку, следует учитывать?

arxpoetica 02.11.2010 16:59

@pornel, можете ли вы гарантировать, что самозакрывающиеся теги <script /> будут работать в старых браузерах? Я так не думаю. Вы говорите авторитетно, и большая часть вашей информации точна, но опыт подсказывает мне, что самозакрывающиеся теги скрипта будут проблематичными, и лучше всего полностью избегать их, чем вызывать у себя головную боль.

Metagrapher 25.03.2011 19:44

@Metagrapher, если старые браузеры не поддерживают настоящий XHTML, ИЛИ вы не можете установить тип MIME, это не сработает. Однако в браузерах с поддержкой XHTML (на данный момент все основные) с типом application/xhtml+xml MIME я могу гарантировать, что <script/> будет работать. С типом MIME. Только.

Kornel 26.03.2011 14:18

IE9 может «поддерживать» это, но попробуйте сделать <label id = 'x' /> поверх группы переключателей и посмотрите, как это НЕ ИСПОЛЬЗУЕТСЯ !!!

capdragon 10.06.2011 23:03

@capdragon: <label/> отлично работает в IE9 - с правильным типом MIME. В цитируемой вами статье не упоминается используемый тип MIME, поэтому я предполагаю, что им (и вам) нужно очень внимательно прочитать мой ответ.

Kornel 11.06.2011 19:13

@porneL: Это не решение, потому что мне нужно поддерживать старые браузеры.

capdragon 13.06.2011 17:30

@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 01.09.2011 01:09

Чтобы повторить это ... XHTML должен обслуживаться как 'application / xhtml + xml', но он полностью сломан во всех современных браузерах, включая IE9, потому что такие элементы, как 'document.write' и 'document.cookie' не существуют, а многие скрипты сломаются, даже если в остальном страница отображается нормально. ПОЭТОМУ, вам лучше придерживаться обслуживания контента с типом MIME 'text / html' и лучше всего придерживаться рекомендаций HTML 5, потому что стандарт HTML 5 был разработан, чтобы охватить суп тегов (некоторая смесь HTML и XHTML) в четко очерченная усадьба (о чем свидетельствует слияние XHTML2 WG с HTML5).

Triynko 01.09.2011 01:16

<a> не закрывается автоматически в Chrome 18, Firefox 11, Safari 5.1 или Opera 11 с типом документа XHTML 1.1 или HTML 5 (не проверял IE).

Slipp D. Thompson 21.04.2012 04:42

@SlippDouglas, это правильно, пожалуйста, прочтите внимательно, почему DOCTYPE не имеет значения. Он самозакрывается во всех этих браузерах, когда вы используете XHTML / HTML5 + XML правильно.

Kornel 23.04.2012 03:47

Ах ... теперь я понимаю. Спасибо, @porneL. Я даже не знал о существовании HTML5 + XML, просто простой HTML5. Думаю, этот вопрос действительно устарел.

Slipp D. Thompson 23.04.2012 22:41

Это абсолютно увлекательно - что действительно удивительно, так это то, что домашняя страница w3c объявляет тип документа xhtml, но тип mime text / html в заголовке. Судя по тому, что вы говорите, я думаю, это очень неверно.

Jonathan 08.03.2013 01:32

Этот вопрос, получивший большое количество голосов, кажется неправильным? Согласно спецификации W3C, никакие элементы, которые могут содержать контент, не могут быть самозакрывающимися в XHTML. Кроме того, если вы сами закрываете div, он даже не отображается должным образом в большинстве современных браузеров (например, <div style = 'clear: both;' /> не работает). Я что-то пропустил?

NickG 23.01.2014 16:03

@NickG да, вам не хватает настройки правильного HTTP-заголовка Content-Type, и ваш XHTML в конечном итоге анализируется как недопустимый HTML. Пожалуйста внимательно прочтите все страницы, на которые я дал ссылки, которые точно объясняют, почему казаться не работает на вас. Спецификация XHTML запрещает / требует, чтобы некоторые элементы имели контент, но это ортогонально синтаксису XML, который он использует, и синтаксическая разница полностью исчезает на уровне DOM (если анализируется в соответствующем режиме, настраивается только через XML Content-Type).

Kornel 23.01.2014 17:31

@porneL Но независимо от того, что физически работает обозреватель, самозакрывающиеся div недействительны в соответствии со спецификацией W3C, поскольку они могут содержать контент. См .: stackoverflow.com/questions/7971716/… Насколько я могу судить, ваш ответ неверен, поскольку спрашивающий спрашивает, что действительно, а не то, что можно заставить работать.

NickG 23.01.2014 17:32

@porneL Связанный ответ все еще действителен. XHTML НЕ допускает самозакрывающихся div ни при каких обстоятельствах. См .: w3.org/TR/xhtml-media-types/#C_2 В нем говорится: «Если элемент разрешает содержимое (например, элемент div), но экземпляр этого элемента не имеет содержимого (например, пустой раздел), НЕ используйте« минимизированный »синтаксис тега (например, <div / >) ".

NickG 23.01.2014 17:37

@NickG 1. Документ, на который вы ссылаетесь, является Примечание W3C, что означает, что не удалось становится Рекомендацией. 2. Это не спецификация, описывающая, что допустимо, это просто предложение, что делать, чтобы обойти отсутствие поддержки XHTML в старых браузерах.

Kornel 23.01.2014 17:41

«Все эти« Valid XHTML 1.0! » ссылки в Интернете действительно говорят: «Неверный HTML 4.01!» --- Это неверно или, по крайней мере, очень неточно. См. w3.org/TR/xhtml1. XHTML 1.0 явно разрешил обслуживание документов как тип мультимедиа text / html, в то время как XHTML 1.1 принудительно применяет application / xhtml + xml, поэтому было невозможно обслуживать последнее, например, в IE6.

C.O. 03.12.2015 19:52

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

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

Действительно для авторов: area, base, br, col, command, embed, eventource, hr, img, input, link, meta, param, source

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

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

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

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

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

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

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

<title/>

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

<script/>

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

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

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

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

basefont, bgsound, frame, isindex

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

A void element is an element whose content model never allows it to have contents under any circumstances.

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

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

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

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

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