代码之家  ›  专栏  ›  技术社区  ›  Rudd Zwolinski

为什么HTML要求多个空间在浏览器中显示为单个空间?

  •  44
  • Rudd Zwolinski  · 技术社区  · 16 年前

    我早就认识到,HTML文件中的任何一组空白都只能显示为一个空格。例如:

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

    你好你好你好你好你好

    这很好,就像您需要多个预格式化文本空间一样,您只需使用<预处理>标签但原因是什么?更准确地说,,

    12 回复  |  直到 8 年前
        1
  •  43
  •   tristan    16 年前

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

    例如,如果HTML是使用空格缩进的,则链接前面会有几个空格。

        2
  •  18
  •   Zach Hirsch    16 年前

    正如其他人所说,它在HTML规范中。

    如果要在输出中保留空白,可以使用 <pre> tag :

    <pre>This     text has              extra spaces
    
    and
    
        newlines</pre>
    

    但这通常也会以不同的字体显示文本。

        3
  •  18
  •   Turnkey    16 年前

    SGML 这就说明了这一点。这又是基于 GML 从60年代初开始。空白处理的原因很可能是因为数据在当时一次只输入一张“卡片”,这可能会导致句子和段落的意外分离。旧的GML的一个区别是它规定句子之间必须有两个空格(就像旧的打字机规则一样),这可能建立了空格独立于标记的先例。

        4
  •  12
  •   Community CDub    8 年前

    不仅是在 the specification ,但这是有道理的。如果没有压缩空间,您将不得不将所有html放在一行上。比如说:

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

    会有一些奇怪的排列与空间的所有地方。唯一正确的方法是压缩代码,这将很难维护。

        5
  •  12
  •   S.Lott    16 年前

    “为什么将多个空间转换为单个空间?”

    考虑到有几种白色空间。

    • 标签之间的空白。 <p>\n<b>hi</b>\n</p>

    • 标记内内容中的空白。 <p>Hi <i>everyone</i>.</p>

    • 空间中的空白 <pre>

    前两者很难区分。标记之间的空白,即使在XML中,也是“可选的”。但是,当你有一个所谓的“混合内容模型”——标记与内容的混合——“标记之间”和“内容中但标记之间”以及“内容中但不在标记之间”的微妙之处是不可能分辨出来的。

    所以他们没有解决问题。标签之间的空白和内容中的空白都是可选的。

        6
  •  7
  •   Michael    16 年前

    如果浏览器不这样做,则很难格式化HTML代码以使其易于阅读。例如,您可能希望对代码进行如下格式化:

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

        7
  •  5
  •   Community CDub    3 年前

    HTML 3.2 是否声明如下:

    除了文字以外(例如 PRE

    <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和living规范都遵从CSS,后者 doesn't explain anything either . 早期版本的HTML也不包含任何解释,尽管以下摘录确实出现在中的示例代码段中 HTML 2.0

    <OL>
    ...
      <UL COMPACT>
      ...
      <LI> Whitespace may be used to assist in reading the
           HTML source.
      </UL>
    ...
    </OL>
    
        8
  •  3
  •   Chris Farmer Marcelo Cantos    16 年前

    它在HTML规范中。它是关于单词间空间被呈现为ASCII空间的部分。

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

        9
  •  3
  •   casperOne    16 年前

    很简单,它在规范中。

    section 9.1 :

    折叠输入空白序列 在产生输出字间 空间

        10
  •  3
  •   Paul Dixon    16 年前

    为什么这会出现在HTML规范中? 你必须考虑HTML的起源。

    可以想象,CERN早期的HTML作者在没有WYSIWYG工具的帮助下这样做,因此以这种方式处理空白的能力有助于手写源文件的易读性。

        12
  •  2
  •   Sam Hasler zpesk    16 年前

    HTML的定义/规范明确规定忽略多余的空白。

    <pre> 标记或 &nbsp;