あまりない状況かもしれませんが、画面の縦と横の比率(アスペクト比)を変えずに、拡大・縮小したいことがありました。
よく考えてみると、画像の幅を100%で表示すると似たような動きになりますよね?
しかし、画像だけではなく、コンテンツ領域全体のアスペクト比を固定する方法をご紹介します。
目次
アスペクト比を固定する方法
単純に縦横比を固定するだけなら、以下のように書けば良いです。
HTML
1 |
<div class="content">ここにコンテンツが入ります</div> |
CSS
1 2 3 4 5 |
.content { width: 100%; height: auto; padding-top: 75%; } |
75%がどこから来たかと言いますと、
1 |
[高さ] / [横幅] × 100 |
の計算式で求めることができます。
つまり、4:3で固定したい場合は、
1 |
3 / 4 * 100 = 75% |
となります。
CSSのcalc()関数を使うと楽
padding-top
の値を計算するのは面倒という方に、CSS内で計算ができるcalc()
関数を使えば、わざわざ計算しなくても縦横比だけで設定できます。
使い方は簡単!
上記の計算式をそのまま括弧内に入れてあげれば完成です。
1 |
padding-top: calc(3 / 4 * 100%); |
calc() - CSS: カスケーディングスタイルシート | MDN
calc() は CSS の関数で、 CSS のプロパティ値を指定する際に計算を行うことができるものです。 、、、
コンテンツも加えたい
もうお気付きかと思いますが、padding-top
を使っているので、このままではアスペクト比を固定した領域にコンテンツを追加することはできません。
せいぜい、バックグラウンドで画像を表示するくらいしか使い道がありません。
そこで、「position
」プロパティと擬似要素の「:before
」を利用して解決します。
HTML
先程のコンテンツを囲むラッパーを作ります。
1 2 3 |
<div class="wrapper"> <div class="content">ここにコンテンツが入ります</div> </div> |
CSS
ラッパーのposition
はrelative
、:before
に先程と同じpadding-top
を設定し、コンテンツのposition
をabsolute
にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
.wrapper { position: relative; width: 100%; } .wrapper:before { content: ""; display: block; padding-top: calc(3 / 4 * 100%); } .content { position: absolute; top: 0; left: 0; bottom: 0; right: 0; } |
これでアスペクト比を固定したままコンテンツを追加できる領域が作成できました。
CSSだけでアスペクト比を固定するテク - Qiita
Javascriptを使わず、CSSだけでimgやdivやiframeのアスペクト比を固定したままコンテナに合わせてリサイズする方法です。レスポンシブなデザインの場合は端末の画面サイズ...
コメント