object-position:ボックスの中に配置されるオブジェクトの位置を指定する

初期値 50% 50%
適用対象 置換要素
継承 する
アニメーション <length>値、<percentage>値、calc();
対応ブラウザ caniuseで確認

object-positionプロパティの説明

object-positionは、ボックスの中に配置されるオブジェクトの位置を指定します。具体的には、画像や動画などの置換要素がボックスに配置される祭に、その位置を調整する機能を持ちます。

例えば、CSSで<img>要素のサイズ指定を行った場合、それは画像自体の寸法を決めているのではなく、コンテンツを収めるボックスの寸法を定義していることになります。画像は、あくまで置換要素としてボックスの中に流し込まれるもので、object-positionは画像が配置される座標を変更したい場合に有効となります。

ボックスの中に配置されるオブジェクトのアスペクト比やトリミングの方式を変更したい場合は、object-fitを活用して下さい。

object-positionに指定できる値

<position>
要素のボックスに対する位置を表す値です。二次元の座標や寸法に対する割合を、1つから4つの値で定義します。これは相対値または絶対値のオフセット値です。

object-positionの使い方とサンプル

object-positionプロパティの構文は以下の通りです。

CSS
/* <position>値 */
object-position: top left;
object-position: bottom right;
object-position: center center;
object-position: top 10px;
object-position: top 10px left 5%;

/* グローバル値 */
object-position: inherit;
object-position: initial;
object-position: revert;
object-position: unset;

object-positionの実例

それでは実際にobject-positionプロパティの書き方を見ていきましょう。以下の例は、CSSで<img>要素のサイズを引き伸ばした上で、画像を元のサイズで読み込んでいます。つまり、object-fitの値はnoneです。

HTMLの要素は、それだけで四角いボックスを生成します。その中に配置された画像は、本来ボックスの中央に配置されますが、この配置位置を変更したものを比較してみます。

表示確認
CSS
.samp_box {
	overflow: auto;
	padding: 0 1rem 1rem;
	background: #eee;
}
.samp_box h2 {
	margin: 1rem 0 0;
	font-size: 1rem;
}
.samp_box img {
	width: 100%;
	height: 150px;
	border: 1px solid #333;
	background: #fff;
	object-fit: none;
}
.op_1 img {
	object-position: top left;
}
.op_2 img {
	object-position: bottom right;
}
.op_3 img {
	object-position: 10px 10px;
}
.op_4 img {
	object-position: bottom 10px right 10px;
}
HTML
<div class="samp_box">
	<div class="op_1">
		<h2>object-position: top left;</h2>
		<img src="../images/sample_square_100.png" alt="サンプル画像">
	</div>
	<div class="op_2">
		<h2>object-position: bottom right;</h2>
		<img src="../images/sample_square_100.png" alt="サンプル画像">
	</div>
	<div class="op_3">
		<h2>object-position: 10px 10px;</h2>
		<img src="../images/sample_square_100.png" alt="サンプル画像">
	</div>
	<div class="op_4">
		<h2>object-position: bottom 10px right 10px;</h2>
		<img src="../images/sample_square_100.png" alt="サンプル画像">
	</div>
</div>

画像を要素の中央に配置する

ここまでの内容を理解すると、要素が生成するボックスと画像自体の配置を切り離して扱えることが分かります。これを利用すれば、今まで画面の中央に画像を寄せる方法に悩んでいたことが嘘のように解決します。

以下の内容は、<img>要素のみで実現しています。ボックスの横幅を可変式にして中央に画像を配置しています。これはボックスのサイズやアスペクト比がいかなるものであっても、画像を中央に配置できることを意味します。実は既定値ではこれと同じ方法で配置されますが、object-fitによる自動調整が働くために画像の寸法が変わってしまうのです。

更に、サンプルでは<img>要素そのものに背景画像を配置しています。このような応用が利くのも、コンテナとオブジェクトを分けて考える時の利点です。resizeに対応しているブラウザであれば、コンテナの横幅を変更できます。画像が中央に寄ったまま移動するので確認してみましょう。

表示確認
CSS
.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;
}
HTML
<div class="samp_box">
	<div>
		<h2>object-position: center center;</h2>
		<img src="../images/sample_square_100.png" alt="サンプル画像">
	</div>
</div>

object-positionに関連する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 要素の重なり順序を指定する