CSSで画像をトリミングする方法を解説!
WEBサイトのコーディングやその修正で何度もPhotoshopなどを使って画像のトリミングをおこなうのは大変ですよね・・・そこで、今回はCSSで画像をトリミングする方法を解説します!サンプルコードも用意しているので皆さんもぜひ挑戦してみてください!
CSSで画像をトリミングしたい
CSSで画像をトリミングする方法を解説します!
毎回、面倒なトリミング作業や画像のレスポンシブもCSSなので簡単に設定できます!
その他にもWordpPressなどのCMSでクライアントが写真を更新する箇所でも、
写真がはみ出したり、切り抜きをしなくてもレイアウトが崩れることがないのでとっても安心です。
今回は、下のような横に長い画像と縦に長い画像をつかって解説します。
overflowプロパティを使ってトリミングをする方法
この方法は、写真画像の要素をトリミングの枠になる要素で切り抜くようなイメージです。
昔からよく使われていたやり方なのでIE11でも余裕で対応しており、transformプロパティが使えるブラウザであれば実装が可能です。
基本となるHTML構造は下のようになります。
【HTML】overflowプロパティを使ってトリミングをする方法
<div class="trim">
<img src="../imgs/cat.jpg" alt="写真:猫">
</div>
<div class="trim">
<img src="../imgs/dog.jpg" alt="写真:犬">
</div>
トリミングする枠の要素となる.trim
の共通CSSは下となります。
【CSS】overflowプロパティを使ってトリミングをする方法
/* トリミングしたい親要素 */
.trim {
position: relative;
overflow: hidden;
width: 50%; /* トリミングしたい枠の幅 */
height: 100vh; /* トリミングしたい枠の高さ */
}
.trim
には、overflow: hidden;
を指定して、この要素の範囲からはみ出す要素は非表示にします。
また、写真画像の要素は上下中央にする必要があるので、併せてposition: relative;
を指定します。
幅や高さについては、適宜設定してください。
img
要素のCSSの指定は、写真をどのように設定したいかによって変わります。
それでは、サンプルコードと共に見ていきましょう!
横幅に合わせてトリミング
縦横比を保持し、ボックスに収まるようにリサイズされます。
img
要素の横幅に合わせて比率を保持してボックスにフィットさせます。
【CSS】横幅に合わせてトリミング
/* トリミングしたいイメージ要素 */
.trim img {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 100%;
height: auto;
}
高さに合わせてトリミング
縦横比を保持し、ボックスに収まるようにリサイズされます。
img
要素の縦幅に合わせて比率を保持してボックスにフィットさせます。
【CSS】高さに合わせてトリミング
/* トリミングしたいイメージ要素 */
.trim img {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: auto;
height: 100%;
}
中央に合わせてトリミング
縦横比を保持し、ボックスに収まるよう表示させます。
リサイズはされません。
【CSS】中央に合わせてトリミング
/* トリミングしたいイメージ要素 */
.trim img {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
トリミングせずにリサイズする
img
要素を中央にして、縦幅と横幅の大きい方をサイズに合わせて比率を保持し表示させる方法です。
例外ですが、こちらはトリミングはせずに画像全体を表示させたい時に利用するよいでしょう。
【CSS】トリミングせずにリサイズする
/* トリミングしたいイメージ要素 */
.trim img {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
max-width: 100%;
max-height: 100%;
width: auto;
height: auto;
}
object-fitプロパティを使ってトリミングをする方法
この方法は、現在最も簡単にトリミングができ、レスポンシブにも適応しやすい方法だと思います。
残念ながらIEは対応していませんが、下のブラウザであれば対応が可能です。
それでは、基本的なプロパティの使い方から見ていきましょう!
画像を中央の位置でトリミングする
HTML構造は下のようになります。
【HTML】画像を中央の位置でトリミングする
<div class="d-flex">
<img src="../imgs/cat.jpg" alt="写真:猫">
<img class="object-fit-cover" src="../imgs/cat.jpg" alt="写真:猫">
</div>
<div class="d-flex">
<img src="../imgs/dog.jpg" alt="写真:犬">
<img class="object-fit-cover" src="../imgs/dog.jpg" alt="写真:犬">
</div>
今回は分かりやすいように、object-fit
プロパティを使ったものとそうでないものを表示したいと思います。
そのため、.object-fit-cover
とついたものは、このプロパティを設定したものとします。
【CSS】画像を中央の位置でトリミングする
/* トリミングしたいイメージ要素 */
img {
width: 50%; /* トリミングしたい枠の幅 */
height: 50vh; /* トリミングしたい枠の高さ */
}
.object-fit-cover {
object-fit: cover;
}
.object-fit-cover
に対して、object-fit: cover;
を設定します。
cover
の値を設定することによって、img
要素で指定した大きさにトリミングがおこなわれます。
background-size
プロパティをイメージすると分かりやすいですね!
驚くことに「overflowプロパティを使ってトリミングをする方法」のCSSの記述の半分もありませんのでとっても簡単です。
左の画像が通常のもので、右の画像がobject-fit: cover;
を設定した画像です。
左はimg
要素で指定した大きさに合わせるために、つぶれて表示されてしまいます。
ですが、右の画像は、object-fit: cover;
が指定されているので、まるで要素に合わせた切り抜き画像のように綺麗に表示されています。
このように、object-fit: cover;
を使えば縦横のうち小さい方を基準にして自動的に拡大・縮小され、ボックスからはみ出した部分は自動でトリミングされます。
画像を任意の位置でトリミングする
object-position
プロパティを使って写真の位置を調整する方法のご紹介です。
引き続き、トリミングしたい要素には、object-fit: cover;
を使います。
【HTML】画像を任意の位置でトリミングする
<div class="d-flex">
<img class="object-fit-cover position-left-top" src="../imgs/cat.jpg" alt="写真:猫">
<img class="object-fit-cover position-right-bottom" src="../imgs/cat.jpg" alt="写真:猫">
</div>
<div class="d-flex">
<img class="object-fit-cover position-center" src="../imgs/dog.jpg" alt="写真:犬">
<img class="object-fit-cover position-custom" src="../imgs/dog.jpg" alt="写真:犬">
</div>
【CSS】画像を任意の位置でトリミングする
/* トリミングしたいイメージ要素 */
img {
width: 50%; /* トリミングしたい枠の幅 */
height: 50vh; /* トリミングしたい枠の高さ */
}
.object-fit-cover {
object-fit: cover;
}
/* トリミングしたい位置を指定する */
.position-left-top {
object-position: left top;
}
.position-right-bottom {
object-position: right bottom;
}
.position-center {
object-position: center;
}
.position-custom {
object-position: 20px 100%;
}
object-position
プロパティでは、left
やright
などはもちろん、%
やpx
の単位指定も利用可能です。
こちらもbackground-position
プロパティをイメージすると分かりやすいですね!
トリミングせずに余白を表示する
縦幅と横幅の大きい方をサイズに合わせて比率を保持し表示させる方法です。
例外ですが、こちらはトリミングはせずに画像全体を表示させたい時に利用するよいでしょう。
前項で解説した「トリミングせずにリサイズする」と同様です。
【HTML】トリミングせずに余白を表示する
<div class="d-flex">
<img class="object-fit-contain" src="../imgs/cat.jpg" alt="写真:猫">
<img class="object-fit-contain" src="../imgs/dog.jpg" alt="写真:犬">
</div>
【CSS】トリミングせずに余白を表示する
/* トリミングしたいイメージ要素 */
img {
width: 50%; /* トリミングしたい枠の幅 */
height: 100vh; /* トリミングしたい枠の高さ */
}
.object-fit-contain {
object-fit: contain;
}
object-fit
プロパティの値をcontain
にします。
こちらもbackground-position
プロパティをイメージするととても分かりやすいですね!
object-fitプロパティで使える値
object-fit
プロパティには、今回詳しく紹介したcover
やcontain
以外にも使える値があります。
下に一覧表を作成しましたので必要に応じて使い分けてみてください!
値 | 説明 |
fill(初期値) | ボックス内を満たすように縦横比を変えながらリサイズされます。 |
cover | 縦横比を保持してボックスを完全に覆うようリサイズされます。縦横のうち小さい方を基準にして自動的にリサイズし、ボックスからはみ出した部分はトリミングされます。 |
contain | 縦横比を保持し、ボックスに収まるようにリサイズされます。幅と高さのうち大きい方のサイズに合わせて比率を保持してボックスにフィットさせます。 |
none | リサイズせず、そのまま表示します。 |
scale-down | noneとcontainのうち、小さい方のサイズに合わせて表示します。 |
【HTML】object-fitプロパティで使える値
<figure>
<img class="object-fit-fill" src="../imgs/cat.jpg" alt="写真:猫">
<figcaption>fill(初期値)</figcaption>
</figure>
<figure>
<img class="object-fit-cover" src="../imgs/cat.jpg" alt="写真:猫">
<figcaption>cover</figcaption>
</figure>
<figure>
<img class="object-fit-contain" src="../imgs/cat.jpg" alt="写真:猫">
<figcaption>contain</figcaption>
</figure>
<figure>
<img class="object-fit-none" src="../imgs/cat.jpg" alt="写真:猫">
<figcaption>none</figcaption>
</figure>
<figure>
<img class="object-fit-scale-down" src="../imgs/cat.jpg" alt="写真:猫">
<figcaption>scale-down</figcaption>
</figure>
【CSS】object-fitプロパティで使える値
/* トリミングしたいイメージ要素 */
img {
width: 100%; /* トリミングしたい枠の幅 */
height: 50vh; /* トリミングしたい枠の高さ */
}
.object-fit-fill {
object-fit: fill;
}
.object-fit-cover {
object-fit: cover;
}
.object-fit-contain {
object-fit: contain;
}
.object-fit-none {
object-fit: none;
}
.object-fit-scale-down {
object-fit: scale-down;
}
まとめ
今回は、CSSを使った画像をトリミングする方法を解説しました!
同じようなやり方でも、それぞれ実現させたい条件やブラウザの対応状況でたくさんの方法があります。
もちろん、今回ご紹介した方法以外にもありますので、
ぜひ、みなさんも自分のベストコードを探してみてください!

横に長い画像