sikaku

CSSのみでスマホの横向き固定ページ設定

スマホの横向き固定ページをCSSのみで設定できるようにしたものです。

別件で入用だったので作成。

source code

基本

HTML
  1. <div id="wrp">内容</div>
CSS
  1. html {
  2. width: 100vw;
  3. height: 100vh;
  4. overflow: hidden auto;
  5. }
  6. body {
  7. width: 100vw;
  8. margin: 0;
  9. padding: 0;
  10. overflow: hidden;
  11. }
  12. #wrp {
  13. width: 100vw;
  14. height: 100vh;
  15. overflow: auto;
  16. }
  17. @media screen and (orientation:portrait) {
  18. #wrp {
  19. width: 100vh;
  20. height: 100vw;
  21. margin: -100vw 0 100vh;
  22. transform: rotate(90deg);
  23. transform-origin: left bottom;
  24. }
  25. }

demo

アス比固定

CSS
  1. html {
  2. width: 100vw;
  3. height: 100vh;
  4. overflow: hidden auto;
  5. }
  6. body {
  7. width: 100vw;
  8. margin: 0;
  9. padding: 0;
  10. overflow: hidden;
  11. }
  12. #wrp {
  13. --width: 100vw;
  14. --height: calc( var(--width) / 16 * 9 );
  15. --margin-base: 50vh;
  16. --centering: calc( var(--margin-base) - var(--height) / 2 );
  17. width: var(--width);
  18. height: var(--height);
  19. margin: var(--centering) auto 0;
  20. overflow: auto;
  21. }
  22. @media screen and (orientation:portrait) {
  23. #wrp {
  24. --width: 100vh;
  25. --margin-base: 50vw;
  26. margin: calc( var(--height) * -1 ) var(--centering) var(--width);
  27. transform: rotate(90deg);
  28. transform-origin: left bottom;
  29. }
  30. }

アス比固定するならこうかな🤔 上記は16:9。色付き部分の編集だけで反映されるようにしています。

demo

ついでに最大幅指定するならCSS末尾に下記を追加

追加CSS
  1. @media screen and (min-width:800px),(min-height:800px) {
  2. #wrp { --width: 800px}
  3. }

編集時800px三か所は同値で。

編集について

はお好みで調節してください。

div要素を用いて角度を変更していますが、この傾ける要素一見「bodyでいいのでは🤔」となると思います。

が、androidでの挙動がとにかく安定しなかったのでお勧めしません。(ブラウザによりスクロールできなかったり要素が意図せぬところで非表示になったり)

なにをやってるのか

  • 内容を書いた要素を用意
  • 要素のサイズを下記に

    幅 :画面の高さ

    高さ:画面の幅

  • 要素の高さ分、上へずらす
  • 青い点を基点に
  • 90度回転
  • 完成