<div>
通常、 のような要素はコンテンツに合わせて大きくなりますが、このfloat
プロパティを使用すると、CSS の初心者には驚くべき問題が発生する可能性があります。フローティング要素にフローティングでない親要素がある場合、親は折りたたまれます。
例えば:
<div>
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
この例の親 div は、そのフローティングされた子を含むように展開されませんheight: 0
。
この問題をどのように解決しますか?
ここで、ソリューションの完全なリストを作成したいと思います。ブラウザ間の互換性の問題を認識している場合は、指摘してください。
解決策 1
親をフロートします。
<div style="float: left;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
長所: セマンティック コード。
短所:常に親を浮かせたいとは限りません。やるとしても、親の親などを浮かしますか?すべての祖先要素をフロートする必要がありますか?
解決策 2
親に明示的な高さを与えます。
<div style="height: 300px;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
長所: セマンティック コード。
短所: 柔軟性がありません。コンテンツが変更されたり、ブラウザーのサイズが変更されたりすると、レイアウトが崩れます。
解決策 3
次のように、親要素内に「スペーサー」要素を追加します。
<div>
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
<div class="spacer" style="clear: both;"></div>
</div>
長所: コードは簡単です。
短所: セマンティックではありません。スペーサー div は、レイアウトのハックとしてのみ存在します。
解決策 4
親を に設定しoverflow: auto
ます。
<div style="overflow: auto;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
長所: 余分な div は必要ありません。
短所: ハックのようです - それはoverflow
プロパティの目的ではありません。