1

誰かが今日、私がHTMLを学び始めたばかりであるため、私が持っているとは決して主張しなかったHTMLの一般的な知識に挑戦することによって、私に嫌がらせをし、侮辱しようとしていました。彼女は私に次の2つの質問をしました。

質問1.htmlマークアップを記述せずに文字列のみを含むhtmlページを作成した場合(本文、html、doctypeなし)、ブラウザがそれをレンダリングし、文字列を段落のように表示するのはなぜですか? ?

これに対して、私はブラウザがそれを段落として表示することができるという最善の推測を使用しました。これが最善の推測であり、作成者が望んでいたものであると想定して欠落しているタグを補うため、手動で書いたことはありません。

質問2.上記の例で、htmlのソースコードの異なる行に複数の文字列を記述した場合でも、ブラウザはそれらを1行のテキストとして表示します。

繰り返しになりますが、私は最善の推測を使用して、HTMLは自由形式の言語であり、したがってソースコードにスペースやインデントがいくつあるかは関係ないと結論付けました。

しかし、彼女は満足していないようでした。私の答えは間違っていましたか?はいの場合、それらは完全にまたは部分的に間違っていましたか?これらの質問に対する正しい答えは何ですか?

説明を読んで辛抱強くありがとう。

4

3 に答える 3

4

質問1.htmlマークアップを記述せずに文字列のみを含むhtmlページを作成した場合(本文、html、doctypeなし)、ブラウザがそれをレンダリングし、文字列を段落のように表示するのはなぜですか? ?

これに対して、私はブラウザがそれを段落として表示することができるという最善の推測を使用しました。これが最善の推測であり、作成者が望んでいたものであると想定して欠落しているタグを補うため、手動で書いたことはありません。

どちらの場合も、<!DOCTYPE ...>は使用されないため、初期挿入モードの最後のステップでは見つかりません。したがって、ドキュメント全体がクァークズモードでレンダリングされます。

ブラウザ(少なくともFirefoxとChrome)は段落として解析しませんが、デフォルトでは、単純な文字列をクァークズモードの段落と同じようにレンダリング ます。これは、「ドキュメントがクァークズモードの場合、本文要素の上部または下部にあるHTML要素の垂直方向の余白がゼロに折りたたまれることが予想される」ためです(ソース、余白の折りたたみについて詳しく説明します)。のを効果的に消費します。単純な文字列には余白がないため、何も起こりません。最終的に、テキストの段落とテキスト自体の両方が同じように表示されます。margin-topbodymargin-topp

これは、ブラウザが単純な文字列を処理する方法です。ドキュメントの最終的な構造が何であるかを示すDOMビューに特に注意してください。比較のために、段落がどのように見えるかを確認してください。レンダリングでは同じように見えるかもしれませんが、構造は同じではありません

ここで、余白を折りたたむことについての私のポイントを説明するために、内容(テキストまたは段落)を、折りたたまれdivていborderない余白を表示するためのaでラップします。これは、ブラウザがプレーンテキストを処理する方法ですが、ブラウザが段落を処理する方法です

ただし、<!DOCTYPE ...>(ブラウザーがクァークズモードに入らないようにするために)含まれている場合、プレーンテキストドキュメント段落付きのドキュメントと同じようには表示されませ(要素のが要素のに折りたたまれません)。margin-toppmargin-topbody

質問2.上記の例で、htmlのソースコードの異なる行に複数の文字列を記述した場合でも、ブラウザはそれらを1行のテキストとして表示します。

繰り返しになりますが、私は最善の推測を使用して、HTMLは自由形式の言語であり、したがってソースコードにスペースやインデントがいくつあるかは関係ないと結論付けました。

HTMLは、すべての空白を(white-space以外に設定されていない限りnormal)単一の空白(折りたたまれた)として扱います。エルゴは、test\n\ntestと同等test testです。

しかし、彼女は満足していないようでした。私の答えは間違っていましたか?はいの場合、それらは完全にまたは部分的に間違っていましたか?これらの質問に対する正しい答えは何ですか?

あなたの結論はやや正しいですが、エッジケースをうまく処理していません(たとえば、ブラウザがp要素のフォント/色などを変更した場合)。

于 2012-07-02T17:51:56.850 に答える
1

HTMLタグとBODYタグはオプションです。http://www.w3.org/TR/REC-html40/struct/global.html#h-7.3を参照してください。

それらをドキュメントから除外すると、タイプtext / htmlとして扱われ、空白が1つの空白に折りたたまれます。これが、ソース内の異なる行の単語が1行後ろにレンダリングされる理由です。

于 2012-07-02T17:55:44.347 に答える
0

Q1:

ブラウザが1つの文字列を段落として表示するとは思いませんでした。この理由は、あなたが言ったように、別々の行の後続の文字列は同じブロックにレンダリングされるためです。これは、Chromeウェブインスペクター(CTRL + SHIFT + I)で確認できます。タグまたはスクリプト/スタイルシート(またはDoctype)でないものはすべて、ブラウザーによって表示されます。

Q2:

HTMLは改行の影響を受けません。

それでも満足できない場合は、仕様を確認してください:http: //developers.whatwg.org/

于 2012-07-02T17:51:34.437 に答える