外側のdivを自動的にフローティングコンテンツと同じ高さにします


94

外側divdiv浮いているそのs を包むために黒のアウターが欲しい。自動的にコンテンツの高さ(たとえば、フローティングs)にしたいので、id style='height: 200pxでを使用したくありません。divouterdivdiv

<div id='outerdiv' style='border: 1px solid black;background-color: black;'>
<div style='width=300px;border: red 1px dashed;float: left;'>
    <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
</div>

<div style='width=300px;border: red 1px dashed;float: right;'>
    <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
</div>

これを達成する方法は?

回答:


167

outerdivのCSSをこれに設定できます

#outerdiv {
    overflow: hidden; /* make sure this doesn't cause unexpected behaviour */
}

最後にで要素を追加してこれを行うこともできclear: bothます。これは、JS(適切なソリューションではない)または:afterCSS疑似要素(古いIEでは広くサポートされていない)を使用して通常どおり追加できます。

問題は、コンテナが自然に拡大して浮き子を含むことができないことです。最初の例を使用すると警告が表示されます。親要素の外側に子要素がある場合、それらは非表示になります。プロパティ値として「auto」を使用することもできますが、これにより、要素が外側に表示された場合にスクロールバーが呼び出されます。

親コンテナをフローティングにすることもできますが、デザインによっては、これが不可能/困難な場合があります。


37
なぜオーバーフローのロジックを理解したいのですが、この場合は隠し機能が動作します。
masteroleary 2013

2
はい、これは直観に反すると思ったのは私だけではないことを願っていました。アレックス?
regularmike 2013

3
@masteroleary @regularmike HTML/CSSは優れたUIテクノロジーではありませんでした。そのため、直感に反することが一般的です:)
Yuriy Nakonechnyy

2
@masteroleary私はこれが古いスレッドであることを理解していますが、最近、stackoverflow.com / questions
21041297#21041625

1
floatソリューションの+1 。特にTwitter Bootstrapと組み合わせた場合、他の失敗と非常にうまく機能しません。
Fizzix 14

17

まず、インラインではなく、外部CSSファイルでCSSスタイルを設定することを強くお勧めします。メンテナンスがはるかに簡単で、クラスを使用して再利用可能にすることができます。

「末尾にclear:bothを指定して要素を追加する」というAlexの回答(およびGarretのclearfix)を回避するには、次のようにします。

    <div id='outerdiv' style='border: 1px solid black; background-color: black;'>
        <div style='width: 300px; border: red 1px dashed; float: left;'>
            <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
        </div>

        <div style='width: 300px; border: red 1px dashed; float: right;'>
            <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
        </div>
        <div style='clear:both;'></div>
    </div>

これは機能します(ただし、ご覧のとおり、インラインCSSはそれほどきれいではありません)。


なぜ評価が下がったのですか?それは機能し、私はそれがかなりの解決策ではなかったことを正しく認めました。
Lycana 2009

1
少なくとも、あなたを0に戻すために+1しました。たぶん、あなたは彼の誤ったCSSを修正しなかったために不合格になりました...つまり、等号を使用してCSSプロパティを設定することは正しくありません。
アレックス

けっこうだ。+1アレックスに感謝します。私の発言は公正なものだと思いました。
リカナ2009

このソリューションの方がIMOが優れています。それが私の質問だったら、私はこの答えを受け入れるでしょう。
ksg91 2012

8

http://www.sitepoint.com/simple-clearing-of-floats/で説明されているように、自動閉鎖フロートを試すことをお勧めします

したがって、おそらくアレックスが言ったようにoverflow: auto(通常は機能する)またはのいずれかを試してくださいoverflow: hidden


非表示は機能しますが、あなたの言うとおり、自動機能は少し優れています。ありがとう。
Matt Setter、2012年

7

一部の人が私を嫌うことは知っdisplay:table-cellていますが、この場合は助けになることがわかりました。

それは本当にきれいです。


外側のdiv使用表示:テーブル; divの内部でディスプレイを使用:テーブルセル;
アヌクルリンパナシル

4

まずwidth=300px、使用しないのはCSSではwidth: 300px;なくタグの属性設定です。代わりに使用してください。

clearfixテクニックを適用することをお勧めし#outerdivます。Clearfixは2つのフローティングdivをクリアするための一般的なソリューションです。したがって、親divは2つのフローティングdivに対応するように拡張されます。

<div id='outerdiv' class='clearfix' style='width:600px; background-color: black;'>
    <div style='width:300px; float: left;'>
        <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
    </div>

    <div style='width:300px; float: left;'>
        <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
    </div>
</div>

これは、状況のと、Clearfixがそれを解決するために行うことの例です。


3

jQueryを使用します。

親の高さ=子のオフセット高さを設定します。

$(document).ready(function() {
    $(parent).css("height", $(child).attr("offsetHeight"));
}

3
やりすぎ、CSSだけでそれを実行できる場合。
アレックス

1
私の答えでは、親の高さを子の高さと同じに設定できますが、オーバーフローを使用して親の高さを変更しないため、親divの後にデータを表示する場合に問題が発生します。
ハーパル、

1

使用する clear: both;

私はこれを理解しようと一週間以上費やしました!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.