object-fit:画像や動画などの置換要素をボックスに収める方法を指定する
初期値 | fill |
適用対象 | 置換要素 |
継承 | しない |
アニメーション | 離散値 |
対応ブラウザ | caniuseで確認 |
object-fitプロパティの説明
object-fit
は、画像や動画などの置換要素をボックスに収める方法を指定します。要素は配置されると四角形のボックスを作成しますが、その中に埋め込まれるコンテンツのはめ込み方式を変更できます。
例えば、CSSで定義したコンテナの寸法と画像のサイズが異なる場合に、アスペクト比を維持したまま縮小して配置するのか、それを崩してでもコンテナにフィットさせるのかを選択できます。また、幅と高さのあふれる方の辺をトリミングしてレイアウトを優先させることもできます。
ボックスの中に配置されるオブジェクトの位置を調整する場合は、object-position
を使用します。
object-fitに指定できる値
- fill
- オブジェクトは、要素のコンテンツ・ボックスを埋めるように表示されます。アスペクト比が合わない場合は、ボックスの長辺に合わせてコンテンツが引き伸ばされます。これが初期値です。
- contain
- オブジェクトは、アスペクト比を維持したまま要素のコンテンツ・ボックスに収まるように拡大縮小されます。オブジェクト全体がボックスの中に表示され、アスペクト比が合わない場合は余った領域が背景色となりレターボックスの表示形式となります。
- cover
- オブジェクトは、アスペクト比を維持したまま要素のコンテンツ・ボックスを埋めるように表示されます。アスペクト比が合わない場合は、オブジェクトの長辺が範囲からはみ出すように切り取られます。
- none
- オブジェクトは、元のサイズのまま表示されます。
- scale-down
- オブジェクトは、
none
またはcontain
のいずれかで、より小さいサイズで配置可能な方を採用します。
object-fitの使い方とサンプル
object-fit
プロパティの構文は以下の通りです。
/* キーワード値 */
object-fit: contain;
object-fit: cover;
object-fit: fill;
object-fit: none;
object-fit: scale-down;
/* グローバル値 */
object-fit: inherit;
object-fit: initial;
object-fit: revert;
object-fit: unset;
object-fitの実例
それでは実際にobject-fit
プロパティの書き方を見ていきましょう。以下の例は、CSSで<img>
要素のサイズを固定した上で、アスペクト比や寸法の異なる画像を読み込んでいます。
これを見て分かるように、画像のサイズ指定はコンテンツそのもののwidth
やheight
を調整しているわけではなく、あくまでHTML要素によって生成されたボックスにソース元のコンテンツを置換要素として流し込んでいるのです。
これを理解すると、画像や動画をレイアウトに合わせて配置したり、中央寄せやトリミングの指定がしやすくなります。ぜひ習得して行きましょう。
.samp_box {
overflow: auto;
padding: 0 1rem 1rem;
background: #eee;
}
.samp_box h2 {
margin: 1rem 0 0;
font-size: 1rem;
}
.samp_box img {
border: 1px solid #333;
background: #fff;
}
.samp_box img:nth-of-type(1) {
width: 100px;
height: 100px;
}
.samp_box img:nth-of-type(2) {
width: 200px;
height: 100px;
margin-left: 1rem;
}
.of_1 img {
object-fit: fill;
}
.of_2 img {
object-fit: contain;
}
.of_3 img {
object-fit: cover;
}
.of_4 img {
object-fit: scale-down;
}
.of_5 img {
object-fit: none;
}
<div class="samp_box">
<div class="of_1">
<h2>object-fit: fill;</h2>
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
</div>
<div class="of_2">
<h2>object-fit: contain;</h2>
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
</div>
<div class="of_3">
<h2>object-fit: cover;</h2>
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
</div>
<div class="of_4">
<h2>object-fit: scale-down;</h2>
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
</div>
<div class="of_5">
<h2>object-fit: none;</h2>
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
<img src="../images/sample_photo_628x370.png" alt="サンプル画像">
</div>
</div>
画像を要素の中央に配置する
object-fit
とobject-position
を利用すると、画像を画面の中央に寄せることが簡単になります。詳しくは、画像要素のボックスと画像の配置位置を切り離して制御できるobject-position
の解説を参照して下さい。
以下の内容は、<img>
要素のみで実現しています。ボックスの横幅を可変式にして中央に画像を配置しています。これはボックスのサイズやアスペクト比がいかなるものであっても、画像を中央に配置できることを意味します。実は既定値ではこれと同じ方法で配置されますが、object-fit
による自動調整が働くために画像の寸法が変わってしまうのです。
更に、サンプルでは<img>
要素そのものに背景画像を配置しています。このような応用が利くのも、コンテナとオブジェクトを分けて考える時の利点です。resize
に対応しているブラウザであれば、コンテナの横幅を変更できます。画像が中央に寄ったまま移動するので確認してみましょう。
.samp_box {
overflow: auto;
padding: 0 1rem 1rem;
background: #eee;
resize: horizontal;
}
.samp_box h2 {
margin: 1rem 0 0;
font-size: 1rem;
}
.samp_box img {
width: 100%;
height: 200px;
border: 1px solid #333;
background: url(../images/sample_photo_1200x630.jpg) center no-repeat;
object-fit: none;
object-position: center center;
}
<div class="samp_box">
<div>
<h2>object-position: center center;</h2>
<img src="../images/sample_square_100.png" alt="サンプル画像">
</div>
</div>
object-fitに関連するCSSプロパティ
要素の表示や配置方法 | |
---|---|
bottom | 位置指定で配置された要素の底辺からの距離を指定する |
break-after | ボックスの終了時にページやカラムをどのように区切るかを指定する |
break-before | ボックスの開始前にページやカラムをどのように区切るかを指定する |
break-inside | ボックスの途中でページやカラムをどのように区切るかを指定する |
clear | フロート(float)の回り込みを解除する |
clip | 要素を切り抜いて可視化する範囲を指定する |
box-decoration-break | 要素の断片が複数の行やページに渡る場合に装飾の表示の仕方を指定する |
display | 要素の表示形式を指定する |
float | 要素を右または左へ寄せて配置する |
image-orientation | 横向きや逆さまに撮影された写真を正しい向きに回転させる |
image-rendering | 画像を拡大縮小するアルゴリズムを設定する |
left | 位置指定で配置された要素の左辺からの距離を指定する |
object-fit | 画像や動画などの置換要素をボックスに収める方法を指定する |
object-position | ボックスの中に配置されるオブジェクトの位置を指定する |
overflow | 要素からはみ出した内容の表示方法をまとめて指定する |
overflow-wrap | インライン要素に対して溢れる単語の折り返し方法を指定する |
overflow-x | 要素から水平方向にはみ出す内容の表示方法を指定する |
overflow-y | 要素から垂直方向にはみ出す内容の表示方法を指定する |
position | 要素の位置指定の種類を変更する |
right | 位置指定で配置された要素の右辺からの距離を指定する |
vertical-align | インライン要素や表のセルに対して縦方向の揃える位置を指定する |
visibility | 要素の領域を残したまま表示・非表示を切り替える |
z-index | 要素の重なり順序を指定する |