почему <br /> а не <br/>? - PullRequest
       25

почему <br /> а не <br/>?

20 голосов
/ 02 ноября 2009

Это одна из тех вещей, которые вы однажды прочитали, скажите «ага!» а потом забудь. Точно мой случай.

Почему тег разрыва строки в xhtml преимущественно пишется с пробелом <br />, а не в формате ok 100 * *? Я помню, что причина была интересной, и, как вы можете себе представить, найти ее нелегко в Google.

Конечно, это не проблема правильной формы XML. От W3C

[44]    EmptyElemTag       ::=      '<' Name (S Attribute)* S? '/>' 

   Empty-element tags may be used for any element which has no content, whether
   or not it is declared using the keyword EMPTY. For interoperability, the 
   empty-element tag should be used, and should only be used, for elements which 
   are declared EMPTY.

Examples of empty elements:

<IMG align="left"  src="http://www.w3.org/Icons/WWW/w3c_home" /> 
<br></br> 
<br/>

Так что пробел в конце необязательный.

Ответы [ 13 ]

45 голосов
/ 19 января 2010

w3c определяет это как грамматику:

EmptyElemTag       ::=      '<' Name (S Attribute)* S? '/>'

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

23 голосов
/ 19 января 2010

Некоторые старые браузеры неправильно анализировали элемент без пробела, поэтому большинство веб-разработчиков используют <br />. Я не помню, какие браузеры не по назначению, но я считаю, что они почти вымерли.

РЕДАКТИРОВАТЬ : Браузером был Netscape 4 .

21 голосов
/ 02 ноября 2009

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

Редактировать: Ах, вот и мы:

http://www.w3.org/TR/xhtml1/#guidelines

Включите пробел перед завершающими / и> пустыми элементами, например, <br />, <hr /> и <img src="karen.jpg" alt="Karen" />. Кроме того, используйте минимизированный синтаксис тега для пустых элементов, например, <br />, так как альтернативный синтаксис <br></br>, разрешенный XML, дает неопределенные результаты во многих существующих пользовательских агентах.

15 голосов
/ 19 января 2010

В XHTML нет правильного пути. Они формально идентичны в XML. Пробелы не имеют значения в этом месте.

9 голосов
/ 19 января 2010

Для XHTML: оба. Для HTML4 и более ранних версий: нет.

7 голосов
/ 02 ноября 2009

Небольшой фон, чтобы добавить к ответу Мэтта Гамильтона.

По крайней мере одним проблемным браузером был Netscape 4. Быстрая проверка показывает, что в этом браузере
(то есть без пробелов) не происходит разрыв строки. На самом деле, похоже, он ничего не делает.
(то есть с пробелом) выполняет разрыв строки.

При создании документов полиглотов, которые могут вести себя как XHTML или HTML (Примечание: «вести себя как» - не «допустимо»), необходимо использовать либо
, либо
. Однако в старых браузерах и даже в современных браузерах при рендеринге страницы в режиме причуд ведет себя как
, поэтому
приводит к двум разрывам строк.

7 голосов
/ 02 ноября 2009

<br /> - действительный (старый) HTML, а <br/> - нет. Если вы используете свой XHTML как XML, это не имеет значения. Если вы используете его как text/html, то он должен быть действительным HTML в дополнение к действительному XHTML. (Зачем использовать XHTML в качестве HTML? Потому что IE не понимает XHTML как XML, и потому что ни один крупный браузер не начнет отображать XHTML в середине загрузки текста, но они сделают это в HTML. Мой блог загружается медленно не потому, что сайт работает медленно, но поскольку браузер не начнет отображать страницу, пока все не будет загружено. Я ненавижу браузеры.)

5 голосов
/ 19 января 2010

Оба <br/> и <br /> являются правильными. Причина, по которой <br /> возникла в первую очередь, заключается в поддержке старых браузеров, которые не понимают новый синтаксис <br/>. Это действительно своего рода хак, где / интерпретируется как атрибут без значения и игнорируется.

4 голосов
/ 19 января 2010

Оба являются правильными, и оба будут приняты веб-браузерами. Вы также можете сохранить себе лишнего персонажа и использовать <br/>

3 голосов
/ 19 января 2010

Оба верны. Но я бы использовал <br /> только для того, чтобы мой код был непротиворечивым ... потому что я бы никогда не написал

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

вместо

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

просто для сохранения байта ... и вторая версия имхо лучше читается. Но это только вопрос вкуса. Делай как хочешь, но делай это последовательно: -)

...