これがフィドルです。
divs
ヘッダー用と本体用の2つを持っています。div
ヘッダー用の の中に、別のものdiv
があり、その div はfloated left
. そのため、floating
この 2 つの間に空白が発生していますdivs
(ヘッダーの div と本体の div の間)。
#DivLogo
[注:フィドルの css セクションを参照してください]
私の質問は、なぜこの種の問題がフローティングのために発生しているのかということです.?
#DivHeader を にすることの成果物ですinline-block
。に変更し、フロートを含むようdisplay: block
に設定します。http://jsfiddle.net/jhcUb/overflow: hidden;
を参照してください
元の CSS は次のとおりです。
#DivHeader
{
position:relative;
display:inline-block;
width:100%;
font-family: Century Gothic, sans-serif;
background-color:#3b5998;
}
には 2 つの子要素があり#DivHeader
、1 つは浮動要素で、もう 1 つは絶対配置要素であるため、 の高さには寄与しません#DivHeader
。
を設定したと仮定するとdisplay: block
、ページの左上隅から赤い背景がペイントされ、ヘッダーは表示されません。
これは、 に設定#DivMain
したposition: relative
ために、以前にレンダリングされた要素の上に描画される新しいスタック コンテキストを作成したためです。
に設定position: static
した場合#DivMain
は、浮動要素からのヘッダー コンテンツが表示されます。
に戻ると#DivHeader
、 を使用するdisplay: inline-block
と、要素は HTML ドキュメント内の空白を認識し、匿名のインライン ボックスを作成します。これは、#DivHeader
コンテンツが含まれていることを意味します。フロートの後に余白があるため、フロートによるクリアランスがインライン ブロックに寄与し、背景色などが表示されます。
問題を修正するのは簡単DivHeader
です。overflow: auto
display: block
もう 1 つ、 float を使用していなければ#DivLogo
問題は発生しません。ロゴ要素のフォント サイズが大きくなると、インライン ブロックによって認識される空白が問題にならないようにベースラインが十分にずれてしまうからです。
ここでかなりのことが起こっています!