Пробел перед закрытием косой черты? - PullRequest
86 голосов
/ 20 января 2009

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

<br />

вместо:

<br/>

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

В чем причина написания этого пробела?

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

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

void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{

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

Ответы [ 8 ]

60 голосов
/ 20 января 2009

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

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

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

24 голосов
/ 17 июня 2015

image and
in HTML">

Поддержка Ответ Бобинса со скриншотом 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 * 1023) *) (где 1<tag/2/3 равно 1<tag>2</tag>3, поэтому 1<tag/>2 на самом деле означало бы 1<tag>>2), но не только я не смог найти хорошее доказательство и конкретную версию стандарта, я даже не смог понять правильное поведение, соответствующее стандартам. Так что несколько сырых ссылок для справки:

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

24 голосов
/ 21 января 2009

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

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

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

4 голосов
/ 20 января 2009

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

3 голосов
/ 20 января 2009

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

1 голос
/ 16 июня 2015

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

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

против

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

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

1 голос
/ 20 января 2009

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

0 голосов
/ 20 января 2009

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

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

...