Пробел перед закрывающей косой чертой?

Я часто видел пробел перед закрывающей косой чертой в тегах XML и HTML. Разрыв строки XHTML, вероятно, является каноническим примером:

<br />

вместо:

<br/>

Пространство кажется лишним. На самом деле считаю, что это лишнее.

Для чего написано это пространство?

Я читал, что это пространство решает некоторые «проблемы с обратной совместимостью». Какие проблемы с обратной совместимостью? Эти вопросы по-прежнему актуальны, или мы все еще добавляем лишние пробелы, скажем, для совместимости с IE3? Есть ли какая-то спецификация с окончательным ответом на это?

Если не обратная совместимость, то это проблема читабельности? Похоже на дискуссию о Великой открытой фигурной скобке?

void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{

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


person Greg Mattes    schedule 20.01.2009    source источник
comment
Я так привыкла к этому, что ‹br /› выглядит намного лучше, чем ‹br/›   -  person mk12    schedule 31.10.2009


Ответы (8)


Ответ заключается в том, что люди хотят придерживаться Приложения C спецификации XHTML1.0. Что вам нужно сделать, только если вы обслуживаете XHTML как text / html. Что и делает большинство людей, потому что настоящий MIME-тип XHTML (application / html + xml) не работает в Internet Explorer.

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

Пространство, необходимое для обеспечения того, чтобы парсеры HTML обрабатывали завершающую косую черту как нераспознанный атрибут.

person Lee Kowalkowski    schedule 20.01.2009
comment
Можете ли вы подробнее рассказать о том, что было раньше? Год и / или версия браузера подойдут, спасибо! - person Greg Mattes; 20.01.2009
comment
Я думаю, что w3.org/TR/xhtml1/#C_2 является более точным ссылка на этот ответ. Итак, кажется, что приложение C2 XHTML 1.0 фактически устарело, и что написание места - это чисто дело вкуса. - person Greg Mattes; 25.01.2009
comment
Извините, это использовалось, чтобы быть - в отношении проверки того, что HTML-синтаксический анализатор обрабатывает завершающую косую черту как нераспознанный атрибут, не все HTML-анализаторы являются браузерами. Я не хотел бы рисковать предположить, какая версия браузера подавилась, но я не помню, чтобы IE4 или Netscape 4 жаловались. - person Lee Kowalkowski; 17.02.2009
comment
на самом деле настоящий тип MIME - это application / xhtml + xml. - person mk12; 31.10.2009
comment
Ах да, не искал и никогда не использую, потому что IE все равно давится! - person Lee Kowalkowski; 12.11.2009
comment
Кажется, это было Netscape 4, которому требовалось место: stackoverflow.com/a/305466/37147 - person Jan Aagaard; 09.11.2012
comment
@JanAagaard: Не знаю, если бы это было так, я бы это запомнил - я начал веб-разработку на IE4 и Netscape 4. В том ответе, на который вы связались, тоже есть комментарий на этот счет, в нем говорится, что на самом деле это Netscape 3. - person Lee Kowalkowski; 09.11.2012
comment
@LeeKowalkowski На самом деле приложение C помечено как информативное, следовательно, ненормативное. Но сейчас это чисто косметический вопрос. - person Édouard Lopez; 09.11.2013
comment
@EdouardLopez: вы правы, но средний автор HTML, читающий спецификацию, не заметит этого или не поймет, насколько это важно. - person Lee Kowalkowski; 10.11.2013

«Netscape

Поддержка ответа bobince со снимком экрана Netscape 4.80 с документами

data:text/html,<title>space</title>foo<br />bar

(вверху слева, разрыв строки отображается) и

data:text/html,<title>no space</title>foo<br/>bar

(внизу слева, перенос строки игнорируется).


Публикация в качестве ответа, чтобы показать картинку

Тангенциально связанный: на самом деле у меня был длинный ответ, определяющий причину такого неправильного поведения старых браузеров (и вытекающую из этого рекомендацию включать пробел) в неправильно понятых спецификациях SGML, а именно SGML Null End Tag (NET) (где 1<tag/2/3 равно 1<tag>2</tag>3, поэтому 1<tag/>2 на самом деле означает 1<tag>>2), но не только мне не удалось найти хорошее доказательная и конкретная версия стандарта, я даже не мог понять правильного поведения, соответствующего стандарту. Так немного сырых ссылок для справки:

(Невозможно воспроизвести там сейчас, но поддерживает утверждение Ли Ковальковски о нескольких браузерах, затронутых этим.)

  • XML W3C Working Draft 07-Aug-97 - последний проект спецификаций, который включает ссылка на нулевой конечный тег в фрагменте DTD: NET "/>"
person myf    schedule 17.06.2015

Эти вопросы по-прежнему актуальны, или мы все еще добавляем лишние пробелы, скажем, для совместимости с IE3?

Вы были близки - это для Netscape 4.

Интересно видеть другие рационализации, но это все, для чего он был предназначен.

person bobince    schedule 21.01.2009
comment
Спасибо! Вы можете дать ссылку на это? - person Greg Mattes; 21.01.2009
comment
Хм, трудно найти первоисточники в этом старом ... в официальных материалах W3 не упоминается ни один UA, а обсуждение в списках, похоже, воспринимает ситуацию как прочитанную. Вероятно, были и другие UA, которым тоже требовалось место, но N4 был последним, что доставляло веб-мастерам проблемы на долгие годы. - person bobince; 21.01.2009
comment
Это было сделано для того, чтобы ваш документ XHTML также отображался в Netscape. В частности, это было для тегов прерывания и тегов изображений. Основной источник: я писал код для совместимости с IE4 и NS3 10 лет назад. - person Philihp Busby; 25.02.2015

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

person Andrew Hare    schedule 20.01.2009
comment
Какие конкретно старые браузеры? Мне интересно узнать, говорим ли мы о браузерах со значительной долей рынка. - person Greg Mattes; 20.01.2009
comment
Не были. IE5 и старше в основном. - person jmucchiello; 20.01.2009

В XHTML теги br должны быть закрыты, но пространство не обязательно . Это стилистическая вещь. В HTML теги br не могут быть закрыты, поэтому оба неверны.

person Pesto    schedule 20.01.2009
comment
Приложение C этого документа говорит, что у вас должен быть пробел. - person 182764125216; 26.08.2016

Пространство только делает теги более читабельными. Я большой сторонник форматирования для более читаемого кода. Такие мелочи имеют большое значение. Без пробела закрывающий тег сливается с открывающим тегом. Мне требуется на мгновение больше времени, чтобы обработать его, так как я быстро читаю код.

person Jim Petkus    schedule 20.01.2009

Что, если бы там был очень ленивый писатель HTML или, может быть, он боялся кавычек. Если бы вы были его роботом-сканером страниц, подумайте о следующем ...

<img src=http://myunquotedurl.com/image.jpg />

против

<img src=http://myunquotedurl.com/image.jpg/>

Это может показаться маленьким, но посмотрите, что он может сделать, если места нет. Робот не узнает, является ли косая черта частью URL-адреса или частью закрывающего тега.

person Jim True    schedule 16.06.2015
comment
Хорошо, но в любом случае должны быть кавычки вокруг URL. - person Florian Wendelborn; 31.08.2015

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

Сегодня я больше не использую пустое пространство, потому что у меня никогда не было проблем с отсутствием белого пространства.

person nicruo    schedule 20.01.2009
comment
укреплять - подходящее слово для обозначения сильного - person Hao; 20.01.2009
comment
спасибо, что заметили это. Приятно видеть, что здесь есть люди, которые следят за качеством письма. - person nicruo; 20.01.2009