画面幅に応じてCSSを適応させる

はじめに

私が現在、模写コーディングをしているページを題材に、レスポンシブ化について書いていきます。


MacBook(画面幅が1440px)では、このように表示されているページが

f:id:khirok:20200209093611p:plain

ipad(画面幅が768px)で見てみると、レイアウトが崩れてしまいます。

f:id:khirok:20200209093734p:plain

iPhone(画面幅が375px)の場合も同様です。

f:id:khirok:20200209093853p:plain

レスポンシブデザインを行えば、それぞれのデバイス(スマホ・タブレット・PC)に最適化された表示をすることができます。

準備をする

まずは、HTMLのheadタグ内に

 <meta name="viewport" content="width=device-width, initial-scale=1.0">

この記述をします。


次に、スマホ用とタブレット用のCSSファイルを作成して、headタグ内で読み込ませます。

 <link rel="stylesheet" href="sp-responsive.css">
 <link rel="stylesheet" href="tb-responsive.css">

通常のCSSファイルに記述することも出来ますが、分けたほうが管理がしやすいと思います。

タブレットの画面幅

タブレットの横幅は、iPadの場合768pxです。
ipad Proの場合は、1024pxです。
(Google の検証ツールを参照しました)

よって、タブレット向けのCSSは1030px以下の場合に適応されるようにします。


tb-responsive.css

@media (max-width: 1030px) {
  
}

この中にCSSを書くことで、画面幅が1030px以下の場合に適応されます。

例えば、Workspaceという文字を赤色にしたい時

f:id:khirok:20200209093734p:plain
Workspaceという文字は、main-top__titleの中のh1なので

index.html

 <div class="main-top__title">
     <h1>Workspace</h1>   
     <p>カフェ・コワーキングスペース・オープンスペース・・・</p>
     <p>集中できる場所を探そう!</p>
 </div>

このように記述すると
style.css

@media (max-width: 1030px) {
  .main-top__title h1{
    color: red;
  }
}

赤色に変化します。
f:id:khirok:20200209102010p:plain

スマホの画面幅

スマホの画面幅は、iPhone6/7/8の場合375pxです。
iphone6/7/8 Plusの場合は、414pxです。

よって、スマホ向けのCSSは450px以下の場合に適応されるようにします。

sp-responsive.css

@media(max-width: 450px) {
  
}

現在の画面
f:id:khirok:20200209111104p:plain
画面を最大まで右にスクロールさせると
f:id:khirok:20200209111940p:plain

こうなります。
画面幅から、要素がはみ出ていることが分かります。

この記事では、右上の「オーナーはこちら」をスマホの画面幅に収めたいと思います。

index.html

<div id="owner">オーナーはこちら</div>

style.css

#owner {
      position: absolute;
      top: 0;
      right: -180px;
      background-color: #DAF0E0;
      padding: 21px 30px;
      color: #009872;
      height: 20px;
      cursor: pointer;
    }

現在、画面の一番右上を基準として、さらに180pxだけ右の位置に固定されています。

これを次のように変更します。

sp-responsive.css

#owner {
      position: absolute;
      top: 0;
      left: 0;
      background-color: #DAF0E0;
      padding: 21px 30px;
      color: #009872;
      height: 20px;
      cursor: pointer;
    }

左から0の位置に固定しました。

するとこうなります。
f:id:khirok:20200209112718p:plain

おわりに

position: absolute;で位置指定をした要素は、画面幅が狭まるとはみ出してしまう恐れがあるため、注意が必要です。


今回は、下の方の要素でもposition: absolute;を多用していたため、スマホの画面幅からはみ出ている状態となっています。


今後は、これを修正していくつもりです。