игнорируются ли ведущие и конечные пробелы в html?

html4 говорит это:

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

‹P›Мы предлагаем бесплатную ‹A›техническую поддержку‹/A› для подписчиков.‹/P›

и нет:

‹P›Мы предлагаем бесплатную‹A› техническую поддержку ‹/A›для подписчиков.‹/P›

и это:

SGML (см. [ISO8879], раздел 7.6.1) указывает, что разрыв строки сразу после начального тега должен игнорироваться, как и разрыв строки непосредственно перед конечным тегом. Это относится ко всем элементам HTML без исключения.

Следующие два примера HTML должны отображаться одинаково:

‹P›Томас смотрит телевизор.‹/P›

‹P›
Томас смотрит телевизор.
‹/P›

Так же должны быть следующие два примера:

‹A›Мой любимый веб-сайт‹/A›

‹A›
Мой любимый сайт
‹/A›

Таким образом, не следует полагаться на то, что они будут проигнорированы или нет. А как насчет html5?

UPD Или скажем так: могу ли я относиться к ним как к игнорируемым или иногда они имеют значение (проявляют себя так или иначе)? Какими способами, если таковые имеются?

UPD Хм, я должен был сказать, что имел в виду рефакторинг...? Я пытаюсь сделать шаблоны немного более читабельными, вот что заставило меня задуматься об этом.


person x-yuri    schedule 19.11.2014    source источник
comment
Первая часть вопроса касается пробелов, а вторая — разрывов строк. Яблоки/апельсины.   -  person j08691    schedule 19.11.2014
comment
Нет, разрывы строк и пробелы отображаются в HTML-тегах одинаково.   -  person Drazzah    schedule 19.11.2014
comment
Скажем так: разрывы строк — это пробелы в html.   -  person x-yuri    schedule 20.11.2014


Ответы (2)


Пробелы определенно не игнорируются во встроенных тегах (например, <a>, <span>, <strong>, ...), например, в этом примере

<p>We offer free <a>technical support</a> for subscribers.</p>
<p>We offer free<a> technical support </a>for subscribers.</p>

если вы установите CSS что-то вроде этого

a { text-decoration: underline; }

вы определенно можете увидеть разницу.

Иногда разрывы строк могут приводить к странным результатам во встроенных тегах, например, если вы пишете код следующим образом:

<p>We offer free <a>
technical
support
</a> for subscribers.</p>

кажется, что он игнорирует первый разрыв строки, но не последний.

Вот скрипт для обоих примеров: http://jsfiddle.net/Niffler/fnnanru2/

Внутри блочных тегов (т. е. <p>, <h1>, <div>, ...) всегда следует игнорировать пробелы, а также разрывы строк в начале или конце тегов (т. е. <p>test</p> должен выглядеть так же, как <p> test </p>).

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

Кроме того, несколько пробелов или разрывов строк или их комбинации обычно объединяются в один пробел.

person Niffler    schedule 19.11.2014
comment
Sometimes line breaks can produce weird results скрипка лучше иллюстрирует проблему Within block tags (i.e. <p>, <h1>, <div>, ...) spaces as well as line breaks at the beginning or end of the tags should always be ignored кто сказал? У вас есть ссылки на доказательства? - person x-yuri; 20.11.2014

ДОЛЖНЫ ли браузеры игнорировать пробелы, и ЯВЛЯЮТСЯ ли пробелы игнорируемыми браузерами — это два совершенно разных вопроса.

Вы не должны ставить пробелы после открывающего тега, даже если это (иногда) работает. Из-за документации по этому поводу браузеры могут измениться, чтобы подчиняться этому правилу без предварительного уведомления.

Они не должны отображаться одинаково, но в настоящее время большинство браузеров отображают

<P>We offer free<a> technical support </a>for subscribers.</P> и

<P>We offer free <a>technical support</a> for subscribers.</P>

то же.

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

person Drazzah    schedule 19.11.2014
comment
Я считаю, что вы выбрали неправильный тестовый пример, возьмите добычу на моей скрипке. - person x-yuri; 20.11.2014