一連のdivを別のdiv内に配置するという奇妙な問題があります。画像で説明するのが最善だと思います:
黒(#box)div内には、同じ場所に配置する必要がある2つのdiv(.a、.b)があります。私が達成しようとしているのは、最初の画像に描かれています。2番目の画像は、私が得る効果です。 divがクリアまたは何かなしでフロートされたように見えますが、明らかにそうではありません。どんなアイデアでも大歓迎です!
このサンプルのコードは次のとおりです。
CSS:
#box {
background-color: #000;
position: relative;
padding: 10px;
width: 220px;
}
.a {
width: 210px;
position: absolute;
top: 10px;
left: 10px;
background-color: #fff;
padding: 5px;
}
.b {
width: 210px;
position: absolute;
top: 10px;
left: 10px;
background-color: red;
padding: 5px;
}
#after {
background-color: yellow;
padding: 10px;
width: 220px;
}
HTML:
<div id="box">
<div class="a">Lorem</div>
<div class="b">Lorem</div>
</div>
<div id="after">Hello world</div>
絶対divはドキュメントのフローから取り出されるため、含まれるdivにはパディング以外のコンテンツはありません。 #boxに高さを入力します。
#box {
background-color: #000;
position: relative;
padding: 10px;
width: 220px;
height:30px;
}
position: static
です。これは、要素が配置されず、ドキュメント内の通常の場所に配置されることを意味します。通常、以前に設定された位置をオーバーライドする必要がない限り、これを指定しません。position: relative
を指定すると、上または下、および左または右を使用して、ドキュメント内で通常発生する場所に対して要素を移動できます。position: absolute
を指定すると、要素はドキュメントから削除され、指定した場所に正確に配置されます。あなたの質問に関しては、包含ブロックを相対的な位置に置く必要があります、すなわち:
#parent {
position: relative;
}
そして、次のように、親要素に対して絶対位置に配置する必要がある子要素:
#child {
position: absolute;
}
この問題は(とりわけ) この記事 で説明されています。
#box
は相対的に配置され、ページの「フロー」の一部になります。他のdivは絶対に配置されるため、ページの「フロー」から削除されます。
ページフローとは、要素の配置がフロー内の他の要素に影響することを意味します。
つまり、#box
はdomを見るようになりました。aと.bは「内部」ではなくなりました#box
。
これを修正するには、すべてを相対にするか、すべてを絶対にする必要があります。
1つの方法は次のとおりです。
.a {
position:relative;
margin-top:10px;
margin-left:10px;
background-color:red;
width:210px;
padding: 5px;
}
#a
または#b
のいずれかは、position:absolute
でないようにする必要があります。そのため、#box
は、それに対応して大きくなります。
したがって、#a
がposition:absolute
であるのを停止し、その上に#b
を配置することができます。次のようにします。
#box {
background-color: #000;
position: relative;
padding: 10px;
width: 220px;
}
.a {
width: 210px;
background-color: #fff;
padding: 5px;
}
.b {
width: 100px; /* So you can see the other one */
position: absolute;
top: 10px; left: 10px;
background-color: red;
padding: 5px;
}
#after {
background-color: yellow;
padding: 10px;
width: 220px;
}
<div id="box">
<div class="a">Lorem</div>
<div class="b">Lorem</div>
</div>
<div id="after">Hello world</div>
(私は幅を変えたので、一方が他方の後ろに見えることに注意してください。)
編集 Justineのコメントの後:唯一のオプションは#boxの高さを指定することです。この:
#box {
/* ... */
height: 30px;
}
aとbの高さが固定されていると仮定すると、完全に機能します。 HTMLの上部にdoctypeを追加して、IEを標準モードにする必要があります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
それが適切に機能する前に。