これにはプロパティのtable
とtable-row
の値を使用することをお勧めします。display
image-wrapper 要素と text 要素はどちらもテーブルの行であるため、展開してテーブルの全領域を埋めます。image-wrapper は高さ 100% に設定されているため、残りのスペースを消費します。
image 要素は image-wrapper 内にネストされ、幅/高さが 100% に設定されているため、親と同じサイズになります。
ここにフィドルがあります:
http://jsfiddle.net/8S6Kf/1/
HTML
<div class="parent">
<div class="image-wrapper">
<img class="image" src="http://placehold.it/250x250&text=2" />
</div>
<div class="text">
A line of text.
</div>
</div>
CSS
.parent {
display: table;
height: 250px;
width: 250px;
}
.image-wrapper {
display: table-row;
height: 100%;
}
.image {
width: 100%;
height: 100%;
}
.text {
display: table-row;
}
アップデート
これは FF/IE では機能しません。この特定の問題については、実際の画像を div に置き換えて、background-image プロパティを使用できます。また、画像をテーブルセルにする必要があることに注意してください。そうしないと、テーブルがレンダリングされません。
画像を引き伸ばさない例を次に示します。
http://jsfiddle.net/8S6Kf/7/
HTML
<div class="image"></div>
CSS
.image {
display: table-cell;
height: 100%;
width: auto;
background-image: url(http://placehold.it/250x250&);
background-size: 100% 100%;
}
画像の寸法を維持したい場合は、代わりに次の背景プロパティを使用できます。
background-size: contain;
background-repeat: no-repeat;