2009-02-25 8 views
47

は、最も長い時間のために、私は、例えば、それらの間に改行がある場合にブラウザがレンダリングされたHTML要素の間の空きスペースを追加する理由を理解するために思っている:なぜブラウザは改行をスペースとしてレンダリングするのですか?

<span>Hello</span><span>World</span> 

HTMLが出力されます上記の「HelloWorldのを」「こんにちは」と「世界」の間にスペースのない文字列、しかし次の例では:

<span>Hello</span> 
<span>World</span> 

意志の出力A「Hello World」の「の間にスペースを持つ文字列上記のhtml彼「llo」と「World」です。

これはちょうどそれが動作する方法であることを受け入れても問題はありませんが、私が少しバグがあるのは、html要素間のスペース(または改行)が問題ではないという印象を常に受け​​ていたことですブラウザがhtmlをユーザにレンダリングした時点で。

私の質問は誰もがこの動作の背後にある哲学的または技術的理由を知っている場合です。

ありがとうございます。

答えて

44

ブラウザは、レンダリング時に複数の空白文字(改行を含む)を1つのスペースに圧縮します。唯一の例外は<pre>要素内またはCSS property white-spacepreまたはpre-wrapに設定されている要素です。 (XHTMLの場合はxml:space="preserve"属性)

+0

または 'white-space:pre-line;' –

+0

@AndrewEvt私が知る限り、 'pre-line'は改行を除いて、複数のスペースを崩壊させます。あなたのコメントは私に 'プレラップ'を見いださせた。 –

1

2つのタグの間に 'a'という文字がある場合、そのタグがレンダリングされると考えられます。この場合、2つのタグの間に文字 '\ n'があります。その動作は類似しており、一貫性があります( '\ n'は単一の空白としてレンダリングされます)。

47

も空白文字です。しかし、インライン要素間の空白は1つの空間に変換されます。その理由は、インライン要素が親要素の通常の内部テキストに散在している可能性があるということです。

は、以下の例を考えてみます

This is my colored HelloWorld example 
:理想的な場合には

<p>This is my colored <span class="red_text">Hello</span> <span class="blue_text">World</span> example</p> 

を、ユーザーがしかしにつながる2つのスパン間の空白を削除

This is my colored Hello World example 

を見たいです

しかし、同じサンプルは、著者によって書き直すことができます(HTMLフォーマットについてのOCD ng :-)):

<p> 
    This is my colored 
    <span class="red_text">Hello</span> 
    <span class="blue_text">World</span> 
    example 
</p> 

これが前の例と一貫してレンダリングされた方が良いでしょう。

+0

私は同じ問題に直面しているので、私はこれを見てきました。ニース、説明的な答え。上記の例では、新しい行に関係なく、ブラウザ間にスペースが必要な場合は、いいでしょう。私は、Sublimeのようなテキストエディタに問題があるかもしれないことを知っています.Sublimeは空白を整えることができますが、それは私にとって意味があります。これはdoctype(transitional、stringなど)には当てはまりませんか?私は、同じマークアップを使用するいくつかのウェブサイトをホストしていることを意味しますが、他のサイトよりもいくつかのサイトで白いスペースが多く見られます。 doctypeが理由である場合、私はこのことに注目していきます。 – ClarkeyBoy

-1

ブラウザは、ここでミスを犯す:

http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.1

SGMLは([ISO8879]、セクション7.6.1を参照してください)改行がなければならないとすぐに開始タグを次の行ブレークが、無視されなければならないことを指定します終了タグの直前。これはすべてのHTML要素に例外なく適用されます。

+3

いいえ、あなたは間違いを犯しています:OPの例の改行は、*終了タグの後です! –

関連する問題