5-1 レスポンシブ基本

# レスポンシブデザインとは

レスポンシブデザイン は、閲覧者の画面サイズまたはウェブブラウザに応じたウェブページが閲覧できることを目指したウェブデザイン。  

簡単に言うと<font color="red">見る人の画面サイズ(横幅)に応じて</font>、見やすくデザインする。ということになると思います。

レスポンシブ対応を行う際の重要な設定が３つあります。

1. viewport
2. メディアクエリ
3. ブレークポイント

最初は、書き方を覚えてください。
深掘りすると色々な情報がありますが、特に1.2.はまず書き方を覚えてください。

# サンプルを見てみよう

https://sole-color-blog.com/demos/mq/

Chromeデベロッパツールを開いて横幅を変化させてみてください。

768, 1024あたりでタイトルと背景色が変わるのが分かると思います。
また、600あたりで画像が消えます。

# Viewport

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

これです。。。。
色々解説している記事もありますが、
一旦これを覚えます。（というかviewportなどでググればすぐ出てきます。）

<font color="red">html内のheadタグ内に書きます。</font>

VSCodeで!打ち込んで、`tab`キーを押すと勝手に記述されますね。


# ブレイクポイント
CSSでよく出てくる設定を紹介します。

```
min-width: 9px　→　9px以上に効かせるCSSを書きます。
max-width: 8px　→　8px以下に効かせるCSSを書きます。
```

[2021.11月時点でググった結果](https://crestadesign.org/responsive/)によると

- スマートフォン：設定なし（実質599px以下）
- タブレット：600px [min-width : 600px]
- PC：1,025px [min-width : 1025px]

が多いみたいですね。

# メディアクエリ(mediaquery)

CSSに書きます。

```css
    <style>
      /* 通常効くCSS */
      div {
        background-color: chartreuse;
      }
      /* 480px以下に効くCSS */
      @media screen and (max-width: 480px) {
        div {
          background-color: blueviolet;
        }
      }
      /* 800pxに効くCSS */
      @media screen and (min-width: 800px) {
        div {
          background-color: darksalmon;
        }
      }
    </style>
```

# サンプル

下記を動かしてみてください。
先に見たサンプルのように背景色が横幅によって変化することが分かると思います。

```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      div {
        background-color: chartreuse;
      }
      @media screen and (max-width: 480px) {
        div {
          background-color: blueviolet;
        }
      }
      @media screen and (min-width: 800px) {
        div {
          background-color: darksalmon;
        }
      }
    </style>
  </head>
  <body>
    <div>あいうえお</div>
  </body>
</html>
```

# 演習

![レスポンシブ例.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1888749/350e51ca-8a1c-aa5d-d57b-cc75460f0a1f.gif)


実装してみてください。

サンプルソースは後ほど公開します。

ヒント
visibilityを使用しようとしましたが、見えないだけで、空白ができてしまったので、
display: noneとdisplay: inline-tableを使用してみました。

<!--

```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .tblsec {
        width: 100%;
      }
      .tblsec th {
        color: blue;
        background-color: burlywood;
      }
      .sp {
          display: none;
      }
      @media screen and (max-width: 768px) {
        .pc {
          display: none;
        }
        .sp {
            display: inline-table;
        }
      }      
    </style>
  </head>
  <body>
    <table border="1" class="tblsec pc">
      <tr>
        <th>高さ</th>
        <td>100cm</th>
      </tr>
      <tr>
        <th>幅</th>
        <td>20cm</th>
      </tr>
    </table>
    <table border="1" class="tblsec sp">
      <tr>
        <th>高さ</th>
      </tr>
      <tr>
      <td>100cm</th>
      </tr>
      <tr>
        <th>幅</th>
      </tr>
      <tr>
        <td>20cm</th>
      </tr>
    </table>
  </body>
</html>
```

-->