position: relative;
子要素が絶対的に配置されている場合(つまり)、コンテナ要素を追加する必要がある理由を理解するのに苦労していposition: absolute;
ます。例を挙げて説明しましょう。
サンプルHTMLコード:
<ul>
<li>...</li>
<li id="parent">
<a href="#">Menu</a>
<div id="child">...</div>
</li>
<li>...</li>
<li>...</li>
</ul>
コードが水平メニューを表していると考えてください。これは次のように表示されます。
問題は、のposition
プロパティの値#parent
がデフォルト(つまりposition: static;
)の場合、子要素が絶対に配置されていても、その幅はの幅とともに増加することです。これは、のせいで現在フローから外れているため、#child
発生しないはずです。#child
position: absolute;
position: relative;
私が使用すると、すべてが所定の位置に収まります。#parent
つまり、のサイズに関係なく、その幅は同じまま#child
です。
ここで何が欠けていますか?position: relative;
(私が推測する)デフォルトの動作であるはずの何かに使用する必要があるのはなぜですか?
更新:私の主張をよりよく説明するためにフィドルを作成しました。ご覧ください。
問題を再現する手順:
フィドルのプレビューで、[チャンネル]メニューをクリックすると、非表示のメニュー項目がスライドして表示されます。
次に、F12ブラウザ(Chrome、Safari、またはFirebugがインストールされているFirefox)でキーを押し、検査ツールを使用して[チャネル]メニューを検査します。
これで、開いているDevToolsまたはFirebugペインの[Elements]タブにある関連するHTMLコードがすぐに表示されます。
<li class="float-left top-menu">
内部の最初のインスタンスを探し、<ul id="top-navbar">
その行の上にマウスを置きます。次のように表示されます。
赤い境界線のサイズにする必要があるのに、青いインジケーターボックス(つまりメニュー)がなぜそれほど大きいのですか?私が今言っていることを理解しますか?
次に、適用position: relative;
しますli
(つまりli.float-left.top-menu { position: relative; }
、違いを自分で確認します)。