親<div>をその子の高さに拡張する


308

私はこれに似たページ構造を持っています:

<body>
  <div id="parent">
    <div id="childRightCol">
      /*Content*/
    </div>
    <div id="childLeftCol">
      /*Content*/
    </div>
  </div>
</body>

私は、親のための希望divに拡大するためのheight内部divheight増加。

編集:
1つの問題はwidth、子コンテンツwidthのがブラウザーウィンドウのを超えて展開すると、現在のCSSが親に水平スクロールバーを配置することdivです。スクロールバーをページレベルにしたい。現在、私の親divはoverflow: auto;

このためのCSSを手伝っていただけませんか?


6
あなたは内側のdivをフローティングしていますか?現在のCSSを投稿できますか?
Eric

2
@エリック-それも私の問題でした-私の子供div(s)はfloat:leftを持っていました。
Michael Goltsman

回答:


539

親のためにこれを試してください、それは私のために働きました。

overflow:auto; 

更新:

機能したもう1つのソリューション:

display: table;

子供

display: table-row;

67
overflow:auto適用する値をブラウザが決定する必要があることを意味します。本当に何トリックがありますoverflow: overlay
アルバメンデス2011

14
@jmendeth「overlay」というオーバーフロー値は存在しません。子divがフロートされている場合の動作は宣言されていoverflow:hiddenます。
クリストフ

16
わあああ。リラックス。1つは、overlayWebkit以外ではサポートされないと主張していることです。もう1つまったく異なるのは、まったく存在しないということです。まずRTFM。;)
アルバメンデス

6
Webkitだけの場合は、20%しか存在しません。十分に維持および更新されていますか?あなたはそれを誓いますか?
ピラウ

20
別の答えは、stackoverflow.com / questions / 450903 / …で、を設定することを提案していますdisplay:inline-block。それは私にとってはうまくいきました。
イェンス

26

を追加しclear:bothます。列がフローティングしていると仮定します。親の高さの指定方法によっては、overflow:autoが必要になる場合があります。

<body>
<div id="parent">
    <div id="childRightCol">
    <div>
    <div id="childLeftCol">
    <div>
    <div id="clear" style="clear:both;"></div>
</div>
</body>

これを行うと、コンテンツがブラウザーウィンドウよりも広い場合、親divに水平スクロールバーが表示されます。横スクロールをページ全体にしたい。
スティーブホーン

1
なぜoverflow:autoが必要なのですか?私のテストでは、clear:both; 十分です。
Paolo Bergantino

3
これは、親に高さが指定されていないことも想定しています。
bendewey 2008

このアプローチはFirefoxでは正常に機能しますが、IE 6では機能しません。回避策はありますか?
スティーブホーン


13

max-content親の身長を考えてみてください。

.parent{
   height: max-content;
}

https://jsfiddle.net/FreeS/so4L83wu/5/


そのプロパティは他のブラウザでどのように動作しますか?MDNの場合:developer.mozilla.org/en-US/docs/Web/CSS/...
ロバート・モリーナ

これは、Safariの12で問題を修正することを唯一のものと思われた
ベン・ウィーラー

そのような素晴らしいCSS値!サポートされていないエッジで_(ツ)_ /¯
SAMERミュラド

4

この答えからの指示でこれを理解できない人のためにに:

パディング値を0 以上に設定してみてください子のdivはマージントップまたは余白下を持っている場合は、パディングに置き換えることができ、

たとえば、

#childRightCol
{
    margin-top: 30px;
}
#childLeftCol
{
    margin-bottom: 20px;
}

それを次のものに置き換える方が良いでしょう:

#parent
{
    padding: 30px 0px 20px 0px;
}

4

セルフクリアのようなものを使用することdivは、このような状況に最適です。次に、親のクラスを使用します...のような:

<div id="parent" class="clearfix">

3

追加

clear:both; 

親divのcssに、またはclear:both;を実行する親divの下部にdivを追加します。

これは正解です。overflow:auto; シンプルなWebレイアウトで機能する可能性がありますが、負のマージンなどの使用を開始する要素で混乱します


2

これはあなたが望むことをしますか?

.childRightCol, .childLeftCol
{
    display: inline-block;
    width: 50%;
    margin: 0;
    padding: 0;
    vertical-align: top;
}


1

子divを、絶対指定などの配置属性を持たない単一の列にすることで、親divを子divのコンテンツの周囲に展開しました。

例:

#wrap {width:400px;padding:10px 200px 10px 200px;position:relative;margin:0px auto;}
#maincolumn {width:400px;}

#wrapの最も深い子divであるmaincolumn divに基づいて、これは#wrap divの深さを定義し、両側に200pxのパディングが2つの大きな空白の列を作成して、絶対位置のdivを自由に配置できるようにします。position:absoluteを使用して、ヘッダーのdivとフッターのdivを配置するようにパディングの上部と下部を変更することもできます。


0

親コンテナにclearfixソリューションを適用する必要があります。ここに修正リンクを説明する素晴らしい記事があります


0

#childRightColおよび#childRightCol内のコンテンツが左または右にフロートされる場合は、これをcssに追加します。

#childRightCol:before { display: table; content: " "; }
#childRightCol:after { display: table; content: " "; clear: both; }
#childLeftCol:before { display: table; content: " "; }
#childLeftCol:after { display: table; content: " "; clear: both; }

0

これは仕様で説明されているように機能しています。ここでのいくつかの回答は有効であり、以下と一致しています。

ブロックレベルの子がある場合、高さは、折りたたまれた余白がない最上部のブロックレベルの子ボックスの上部の境界エッジと、最下部のブロックレベルの子ボックスの下部の境界エッジの間の距離です。マージンが折りたたまれていません。ただし、要素にゼロ以外の上パディングまたは上ボーダー、あるいはその両方がある場合、またはルート要素である場合、コンテンツは一番上の子の上マージンエッジから始まります。(最初のケースは、要素の上部と下部のマージンが最上部と最下部の子のマージンで折りたたまれるという事実を表しますが、2番目のケースでは、パディング/ボーダーの存在によって上部マージンが折りたたまれるのを防ぎます。)同様に、要素にゼロ以外の下パディングまたは下ボーダー、あるいはその両方がある場合、コンテンツは一番下の子の下マージンエッジで終了します。

ここから:https : //www.w3.org/TR/css3-box/#blockwidth


0

以下のコードは私のために働きました。

CSS

.parent{
    overflow: auto;
} 

html

<div class="parent">
    <div class="child1">
    </div>
    <div class="child2">
    </div>
    <div id="clear" style="clear:both;"></div>
</div>


0

出発点

これが定型のHTMLとCSSです。この例では、2つの浮動子要素を持つ親要素があります。

/* The CSS you're starting with may look similar to this.
 * This doesn't solve our problem yet, but we'll get there shortly.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}
<!-- The HTML you're starting with might look similar to this -->
<div class="containing-div">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
</div>

解決策1:オーバーフロー:自動

最新のすべてのブラウザーとInternet ExplorerでIE8まで機能overflow: autoするソリューションは、親要素に追加することです。これはIE7でも機能し、スクロールバーが追加されています。

/* Our Modified CSS.
 * This is one way we can solve our problem.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
  overflow: auto;
  /*This is what we added!*/
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}

解決策2:フロートの親コンテナー

最新のすべてのブラウザーで機能し、IE7に戻る別のソリューションは、親コンテナーをフロートさせることです。

親divをフローティングするとページレイアウトの他の部分に影響する可能性があるため、これは常に実用的であるとは限りません。

/* Modified CSS #2.
 * Floating parent div.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  float: left;
  /*Added*/
  height: auto;
  width: 100%;
  /*Added*/
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}

方法3:フローティングエレメントの下にClearing Divを追加する

/* 
 * CSS to Solution #3.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}


/*Added*/

.clear {
  clear: both;
}
<!-- Solution 3, Add a clearing div to bottom of parent element -->
<div class="containing-div">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
  <div class="clear"></div>
</div>

方法#4:Clearing Divを親要素に追加する このソリューションは、古いブラウザーと新しいブラウザーのどちらにとっても非常に優れています。

/* 
 * CSS to Solution #4.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}


/*Added*/

.clearfix {
  clear: both;
}

.clearfix:after {
  clear: both;
  content: "";
  display: table;
}
<!-- Solution 4, make parent element self-clearing -->
<div class="containing-div clearfix">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
</div>

https://www.lockedownseo.com/parent-div-100-height-child-floated-elements/から


-1

私はこのCSSを親に使用して動作します:

min-height:350px;
background:url(../images/inner/details_middle.gif) repeat-y 0 0 ;
padding:5px 10px;   
text-align:right;
overflow: hidden;
position: relative;
width: 100%;

2
あなたはmin-heightを使用するので、カウントされません;)
pilau 2013

-1

#parent{
  background-color:green;
  height:auto;
  width:300px;
  overflow:hidden;
}

#childRightCol{
  color:gray;
  background-color:yellow;
  margin:10px;
  padding:10px;
}
<div id="parent">
    <div id="childRightCol">
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vulputate sit amet neque ac consequat.
        </p>
    </div>
  </div>

あなたはoverflow:hidden;CSSのプロパティを使用して管理しています

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