向壁虚造

WEBサイト作成のためのプログラミング備忘録

画像を丸くトリミングして表示するCSS

CSSで画像を丸くトリミングして表示するには?

サムネイルやアイコン、ボタンなど画像を丸く表示させたいシーンがありますよね。

ですが、わざわざ編集ソフトで円形に加工するのも面倒くさいもの…。

さらに円形に切り抜いた後の余白に透明加工を施さなければならなかったりと、意外と作業が多かったりします。

画像を丸く切り取った時の余白

実は、CSSなら数行のコードだけで画像を丸く表示させることができます。

今回は、要素に角丸を施す時に使われる「border-radius」で画像の円形表示を試みたいと思います。

※この記事は基本からステップアップ形式で解説しています。手っ取り早く画像を正円表示するコードを知りたい人は、以下の目次の「1.」「2.」は読み飛ばし「3.」または「5.」へ進んでください。

1.画像を丸くするborder-radiusの基本的な使い方

border-radiusは一般的にサムネイル表示などを角丸にしたい場合に用いられるCSSです。

例えば、当サイトのトップページの記事アーカイブもサムネイルにborder-radiusを設定しています。

boder_radiusの使用例

さらにborder-radiusの値を上げれば画像を丸くすることが可能です。

角丸にする場合は値として「px」指定することが多いですが、円形にするなら「%」のほうが簡単です。

以下のようにboder-radiusの値を50%にすれば、画像のサイズに関係なく円形に表示されます。

しかし、あくまで画像の四隅を丸くしているだけなので、元々のサイズが正方形でない場合、このように楕円になってしまいます。

border-radiusuで楕円形になってしまう例

次は画像を正円にする方法を考えてみましょう。

2.画像を正円にする方法

こちらも正円に表示するだけなら、基本的なCSSで対応できます。

以下のように画像のサイズを正方形に矯正してあげれば良いわけです。

border-radiusで正円表示

ところが、上図を見ていただけるとわかる通り、画像が歪んで表示されてしまいます。

これはwidthheightで無理やりリサイズしてしまっているため、縦横比が崩れてしまっているのが原因です。

では、縦横比を維持したまま正円にするにはどうしたら良いのでしょう?

3.縦横比を崩さず正円に切り抜きたい場合

縦横比を崩さず画像を正円に表示させるには、リサイズではなく「切り抜き(トリミング)」するしかありません。

画像を丸く切り抜き表示するには、今までのように<img>要素で画像ファイルを呼び出すのではなく、<div><p>などにCSSから背景画像として要素に適用させます。

コード上では<div>要素を丸くリサイズしているため、背景画像のサイズはそのままです。

これで縦横比の問題は解決するのですが、下図のような場合、切り抜き位置が非常によろしくありませんね。

background-imageをborder-radiusで切り抜き

画像の真ん中にあるはずの肝心の猫ちゃんのお顔がまるで見えません。

このように、切り抜く位置を調整したい場合はbackground-positionプロパティを使います。

background-position: center;

backgroud-positionの値をcenterに設定すると、以下のように<div>要素に背景画像の真ん中が表示されます。

background-positionで切り抜き位置を調整

backgroud-positionプロパティはcenter以外にも以下のような値を指定できます。

  • top : 上から切り抜き
  • bottom : 下から切り抜き
  • right : 右から切り抜き
  • left : 左から切り抜き

また、値を2つ組み合わせて適用させることも可能です。

background-position: top right;

上記の場合、画像の右上から切り抜かれます。

さらに位置を微調整したい場合は、パーセンテージで指定する方法もあります。

centerだと猫ちゃんの耳が入りきらなかったので、以下のように修正してみました。

background-position: 54% 36%;

background-positionをパーセンテージで指定

一番目の値がX軸、二番目の値がY軸の位置を表します。

background-positionのcenter指定とパーセンテージ指定の比較

編集ソフトで画像を丸くし、余白に透明加工を施すのは案外、時間がかかるものです。

画像を丸くする程度の加工であれば、CSSでやっつけちゃったほうが早いかもしれませんね。

4.丸く切り抜いた画像にオシャレな枠をつけてみよう

最後に丸く切り抜いた画像に、ちょっとした装飾をつけちゃいましょう。

背景画像を設定している要素にborderを加えれば、画像の周りにちょっとしたアクセントを付け足すことができます。

border: solid 4px #ff6347;

あるいは以下のようにHTMLを入れ子構造にし、親要素にグラデーションを施した枠に見立てることも可能です。

円形表示した画像の枠

枠をつけるだけで、大分印象が違いますよね。

5.object-fitならもっと簡単に画像を丸くトリミングできる

入れ子構造にして背景画像を切り抜く方法は、HTML・CSSともにコードが増えてしまうのが難点でした。

しかし、CSS3から「object-fit」という画像を切り抜き表示してくれるプロパティの普及が進み、入れ子構造にしなくても<img>要素のスタイルを変更するだけで良くなりました。

2.」で紹介したように、画像の大きさと形を指定したら「object-fit: cover」を一行書き加えるだけでOKです。

これだけで、縦横比を維持したまま円形にトリミングされます。

ただし、上記の場合、元々の画像のサイズも一緒にリサイズされてしまいます。

画像の大きさはそのままで、トリミングの範囲だけ小さくしたい場合はobject-fitの値を調整します。

object-fit: none;

coverからnoneに変えるだけですね。

また、デフォルトのままでも画像の中心から切り取ってくれますが、切り抜き位置を調整したい場合はobject-positionプロパティを付け足します。

値の指定方法は先ほど紹介したbackground-positionとおおむね同じようです。

上記は最初の値(54%)がX軸、次の値がY軸(36%)を示しています。

object-fitプロパティは非常に便利なCSSですが、IE11では未対応のようなので注意してください。

object-fitのブラウザ対応状況(Can I use…)

まとめ

  • 画像を丸く表示するならCSSのborder-radiusが有効
  • 縦横比が崩れない正円にしたい場合はbackground-imageで対応
  • background-positionで切り抜き位置を微調整できる
  • object-fitプロパティを使えば、<img>要素そのものを切り抜き可能