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

93

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

<br />

вместо того:

<br/>

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

По какой причине написано это пространство?

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

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

void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{

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

Грег Мэттес
источник
5
Я так привык к этому, <br /> просто выглядит намного лучше, чем <br/>
mk12

Ответы:

65

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

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

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

Ли Ковальковски
источник
2
Не могли бы вы уточнить «раньше»? Год и / или версия браузера подойдут, спасибо!
Грег Мэттес,
5
Я думаю, что w3.org/TR/xhtml1/#C_2 - более точная ссылка для этого ответа. Итак, кажется, что приложение C2 XHTML 1.0 фактически устарело, и что написание пространства - это чисто дело вкуса.
Грег Мэттес,
1
Извините, использованное ранее означает "есть" - в отношении того, чтобы убедиться, что анализатор HTML обрабатывает завершающую косую черту как нераспознанный атрибут, не все анализаторы HTML являются браузерами. Я не хотел бы рисковать предположить, какая версия браузера подавилась, но я не помню, чтобы IE4 или Netscape 4 жаловались.
Ли Ковальковски
3
на самом деле настоящий MIME-тип - application / xhtml + xml.
mk12
3
@JanAagaard: Не знаю, если бы это было так, я бы это запомнил - я начал веб-разработку на IE4 и Netscape 4. В ответе, на который вы связались, есть комментарий на этот счет, в нем говорится, что на самом деле это Netscape 3.
Ли Ковальковски,
31

Netscape 4.80 показывает различное поведение <br/> и <br /> в HTML

В поддержку ответа 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 - последний черновик спецификаций, который включает ссылку на Null End Tag во фрагменте DTD:NET "/>"
myf
источник
25

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

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

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

бобинс
источник
2
Благодарность! Вы можете дать ссылку на это?
Грег Мэттс
1
Хм, трудно найти первоисточники в этом старом ... в официальных материалах W3 не упоминается ни один UA, а обсуждение в списках, похоже, воспринимает ситуацию как прочитанную. Вероятно, были и другие UA, которым тоже требовалось место, но N4 был последним, что доставляло веб-мастерам проблемы на долгие годы.
bobince
Это было сделано для того, чтобы ваш документ XHTML также отображался в Netscape. В частности, это было для тегов разрыва и тегов изображений. Основной источник: я писал код для совместимости с IE4 и NS3 10 лет назад.
Филихп Басби,
4

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

Эндрю Хэйр
источник
1
Какие конкретно старые браузеры? Мне интересно узнать, говорим ли мы о браузерах со значительной долей рынка.
Грег Мэттес,
Не были. IE5 и старше в основном.
jmucchiello
3

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

Песто
источник
1
В приложении C к этому документу сказано, что у вас должен быть пробел.
182764125216
3

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

Джим Петкус
источник
0

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

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

против

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

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

Джим Тру
источник
12
Хорошо, но в любом случае вокруг URL должны быть кавычки.
Флориан Вендельборн,
-1

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

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

никруо
источник
1
«усилить» - подходящее слово для «сильного»
Хао
спасибо за заметку. приятно видеть, что здесь есть люди, которые следят за качеством письма.
nicruo