背景画像等をレスポンシブデザインでも縦横比をぴったり固定する方法
レスポンシブデザインでリピートしないタイプの背景画像があると悩んでいました。
デバイスによって、横幅が違うため、自ずと要素の横幅が変わる中でどのように背景画像を指定すればいいのだろうか・・・と。
「その要素は横幅が固定です。」となればいいのですが、そういうわけにもいかないと思います。
これは背景画像だけでなく、iframeや動画の埋め込みなんかもこのようなことが起きるかと思います。
この問題を解決する方法を少し前に発見したので記載したいと思います。
ちなみに今までの対処法としては、ブレークポイントに合わせて都度高さの設定を行っていました。
そのブレイクポイントの解像度のデバイスならいいんですが、それ以外だと崩れて見えてしまっていました。
新しい方法の説明する前に、DEMOをご覧ください。
わかりづらいかもしれませんが、今までの方法と新しい方法を2つを載せています。
ブラウザを縮めてみると2つの違いが発生します。
新しい方法の説明をさせていただきます。
htmlは変わりません。(レイアウト上classつけてますが)
1 2 3 4 5 6 7 8 9 10 11 12 13 | <div class="left"> <div class="box box01"> <p>従来やっていた方法:メディアクエリーでプレイクポイントを設定し、都度高さを調整</p> </div> <p>テキストテキストテキストテキストテキストテキストテキスト</p> </div> <div class="right"> <div class="box box02"> <p>今回の方法:padding-topを設定し、それを高さとする方法</p> </div> <p>テキストテキストテキストテキストテキストテキスト</p> </div> |
cssの設定が違います。
今回の方法は、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | .box { width: 100%; position: relative; background: url(../img01.jpg) no-repeat left top; margin-bottom: 20px; } .box.box02 { -webkit-background-size: 100% auto; -o-background-size: 100% auto; background-size: 100% auto; } .box.box02:before { content:""; display: block; padding-top:75%; } .box.box02 p{ position: absolute; left: 0; top: 0; } |
注目する箇所は
擬似要素でpaddingを設定している箇所です。
padding-topを75%にしています。
この75%というのは、横幅に対しての比率になります。
というのも、
marginやpaddingの上下の%やemの数値は、横幅に対してになるらしいです。
この場合横幅が100pxだとしたら、padding-topは75pxになります。
この設定によって、ブラウザのサイズが変わっても縦横比を固定することが出来ます。
中の要素をabsoluteをかける必要があるので、この部分が場合によっては問題発生するかもしれません。
この仕組・考え方は以下の記事をご参考ください。
レスポンシブWebデザインでハマりがちな%指定
冒頭でも申し上げたとおり、背景画像の場合だけでなく様々な状況で使えるtipsだと思います。
Author Profile
スターフィールド編集部
SHARE