Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9008

CSSだけ使って、どんな画面サイズでも縦横比と余白を維持したいんじゃ

$
0
0
やりたいこと 画面サイズによってメインコンテンツの大きさを変えたいけど縦横比は維持したい。 メインコンテンツは画面から少しマージンを取る。画面からはみ出さないようにする。 JavaScript で画面のサイズを計算してやってもいいけど動きがモッサリだから CSS だけでやりたい。 やってみた 縦と横の比は 4:3 画面サイズの 95% を超えないようにする この条件で実装してみました。 実装方法 min と vh vw を組み合わせたらスッキリ書けました。実質2行。 <div class="content"> <div class="box"></div> </div> /* メインコンテンツ */ .box { background: #eee; width: min(95vw, 95vh * 0.75); /* 横幅の計算 */ height: min(95vh, 95vw / 0.75); /* 縦幅の計算 */ } /* ※中央寄せしたいだけなので、ここから先は本題と関係ない */ html,body, .content { width: 100%; height: 100%; background: #263238; } .content { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } 説明 場合わけして考えてみます。 まずタテに長い画面の場合は・・・こうなってほしいですよね。 次にヨコに長い画面の場合は・・・こう。 min 関数を使うと、引数のうち小さい方を採用してくれるので、画面幅の95%を超えないように抑えてくれます。 .box { background: #eee; width: min(95vw, 95vh * 0.75); height: min(95vh, 95vw / 0.75); } 95% ではなく、かならず画面端から 20px 離したいというときはこう書きます。 .box { background: #eee; width: min(100vw - 20px, (100vh - 20px) * 0.75); height: min(100vh - 20px, (100vw - 20px) / 0.75); } 補足 メディアクエリでタテ長の場合とヨコ長の場合で分けて書いても構いません。 (こっちのほうがわかりやすいですね) /* 縦長の場合 */ @media screen and (orientation: portrait) { .box { width: 95vw; height: calc(95vw / 0.75); } } /* 横長の場合 */ @media screen and (orientation: landscape) { .box { width: calc(95vh * 0.75); height: 95vh; } }

Viewing all articles
Browse latest Browse all 9008

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>