背景色が適用された包含 div でそれらをラップし、「列」の後にクリア div を配置します。
<div style="background-color: yellow;">
<div style="float: left;width: 65%;">column a</div>
<div style="float: right;width: 35%;">column b</div>
<div style="clear: both;"></div>
</div>
いくつかのコメントと私自身の考えに対処するために更新されました。
この方法は、本質的に問題の単純化であるため機能します。このやや「オールドスクール」な方法では、2 つの列に続いて空のクリア要素を配置します。クリア要素の仕事は、親 (背景付き) にこれがどこにあるかを伝えることです。フローティング動作が終了すると、親は基本的にクリアの位置で 0 ピクセルの高さをレンダリングできます。これは、以前のフローティング要素の最高値です。
この理由は、親要素が最も高い列と同じ高さであることを確認するためです。その後、背景が親に設定され、両方の列が同じ高さを持つように見えます。
この手法は「oldskool」であることに注意してください。より良い選択は、clearfixのようなものを使用するか、親要素にオーバーフローを非表示にすることで、この高さ計算動作をトリガーすることです。
これはこの限られたシナリオでは機能しますが、各列を視覚的に異なるものにしたり、それらの間にギャップを設けたりしたい場合は、親要素に背景を設定することはできませんが、この効果を得るためのトリックがあります.
秘訣は、すべての列に下部パディングを追加することです。これは、最も短い列と最も高い列の差になる可能性があると予想される最大サイズになります。これを解決できない場合は、大きな図を選択してから、追加する必要があります同じ数の負の下マージン。
親オブジェクトでオーバーフローを非表示にする必要がありますが、結果として、各列はマージンによって提案されたこの追加の高さをレンダリングするように要求されますが、実際にはそのサイズのレイアウトは要求されません (負のマージンが計算に反するため)。
これにより、親が最も高い列のサイズでレンダリングされますが、すべての列がその高さ + 使用される下部パディングのサイズでレンダリングされます。この高さが親よりも大きい場合、残りは単純に切り取られます。
<div style="overflow: hidden;">
<div style="background: blue;float: left;width: 65%;padding-bottom: 500px;margin-bottom: -500px;">column a<br />column a</div>
<div style="background: red;float: right;width: 35%;padding-bottom: 500px;margin-bottom: -500px;">column b</div>
</div>
この手法の例は、bowers and wilkins の Web サイトで見ることができます(ページの下部にある 4 つの水平方向のスポットライト画像を参照してください)。