BLOG
ブログ
programming
画像を1枚ずつトリミング…CSS一行で解決できます!
こんにちは、ティウェブ佐藤です。
object-fit
プロパティ、使ってますか?
object-fit
プロパティは、background-size
プロパティのcover
やcontain
の代わりにもなるプロパティです。
そんな便利なobject-fit
プロパティについて詳しく調べてみました。
目次
「object-fit」プロパティとは…
画像などの要素をボックスにフィットさせる方法を指定できるプロパティです。
background-size
プロパティだと背景処理になり、imgタグで処理したいときに対応できません。
しかし、今回紹介するobject-fit
プロパティはimgタグとして扱うことができ、縦横比を保ちつつbackground-size
プロパティに似た処理が可能になります。
メリットやデメリット
メリット
- よりシンプルなコーディングができる
- トリミングができるため画像をリサイズする手間が省ける
- スマホとPCの切り替えが楽になり、場面ごとに画像のトリミング調整をしなくてもよい
- imgタグならalt属性に画像情報を記載できるため、アクセシビリティの面でも画像検索対応の面でも好ましい
デメリット
- IE、Edgeに対応させるにはjQueryが必要(実装工程は少なめ)
「object-fit」プロパティの値は5つ!
<img src="dog.jpg" alt="可愛いワンちゃんの正面写真">
こちらの可愛いワンちゃんの画像を使ってみます。
値:fill
img { width: 400px; height: 185px; object-fit:fill; }
オブジェクトが縦横比を変えながら完全にボックスの中を満たしリサイズされます。
値:contain
img { width: 400px; height: 185px; object-fit:contain; }
幅と高さの大きい方が基準になり縦横比を維持したまま、ボックスに収まるようにリサイズされます。
値:cover
img { width: 400px; height: 185px; object-fit:cover; }
幅と高さの小さい方が基準になり縦横比を維持したまま、ボックスを満たすようにリサイズされ、はみ出す部分はトリミングされます。
値:none
img { width: 400px; height: 185px; object-fit:none; }
リサイズされずにそのままのサイズで表示されます。
値:scale-down
img { width: 400px; height: 185px; object-fit:scale-down; }
none又は containの、オブジェクトの実際のサイズが小さいほうを採用します。
トリミング位置も1行で決められます!
img { width: 400px; height: 185px; object-fit:none; object-position:0 100%; /*左下を基点にトリミングされます*/ }
object-position:値;
でトリミングの位置を決められます。
background-size
プロパティの値によって表示される画像の位置の初期値はobject-position: 50% 50%;
なります。
この位置を調整したい場合は、object-position
プロパティの値を調節します。
IEやEdgeに対応させるには?
プラグインの「object-fit-images」の導入でobject-fit
プロパティが対応可能になります。
別ファイルが必要になりますが、CDNもあるので導入がしやすいです。
Github:object-fit-images
導入方法
- 1.CDNを読み込み
- 2.スクリプトを呼び出します
- 3.CSSで
object-fit
プロパティを記述img{ object-fit: contain; font-family: 'object-fit: contain;' /*IEやEdgeに対応させる特別な記述*/ }
font-family: 'object-fit:値;
がobject-fit
プロパティと同じ意味を持つ特別な記述であり、IE・Edge対策になります。
まとめ
コーディングもシンプルになることだけでなく、position
を駆使したり、Photoshopを使ってすべての画像をトリミングする手間が省けそうです。
特に、画像をレスポンシブ対応させたいときや、サイズの違う大量の写真を並べるときに便利でしょう。
シンプルに手間を少なくしたい方は、object-fit
プロパティをぜひ導入してみてください。