13
20

More than 5 years have passed since last update.

何も知らない子がレスポンシブデザイン入門

Last updated at Posted at 2016-12-15

前提

・普段そんなにフロントやってない
・レスポンシブデザインってなによ
・モバイルファーストなんでしょこれからは
・モバイルはもうスマホって言いかえるよ

レスポンシブデザインって

・複数の端末の画面サイズに対応するWebサイトづくりのこと

・単一のファイルで制作し、端末や画像サイズで適時変化するようにする手法
※スマホ用とPC用でデザインを分けるのは違う

・複数ファイルによるURLの分散が防げるのはもちろん、更新なども容易になる

レイアウトの種類

リキッドレイアウト

ボックスの要素が端末に応じて伸縮して伝えられる。
要は常に、横幅いっぱいにブロックが表示される感じ。

フレキシブルレイアウト

リキッドレイアウトと基本変わらない。
ただし、最小幅と最大幅の制限があり、
最大幅以上のときは余白が出来るような作り。

グリッドレイアウト

メイン部はリキッドなどで。
一部のボックスを固定サイズとして、
画面幅に変更があった場合、それに応じて再配置されるレイアウト。

よく言われているのは、
画面を縦と横で方眼のブロックにして、
コンテンツを配置していく設計方法。

例)
http://www.nhk.or.jp/studiopark/
※ブラウザ幅を変えたりしてみてください

HTML5とCSS3で実現しよう

メディアクエリ

メディアクエリ?

画面の表示幅とかで適用するスタイルを変える方法。
CSS3で実装する。

条件に応じて読み込むCSSファイルを変える方法と、
一つのCSSファイルで分岐を書く方法がある。

前者だと同じ属性やその値の管理がバラけそうなので、
ここでは後者について触れる。

基本的な記述方法

style.css
@media screen and 幅条件 {
  スタイル
}

幅条件を組み合わせて、上記のような記載を数種用意する。
すると、適時その幅などに合わせて、スタイルが変わる。

記載順のルール

ファイルの上から下へ。
つまり、
画面幅が小→大か、大→小のどちらかしかありえない。

俗称 説明
モバイルファースト 小さいサイズから順に読んでいく方法
デスクトップファースト 大きいサイズから順に読んでいく方法

主流はモバイルファースト。

よく使う記述属性

max-widht:ビューエリアの最大幅。このサイズより小さい場合に適用
min-width:ビューエリアの最小幅。このサイズより大きい場合に適用

上記を踏まえてモバイルファーストな記述

style.css
//グローバル

@media screen and (max-width:480px) {
  //480pxまでのサイズ
}   
@media screen and (min-width:481px) and (max-width:768px) {
  //481px~768pxまでのサイズ
}
@media screen and (min-width:769px) and (max-width:1200px) {
  //769px~1200pxまでのサイズ
}

viewport

言葉としてのviewport

ブラウザの表示領域のこと。

PCの場合、viewportに収まらない場所は
スクロールすれば良い。

じゃあスマホは?

スマホのviewport

何もしないと、
スマホはPC向けサイトを表示するときに、
デフォルトで横幅980pxデザイン
という前提で描画する。

→結果:文字が小さい!

そこで・・・。

HTMLのviewport

端的に言ってしまえば、
スマホの表示をフィットさせるための機能といっていいだろう。

コレすなわち
スマホ向けにデザインしているよ!
という主張になる。

ちゅーても、サイトの作りによって表示のさせ方は違うので、
細かい設定は必要になる。

基本的な記述方法

index.html
<meta name="viewport" content="表示条件">

表示条件はカンマ区切りで複数かける。

content属性にかけるもの

属性 説明
width 表示領域の幅

数値:ピクセル数
device-width:画面幅に合わせる
height 表示領域の高さ

数値:ピクセル数
device-height:画面高に合わせる
initial-scale 初期のズーム倍率
minimum-scale 最小倍率(0~10、デフォ0.25)
maximum-scale 最大倍率(0~10、デフォ1.6)
user-scalable ズーム操作の許可(yes

とりあえず

コレ安定?(要検証)

index.html
<meta name="viewport" content="width:device-width, maximum-scale=1.0, minimum-scale=0.5,user-scalable=yes,initial-scale=1.0">

Retina

Retinaってなんなのよまじで

きれいなのすっごく。

なぜきれいなのか?

画像って結局、点(ピクセル)の集合体。
点が細ければ細かいほど、鮮明に表現できます。

その昔は、
ピクセルっていったら、全部同じサイズで、
ピクセルから画面サイズも割り出せた。

でもレッティーナさんのお陰で、それができなくなってしまった。

Retinaのせいでメディアクエリのピクセル数と一致しなくなるんじゃ!?

実はここでviewportさんが活躍します。

width=device-width
height=device-height

の値は
デバイスの解像度 ÷ デバイスピクセル比
となる。

一度用語をまとめよう。

用語 説明
CSSピクセル CSSで使われる仮想的なピクセル。
これが全ての基準。
メディアクエリで指定しているのもこれ。
デバイスピクセル そのデバイスのピクセルの細かさ。
デバイスピクセル比 CSSピクセルの幅にデバイスピクセル何個はいるの?っていう比率。
デバイスの解像度 デバイスの画面サイズの中に入っている、
デバイスピクセルの数。

縦×横で表記されたりする。

話を戻しましょう。

上記の用語を踏まえると、実画面サイズって、
デバイスの解像度をデバイスピクセル比で割ってあげれば、
実画面サイズがでるってことですよね?

!!!!????

そうです。

width=device-width
height=device-height

の値は
デバイスの解像度 ÷ デバイスピクセル比
となる。
という話に戻ってきます。

つまりviewportで上記を指定していれば、
画面サイズに関しては解決!となるわけです。

Retinaで考える事

画像です。
鮮明な画像を使いたいときにだけ考えれば良いのです。

13
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
20