background-sizeプロパティの説明
CSSのbackground-size
プロパティは、背景画像を表示する大きさ(サイズ)を指定します。元の画像サイズに関わらず、画面に表示させる大きさを数値で指定したり、背景画像の配置可能範囲に合わせてサイズを自動調整することができます。
background-sizeに指定できる値
auto
- 縦横比を維持したまま画像を元のサイズで表示します。水平または垂直方向のどちらか一方のサイズが指定されている場合は、縦横比を維持した状態で伸縮します。
contain
- 画像の縦横比を崩すことなく、表示可能な範囲を埋めようとします。要素の大きさが元の画像よりも小さい場合は縮小し、大きい場合はタイル状に繰り返し配置します。要素のサイズが画像よりも大きく、
background-repeat
の値にno-repeat
が指定されている場合は、長い方の辺が端に達するまで拡大します。 cover
- 必用に応じて画像を引き伸ばし、表示可能な範囲を埋めようとします。要素と画像の縦横比が異なる場合は、空白が残らないように配置してから、はみ出した部分を切り取ります。つまり、短い方の辺を最大化させて長い方の辺をトリミングし、全体を背景画像で覆います。
<length>
- 長さを表すデータ型の値で指定します。CSSで使える単位と数値の組み合わせが使用できます。ただし、負の値は指定できません。ひとつの値を指定した場合は水平軸の幅が決まり、高さが
auto
となります。二つの値を指定した場合は、縦横比を無視して幅と高さが決まります。 <percentage>
- 割合を表すデータ型の値で指定します。背景画像の配置可能な範囲に対するパーセンテージを表します。ただし、負の値は指定できません。配置可能な範囲の基準は、
background-origin
で定義します。background-attachment
の値がfixed
の場合、その基準はビューポート全体とみなされます。
background-sizeの使い方とサンプルコード
background-size
プロパティの構文は以下の通りです。
/* キーワード値 */
background-size: auto;
background-size: contain;
background-size: cover;
/* 幅指定、高さ自動調整 */
background-size: 10px;
background-size: 1rem;
background-size: 100vw;
background-size: 25%;
/* 幅指定、高さ指定 */
background-size: 50% auto;
background-size: 3rem 30%;
background-size: auto 60px;
background-size: auto auto;
/* 複数の背景画像に対する指定 */
background-size: auto, auto;
background-size: 10px 10px, 25%, 25%;
background-size: cover, contain, auto;
/* グローバル値 */
background-size: inherit;
background-size: initial;
background-size: revert;
background-size: unset;
background-sizeの実例
それでは簡単なサンプルを見てみましょう。要素に対してオーバーサイズの横長の背景画像を用意し、background-size
の値だけを変更すると以下のように表示されます。背景画像が表示可能範囲よりも
小さくなった場合は背景色が表示されます。
<div class="samp_box">
<p>background-size</p>
<div id="item_1">auto</div>
<div id="item_2">contain</div>
<div id="item_3">cover</div>
<div id="item_4">50% auto</div>
</div>
.samp_box {
padding: 1rem;
text-align: center;
}
.samp_box > div {
width: 200px;
height: 150px;
margin: 1rem auto 0 auto;
border: 1px solid #039;
background: url(/images/sample_photo_628x370.png) #09f no-repeat;
color: #fff;
font-size: 2rem;
}
#item_1 {
background-size: auto;
}
#item_2 {
background-size: contain;
}
#item_3 {
background-size: cover;
}
#item_4 {
background-size: 50% auto;
}