Подтвердить что ты не робот

Почему HTML требует, чтобы несколько пространств отображались как одно пространство в браузере?

Я давно признал, что любой набор пробелов в файле HTML будет отображаться только как одно пространство. Например, это:

<p>Hello.        Hello. Hello. Hello.                       Hello.</p>

отображается как:

Здравствуйте. Здравствуйте. Здравствуйте. Здравствуйте. Здравствуйте.

Это отлично, как будто вам нужно несколько пробелов в форматированном тексте, вы можете просто использовать <pre> тег. Но в чем причина? Точнее, почему это в спецификации для HTML?

4b9b3361

Ответ 1

Пространства уплотняются в HTML, потому что существует различие между тем, как форматируется HTML и как его следует визуализировать. Рассмотрим такую ​​страницу:

<html>
    <body>
        <a href="mylink">A link</a>
    </body>
</html>

Если HTML был отступом, используя пробелы, например, ссылка будет предшествовать нескольким пробелам.

Ответ 2

Чтобы попытаться решить проблему "почему", это может быть связано с тем, что HTML был основан на SGML, который указал его таким образом. Это было в свою очередь основано на

Ответ 3

Это не только the спецификация, но есть смысл. Если пробелы не были уплотнены, вы должны были бы поместить весь свой html в одну строку. так что-то вроде этого:

<div>
    <h1>Title</h1>
    <p>
       This is some text
       <a href="#">Read More</a>
    </p>
</div>

Было бы странное выравнивание с пробелами повсюду. Единственный способ исправить это - это компактный код, который будет трудно поддерживать.

Ответ 4

"Почему несколько пробелов преобразуются в одиночные пробелы?"

Во-первых, "почему" вопросы трудно ответить. Это в спецификации. Это в значительной степени конец.

Учтите, что существует несколько видов пробелов.

  • Пробел между тегами. <p>\n<b>hi</b>\n</p>

  • Пробел в содержимом тега. <p>Hi <i>everyone</i>.</p>

  • Свободное пространство в разделе <pre> или CDATA.

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

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

Ответ 5

Как говорили другие, это в спецификации HTML.

Если вы хотите сохранить пробел в выводе, вы можете использовать <pre> тег:

<pre>This     text has              extra spaces

and

    newlines</pre>

Но это также обычно отображает текст в другом шрифте.

Ответ 6

Если браузеры этого не сделали, было бы сложно отформатировать HTML-код, чтобы сделать его легко читаемым. Например, вы можете отформатировать свой код следующим образом:

<html>
<body>
    <div>
        I like to indent all content that is inside div tags.
    </div>
</body>
</html>

Если браузер не игнорирует восемь или около того пробелов перед текстом внутри тега div, ваша веб-страница может выглядеть не так, как вы предполагали.

Ответ 7

Это в спецификации HTML. Это часть пространств между словами, которые отображаются как пространство ASCII.

http://www.w3.org/TR/html401/struct/text.html

Ответ 8

Простой, он в спецификации.

Из спецификации HTML раздел 9.1:

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

Ответ 9

Чтобы ответить, почему это указано в спецификации для HTML? вы должны учитывать происхождение HTML.

Тим Бернерс-Ли разработал HTML для обмена научными документами. Он основывал его на ранее существовавших синтаксических идеях в SGML, который также имеет аналогичные методы обработки пробелов.

Можно себе представить, что более ранние авторы HTML в CERN сделали это без помощи инструментов WYSIWYG, и поэтому способность обрабатывать пробелы таким образом помогает разборчивость таких рукописных исходных файлов.

Ответ 10

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

Использовать одно пространство между предложениями

Использовать одно слово в пространстве между предложениями

Ответ 11

Обычно эти проектные решения не документируются в каких-либо спецификациях и могут быть получены только из архивов обсуждения рабочей группы, которые являются общедоступными или объясняются самими авторами. Однако в этом конкретном случае HTML 3.2 содержит следующее:

За исключением внутри буквального текста (например, элемент PRE), HTML обрабатывает непрерывные последовательности символов пробела как эквивалентные одному пространственному символу (ASCII decimal 32). Эти правила позволяют авторам значительную гибкость при непосредственном редактировании помеченного текста. Обратите внимание, что будущие изменения HTML могут допускать интерпретацию символа горизонтальной вкладки (ASCII десятичное число 9) относительно правила табуляции, определенного связанной таблицей стилей.

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

<H1>Lorem ipsum</H1>
<P>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fastidii oportere
   consulatu no quo. Vix saepe labores an, pri illud mentitum et, ex suas quas
   duo. Sit utinam volutpat ea, id vis cibo meis dolorum, eam docendi
   accommodare voluptatibus no. Id quaeque electram vim, ut sed singulis
   neglegentur, ne graece alterum has. Simul partiendo quaerendum et his.

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

Никакая другая спецификация HTML не предлагает каких-либо аргументов за это дизайнерское решение. В частности, HTML 4 описывает только поведение сворачивания, а HTML5 и живую спецификацию откладываются до CSS, которые ничего не объясняет. Более ранние версии HTML также не содержат никаких объяснений, хотя следующий фрагмент кода появляется в примерном фрагменте в HTML 2.0:

<OL>
...
  <UL COMPACT>
  ...
  <LI> Whitespace may be used to assist in reading the
       HTML source.
  </UL>
...
</OL>

Ответ 12

В определении/спецификациях HTML четко указано, что игнорировать лишние пробелы.

Если вы хотите включить дополнительные пробелы, используйте тег <pre> или &nbsp;