CSSで、要素のアスペクト比を維持して、拡大・縮小する方法

最終更新:2017-05-17 by Joe

要素の横幅をうまくリキッドに実装したけど、うまく縦横非が維持できない。

そんな時の処方箋です。

アスペクト比(縦横比)を限定する方法

基本編

まずは基本編。:bofore要素を利用して

HTML:

<div class="container">
  <!-- なんでも要素 --->
</div>

CSS:

.container:before{
  content:'';
  display:block;
  width:100%;
  height:0;
  padding-bottom:75%;
}

ポイントは、padding-bottomで、こちらは%指定だと、「親要素の横幅を基準に」という仕様です。仕様です。containerの横幅に合わせて、伸縮します。

上記だと、要素内をbeforeが専有してしまうので、containerの子供は、position:absoluteしておくとよいでしょう。

HTML:

<div class="container">
  <img src="hogehoge.png">
</div>

CSS:

.container{
  position:relative;
}
.container:before{
  content:'';
  display:block;
  width:100%;
  height:0;
  padding-bottom:75%;
}

.container img{
  position:absolute;
  width:100%;
}

アスペクト比(縦横比)を固定したグリッド

応用編です。わかりにくいかな。3列のグリッドで、要素の縦横比を1:2にしています。

要素の背景が常にセンタリングなので、グリッドの大きさが変わっても、縦横比はたもったまま、うまく画像がトリミングされるようになります。