レスポンシブ対応

レスポンシブ対応アイキャッチ画像

サイト制作「Lifestyle」(入門)編の最終レッスンです。今回のレッスンのボリュームは少し多くなります。

前回のレッスンまではPC用のデザインの構築を行ってきました。

今回はタブレット(TB)用とスマートフォン(SP)用のデザインを構築していきます。

よく目にする”レスポンシブ対応”とは世の中にある様々なデバイスに対応する。という意味です。

ですので、PCやタブレットスマホはもちろん、スマホなどを横にしたとときにもデザインは崩れないという状況にします。

こちらも難しく考える必要はありません。

今まで書いてきたCSSを上書きすることで対応します。

CSSは下に後に書いたCSSが上書きされて適応されます。下に書くほどに優先度が高くなります。

※その他にも優先順位のルールはありますが今回は後述したCSSの方が優先度が高いという考えだけで大丈夫です。

では行きましょう!

レスポンシブの書き方

まず簡単にレスポンシブの書き方を説明します。

HTMLにはコードを一行を書きます。

HTML

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

HTMLのコードはこちらです。このコードがないとレスポンシブのコードを打っても反応しません。

HTMLのheadタグの中に書いておきましょう。と言いたいところですが、このレッスンの一番最初に打ったエメットで実はこのコードは自動挿入されています。

もし、何かの間違いでこのコードがHTMLに打たれていない場合は打ち込んでください。大概の方は既に存在していると思います。

CSS

@media screen and (max-width: 930px) {
    /* デバイスのサイズが930px以下の場合のコードを書く */
/* ※930pxの後ろに;(セミコロン)は付けません */ }

本題はCSSです。

@media screen and (max-width: 930px){} をの意味は930px以下のデバイスの場合からまでのCSSを適用する。です。

また本レッスンとは逆にSP用のデザインから構築した場合は@media screen and (min-width: 930px){}

と書き、意味は930px以上のデバイスの場合{から}までのCSSを適応する。という意味になります。

max-width: ○○pxmin-width: ○○pxの違いです。

@mediascreen and (max-width: 930px) {
    /* デバイスサイズが930px以下の場合のCSS */
}

@media screen and (min-width: 930px) {
    /* デバイスサイズが930px以上の場合のCSS */
}

本レッスンはPCからのデザインを行っていますのでmax-width: ○○pxを使用します。

ではまずタブレット用のCSSコードを載せます。

@media screen and (max-width: 930px) {
    section{
        padding: 0;
    }

    .container{
        padding: 0 24px;
    }

    header{
        flex-direction: column;  /* 解説します */
        margin: 30px 0 56px;
    }
   
    .logo{
        margin-bottom: 14px;
    }

    .nnavigation ul li {
        margin-right: 40px;
    }

    .first-view{
        margin-bottom: 60px;
    }

    .columns{
        flex-direction: column; /* 解説します */
    }

    .column__block{
        width: 100%; /* 解説します */
max-width: 450px; /* 解説します */     }     .text{         max-width: 450px;         margin-right: auto;         margin-left: auto;     }     .order{         margin-top: 126px;     }     .order .column__block:first-child{ /* 解説します */         order: 2;     }

article{
width: 35%;
min-width: auto;
}     .column__block{         margin-bottom: 28px;     }     .sub-ttl{         margin-bottom: 7px;     } }

異常が全体のコードです。PCの検証ツールを使ってPCのウィンドウサイズを変更してみてください。

930pxになった瞬間にデザインが変わっているはずです。

以下、検証ツールを使ったウィンドウサイズの変更方法です。

検証ツールの開き方は

右クリック一番下の「検証」(検証ツール)をクリック

もしくは

※ショートカットキーは windows → 【 F12ボタン 】 mac → 【 Command + Option + I 】

です。

どうでしょうか?ご自身のパソコンでも変わりましたか?

では、「/* 解説します */」と書いている部分を説明します。

その他marginやpaddingは余白をいい感じにしているだけですので説明は省きます。(笑)

TBレスポンシブコードの説明

headerと.columnsで使用したCSS

まず、メディアクエリ内に書いた

header{
    flex-direction: column;
}

.columns{
    flex-direction: column;
}
こちらのコードについて説明します。
まずflex-directionについて説明しておきます。
flex-direction子要素の並ぶ方向を決める呪文です。
今まで何度かdisplay: flex;で要素を横並びにしてきました。
実はdisplay: flex;はのflex-directionには初期値(初めから設定されている値)がありflex-direction: row;が初期値で設定されています。
flex-direction: row; /* 横並び 左から右へ */
flex-direction: column; /* 縦並び 上から下へ */
flex-direction: row-reverse; /* 横並び 右から左へ */
flex-direction: column-reverse; /* 縦並び 下から上へ */
と、4つの方向を決める呪文がflex-directionにはあります。
そして、今回レスポンシブでcolumnを使いましたので、要素は上から下へと縦並びになります。

.column__blockで使用したCSS

.column__block{
    width: 100%;
    max-width: 450px;
}
こちらのコードについて説明します。
.column__blockはPCデザインの時は2カラム表示だったので、width: 45%;に設定していました。
ですが、TB表示の場合は1カラムなので親要素にflex-direction: column;を指定し、現在は1カラムとなっています。
1カラムの状態で45%表示ですと画像が小さく見にくいのでwidth: 100%;表示し横幅を大きくさせています。
また、max-width: 450px;と設定し、450px以上は大きくならないように設定しています。.textにもmax-width: 450px;を設定しているので両端がそろっている状態になります。
はい、説明がややこしいですね。すいません。
簡単に言います。
縦に並べて大きくして、大きさの最大値を決めました。
これが、.column__blockに書いたCSSの全貌です。

.order.column__block:first-childで使用したCSS

そうですね、皆様の気持ちはよく分かります。

なんじゃこれ。

という言葉が聞こえてきます。大丈夫です。説明しますね。

まず、

.order .column__block:first-childなのですが、<div class="order">の子要素の<div="column">を指しています。
次に:first-childなのですが、意味としては最初のクラスのみを指定しています。
つまり、
<div class="order">の子要素の一番最初にある<div="column">にCSSを適用するといった意味になります。
これはちなみにlesson3の内容にチラー――っと出てきていた内容になります。
:first-child疑似要素と呼ぶのですが、疑似要素についてはまた別記事で詳しく書きます。

SPレスポンシブコードの説明

サイト制作「Lifestyle」(入門)編の最後の解説をします。
以下SP時(600px以下)のコードになります。
@media(max-width:600px){
    section{
        margin-top: 100px;
    }

    article,
    article img {
        width: 100%;
    }

    footer{
        padding: 35px 0;
    }
}
最後の説明はあっさりです。
PHOTOセクションがTB時には2カラムだったので、1カラムにします。
これは簡単で、<div class="archive">タグにdisplay: flex;で子要素の<article>タグが横並びになっていてflex-wrap: wrap;<article>タグの幅が親要素の<div class="archive">タグよりも大きくなったら下に落ちるという設定を行っていました。
ので、子要素の幅を100%にすればいいわけです。
ですので、
article,
article img {
    width: 100%;
}
を指定します。
さらに<article>タグの子要素である<img>タグの大きさも100%にすることで、1カラムになります。

レッスンの終わり

お疲れさまでした!

以上でサイト制作「Lifestyle」(入門)編のすべてのレッスンを終えました。

おめでとうございます!本当にお疲れさまでした。

構築したサイトはデザイン通りの見た目になっていますか?

 

また、今後も少しずつ難易度を上げた他のBENKYOU用デモサイトを製作中ですので引き続きご自身のレベルアップの為、当サイトをご利用くださいませ。