7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

固定エリアの中に可変画像を中央寄せ+長い方で縮小して配置をimgタグのままCSSのみで行う方法

Last updated at Posted at 2018-01-21

あまりないかもしれませんが、サイズ指定されたエリアの中に、様々なサイズの画像を縦横中央+長い方で縮小して設置する方法です。

background-imageを使用すれば簡単ですが、ここではimgタグのまま行う方法を紹介します。

下記のjQueryプラグインを使用すると簡単ですが、imgタグをbackground-imageに変換することで可能にしています。
https://github.com/karacas/imgLiquid

僕は、以前はこちらをよく使用していましたが、flexboxが使用できるようになった今ではCSSのみで対応できます。

対応方法

下記のような200×200のエリアを例に説明したいと思います。

スクリーンショット 2018-01-21 22.22.28.png
<div class="imageBox"></div>
.imageBox {
  $areaSize: 200px;
  width: $areaSize;
  height: $areaSize;

  border: solid 1px #ccc;
  background: #eee;
}

対応方法

HTMLを以下のようにして、画像を設置します。

<div class="imageBox">
  <img arc="" alt="" />
</div>

CSSは下記のように修正します。

.imageBox {
  $areaSize: 200px;
  width: $areaSize;
  height: $areaSize;

  border: solid 1px #ccc;
  background: #eee;
  
  display: flex;
  align-items: center;
  justify-content: center;

  > img {
    max-width: $areaSize;
    max-height: $areaSize;
    width: auto;
    height: auto;
  }
}

まず、.imageBox(画像を入れる要素)に、display: flex;, align-items: center;, justify-content: center;を指定します。
これによって、子要素のimgタグを縦横中央に設置します。

さらに、子要素のimgタグに縦横サイズの指定を追記ます。
縦横の最大を、親要素のサイズになるように、max-width: $areaSize;, max-height: $areaSize;を指定します。
これによって、縦横のより長い方が縮小され、もう片方(縦/横)も同じ比率で縮小されます。
明示的にwidth: auto;, height: auto;を指定していますが、なくても問題ないです。
また、サイズは変数化しておいた方が、修正漏れなども置きなくなるので、変数化をおすすめします。

縦がエリア以上の場合

スクリーンショット 2018-01-21 22.40.17.png

横がエリア以上の場合

スクリーンショット 2018-01-21 22.41.30.png

縦横がエリア以下の場合

スクリーンショット 2018-01-21 22.42.41.png

縦横がエリア以上の場合

スクリーンショット 2018-01-21 22.43.34.png

この場合、横の方がよりエリアより大きかったので、横ベースで縮小されています。

まとめ

以上が、固定エリアの中に可変画像を中央寄せかつ、長い方で縮小して設置する方法でした。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?