HTMLは次のとおりです。
<div id="outer">
<div id="inner"></div>
Test
</div>
そしてここにCSSがあります:
#inner {
float: left;
height: 100%;
}
Chromeデベロッパーツールで検査すると、内側のdivの高さが0pxになっています。
親divの高さの100%に強制するにはどうすればよいですか?
HTMLは次のとおりです。
<div id="outer">
<div id="inner"></div>
Test
</div>
そしてここにCSSがあります:
#inner {
float: left;
height: 100%;
}
Chromeデベロッパーツールで検査すると、内側のdivの高さが0pxになっています。
親divの高さの100%に強制するにはどうすればよいですか?
回答:
以下のために#outer
その内容に基づいて、そして持っているべき高さ#inner
その上のベースの高さを、絶対位置の両方の要素を作ります。
詳細はのための仕様で見つけることができますCSSのheightプロパティが、基本的に、#inner
無視しなければならない#outer
場合には、高さを#outer
の高さがあるauto
、ない限り、 #outer
絶対に配置されています。それ自体が絶対的に配置されない限り#inner
、高さは0になります。 #inner
<style>
#outer {
position:absolute;
height:auto; width:200px;
border: 1px solid red;
}
#inner {
position:absolute;
height:100%;
width:20px;
border: 1px solid black;
}
</style>
<div id='outer'>
<div id='inner'>
</div>
text
</div>
ただし... #inner
絶対配置float
すると、設定は無視されるため、#inner
明示的に幅を選択し、必要に応じて#outer
テキストの折り返しを偽装するためにパディングを追加する必要があります。たとえば、以下のパディング#outer
は幅#inner
+3です。便利なことに(全体のポイントは#inner
高さを100%にすることでした)#inner
、下にテキストを折り返す必要がないため、#inner
フロートしたように見えます。
<style>
#outer2{
padding-left: 23px;
position:absolute;
height:auto;
width:200px;
border: 1px solid red;
}
#inner2{
left:0;
position:absolute;
height:100%;
width:20px;
border: 1px solid black;
}
</style>
<div id='outer2'>
<div id='inner2'>
</div>
text
</div>
以前の答えはあなたの目標についてのあまりにも多くの誤った仮定に基づいていたので、私はそれを削除しました。
HTML/CSS
:)
親の場合:
display: flex;
いくつかのプレフィックスを追加する必要がありますhttp://css-tricks.com/using-flexbox/
編集:欠点はいつものようにIEだけですが、IE9はflexをサポートしていません。 http://caniuse.com/flexbox
編集2:@toddsbyが指摘したように、項目の整列は親のためのものであり、そのデフォルト値は実際にはストレッチです。子に別の値が必要な場合は、align-selfプロパティがあります。
編集3:jsFiddle:https ://jsfiddle.net/bv71tms5/2/
align-items: stretch;
これはデフォルト値なので必要ありません。また、子ではなく親で定義する必要があります。
実際には、親要素が配置されている限り、子の高さを100%に設定できます。つまり、親を絶対的な位置に配置したくない場合。さらに説明させてください:
<style>
#outer2 {
padding-left: 23px;
position: relative;
height:auto;
width:200px;
border: 1px solid red;
}
#inner2 {
left:0;
position:absolute;
height:100%;
width:20px;
border: 1px solid black;
}
</style>
<div id='outer2'>
<div id='inner2'>
</div>
</div>
position:absolute
(サイトのスタイルに干渉する可能性がある)よりも制限が少ない
IE8より前のバージョンのInternet Explorerをサポートする必要がない限り、これを使用display: table-cell
してこれを実現できます。
HTML:
<div class="outer">
<div class="inner">
<p>Menu or Whatever</p>
</div>
<div class="inner">
<p>Page contents...</p>
</div>
</div>
CSS:
.inner {
display: table-cell;
}
これにより、.inner
クラスを持つ各要素が親要素の高さ全体を占めるようになります。
display: table-cell;
要素はコンテナの高さを満たさなくなりますか?それはあなた自身の質問なので、私は何かを逃しているに違いありません...?
あなたの問題を解決する例を作りました。
ラッパーを作成し、フロートさせてから、divの絶対位置を指定し、100%の高さにする必要があります。
HTML
<div class="container">
<div class="left">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." </div>
<div class="right-wrapper">
<div class="right">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." </div>
</div>
<div class="clear"> </div>
</div>
CSS:
.container {
width: 100%;
position:relative;
}
.left {
width: 50%;
background-color: rgba(0, 0, 255, 0.6);
float: left;
}
.right-wrapper {
width: 48%;
float: left;
}
.right {
height: 100%;
position: absolute;
}
説明: .right divは絶対位置にあります。つまり、その幅と高さ、および上と左の位置は、CSSで幅または高さのプロパティが明示的に宣言されている場合にのみ、絶対的または相対的に配置された最初の親divに基づいて計算されます。明示的に宣言されていない場合、これらのプロパティは親コンテナ(.right-wrapper)に基づいて計算されます。
したがって、DIVの100%の高さは.containerの最終的な高さに基づいて計算され、.rightの位置の最終的な位置は親コンテナーに基づいて計算されます。
.right
.left
.left
ここではそれを達成するためのより簡単な方法です:
#outer{
display: table;
}
#inner {
display: table-cell;
float: none;
}
@Itay in Floated divのおかげで、高さ100%
少しjQueryを使用する準備ができている場合、答えは簡単です!
$(function() {
$('.parent').find('.child').css('height', $('.parent').innerHeight());
});
これは、単一の要素を親の高さ100%の側にフローティングする場合にうまく機能しますが、通常は回り込む他のフローティング要素は片側に保持されます。
これが仲間のjQueryファンに役立つことを願っています。
同じ高さの複数の子要素が必要な場合の同様のケースは、フレックスボックスで解決できます。
https://css-tricks.com/using-flexbox/
display: flex;
親flex: 1;
要素と子要素に設定すると、すべて同じ高さになります。