57

HTML ファイル内の空白のセットは、単一のスペースとしてのみ表示されることを以前から認識していました。たとえば、これは次のとおりです。

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

次のように表示されます。

こんにちは。こんにちは。こんにちは。こんにちは。こんにちは。

書式設定済みテキストの複数のスペースが必要な場合は、<pre> タグを使用するだけでよいため、これはまったく問題ありません。しかし、その理由は何ですか?より正確には、なぜこれが HTML の仕様に含まれているのでしょうか?

4

12 に答える 12

45

HTML のフォーマット方法とレンダリング方法には違いがあるため、HTML ではスペースが圧縮されます。次のようなページを考えてみましょう:

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

たとえば、HTML がスペースを使用してインデントされている場合、リンクの前に複数のスペースが追加されます。

于 2009-01-11T19:45:09.820 に答える
20

「なぜ」に対処しようとすると、HTMLがそのように指定されたSGMLに基づいていたことが原因である可能性があります。それは60年代初頭からのGMLに基づいていました。空白を処理する理由は、当時、データが一度に1つの「カード」に入力されたため、文や段落が望ましくなく分割される可能性があるためです。古いGMLの違いの1つは、スペースがマークアップから独立しているという前例を確立した可能性のある、文の間に2つのスペースが必要であると指定したことです(古いタイプライターの規則のように)。

于 2009-01-11T20:15:12.847 に答える
19

他の人が言ったように、それは HTML 仕様にあります。

出力で空白を保持したい場合は、<pre> タグを使用できます。

<pre>This     text has              extra spaces

and

    newlines</pre>

ただし、これは通常、テキストを別のフォントで表示します。

于 2009-01-11T19:45:17.183 に答える
13

仕様だけでなく それなりの意味があります。スペースが圧縮されていない場合は、すべての html を 1 行に配置する必要があります。このようなもの:

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

いたるところにあるスペースとの奇妙な整列があります。それを正しく行う唯一の方法は、そのコードを圧縮することですが、これは保守が困難です。

于 2009-01-11T19:45:24.610 に答える
13

「複数のスペースが単一のスペースに変換されるのはなぜですか?」

まず、「なぜ」という質問は答えにくいものです。それは仕様にあります。それはほとんどそれの終わりです。

空白にはいくつかの種類があると考えてください。

  • タグ間の空白。 <p>\n<b>hi</b>\n</p>

  • タグ内のコンテンツの空白。 <p>Hi <i>everyone</i>.</p>

  • <pre>または CDATA セクションの空白。

最初の 2 つは区別するのが難しいです。XML であっても、タグ間の空白は「オプション」です。しかし、「混合コンテンツ モデル」と呼ばれるもの、つまりタグがコンテンツと混在している場合、「タグ間」、「コンテンツ内だがタグ間」、「コンテンツ内だがタグ間ではない」という微妙な違いを理解することは不可能です。整理する。

だから彼らはそれを整理しません。タグ間の空白とコンテンツ内の空白はすべてオプションです。

于 2009-01-11T19:45:48.773 に答える
8

ブラウザーがこれを行わない場合、HTML コードをフォーマットして読みやすくすることが困難になる可能性があります。たとえば、コードを次のようにフォーマットすることができます。

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

ブラウザーが div タグ内のテキストの前にある 8 つほどのスペースを無視しない場合、Web ページが意図したとおりに表示されない可能性があります。

于 2009-01-11T20:01:44.747 に答える
5

通常、これらの設計上の決定はどの仕様にも文書化されておらず、たまたま公開されているか、仕様の作成者自身によって説明されているワーキング グループのディスカッション アーカイブからのみ収集できます。ただし、この特定のケースでは、HTML 3.2は次のように述べています。

リテラル テキスト (要素など) 内を除いてPRE、HTML は空白文字の連続したシーケンスを単一の空白文字 (ASCII 10 進数 32) と同等に扱います。これらの規則により、作成者はマークアップされたテキストを直接編集する際にかなりの柔軟性を得ることができます。HTML の将来の改訂では、関連付けられたスタイル シートで定義されたタブ ルールに関して、水平タブ文字 (ASCII 10 進数 9) の解釈が可能になる可能性があることに注意してください。

もちろん、今日見られる動作は、HTML 3.2 で指定されたものよりもはるかに複雑ですが、その理由はまだ当てはまると思います。この柔軟性が役立つ例の 1 つは、ハードラップしてインデントする予定の長い段落がある場合です。

<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 に従っており、これも何も説明していません。HTML の以前のバージョンにも説明は含まれていませんが、次の抜粋はHTML 2.0のサンプル スニペットに表示されます。

<OL>
...
  <UL COMPACT>
  ...
  <LI> Whitespace may be used to assist in reading the
       HTML source.
  </UL>
...
</OL>
于 2017-08-02T04:37:42.823 に答える
4

それはHTML仕様にあります。ASCII スペースとしてレンダリングされる単語間スペースに関する部分です。

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

于 2009-01-11T19:40:39.830 に答える
4

シンプルに、それは仕様にあります。

HTML 仕様のセクション 9.1から:

特に、ユーザー エージェントは、出力の単語間スペースを生成するときに、入力の空白シーケンスを折りたたむ必要があります。

于 2009-01-11T19:41:01.467 に答える
3

なぜこれがHTMLの仕様に含まれているのでしょうか。HTMLの起源を考慮する必要があります。

Tim Berners-Leeは、科学文書を共有するためのHTMLを設計しました。彼はそれをSGMLの既存の構文のアイデアに基づいており、これも同様の空白の扱いを持っています。

CERNのHTMLの初期の作成者は、WYSIWYGツールを使用せずにこれを行ったため、このように空白を処理する機能は、このような手書きのソースファイルの読みやすさを向上させます。

于 2009-01-11T20:21:03.913 に答える
3

HTML の定義/仕様では、余分な空白を無視することが明確に規定されています。

余分なスペースを含める場合は、<pre>タグまたは&nbsp;

于 2009-01-11T19:43:49.183 に答える
2

活版印刷の答えもあります。学校のタイピング教師があなたに何を言ったかに関係なく、単語と文の間にはスペースを1つだけ入れる必要があります。

文の間に1つのスペースを使用する

文の間に単一の単語スペースを使用する

于 2009-01-11T20:21:25.160 に答える