読者です 読者をやめる 読者になる 読者になる

WEBサイト制作の勉強|フェリカテクニカルアカデミー

WEBサイト制作の勉強の為の解説ブログ。東京池袋のフェリカテクニカルアカデミーでは求職者支援訓練の一環として、WEBサイト制作を学ぶことができます。

レスポンシブデザイン基礎2

レスポンシブWebデザイン(RWD)の制作

レスポンシブWebデザインでは、あらゆるデバイスに対して単一のWebページ(HTML)を使い、スクリーンサイズ(画面幅)を基準にCSSだけを切り替えてレイアウトを調整します。小さいスクリーンに対しては小さいスクリーンで見やすく操作しやすいレイアウトを、大きいスクリーンに対しては大きいスクリーンに適したレイアウトを提供します。


f:id:yachin29:20150520224634p:plain


レスポンシブWebデザインは、「フルードグリッド(Fluid Grid)」「フルードイメージ(Fluid Image)」「メディアクエリー(Media Query)」の3つの技術的な要素で構成されます。

●フルードグリッド

 フルードグリッドは、Webページの要素を罫線や升目に沿って配置する「グリッドデザイン(Grid Design)」と、ブラウザーの横幅が変わってもレイアウトを維持したまま要素のサイズを調整する「フルードデザイン(Fluid Design)」を合わせたものです。レスポンシブWebデザインでは、最初にグリッドデザインによって部品や表示領域をpx単位で配置していき、レイアウトが整った後に、値を%に変換してフルードデザインに変更します。

●フルードイメージ

 フルードイメージは、レイアウトの大きさに追随して画像のサイズを拡大・縮小する手法で、CSSのみで実装できます。イギリスのコンサルティングファームClearleftのリチャード・ルター(Richard Rutter)氏によって提唱されました。

●メディアクエリー

 メディアクエリーは、画像解像度、ウィンドウの幅、デバイスの向きなどの指定条件にあわせて別々のCSSを適用する技術です。レスポンシブWebデザインではメディアクエリーを使ってスクリーンサイズに応じたCSSに切り替えます。

●ブレイクポイント

 ブレイクポイントとはデバイスサイズによってCSSを個別に適用させるために指定した画面サイズの値のことです。メディアクエリで指定します。ブレークポイントのデバイスサイズの値は特に決まっている訳ではなく、また、何分割にするのかも自由です。

メディアクエリーを使ったCSSの切り替えでは、CSSを切り替える条件である「ブレイクポイント(Break Point)」を決め、それぞれの条件に沿ったスタイルシートを記述していきます。

ブレイクポイントは決まった数や値がある訳ではありません。
例えばBootstrap3ではブレイクポインが4つあり、
1200px以上がPC(大画面)用
1199px~992pxがPC用
991px~768pxがタブレット
767px以下がスマホ
に分かれていましたが、

バージョンアップしたBootstrap4ではブレイクポイントが5つあり、
1200px以上がPC(大画面)用
1199px~992pxがPC用
991px~768pxがタブレット
767px~544pxがスマホ
543px以下がスマホ(小さいサイズ)用
に分かれました。これによって例えばiPhone 5, 6のポートレートランドスケープ時に、表示を切り替えることができるようになり、より柔軟にモバイル最適化が行えるようになりました。



今回のブレイクポイントは

ブレイクポイントは絶対的に決まった数値ではなく、その時々の要件や主要のデバイスサイズによって変わっていくので、数字を暗記するのではなく、意味を理解する必要があります。

CSSメディアクエリーの書き方

今回は1つのCSSファイル内にブレイクポイント毎にメディアクエリーを設定する方法で記述します。

@media (max-width:959px){

}


モダンブラウザーでは上記のように「@ media」のみでも動きますが、古いブラウザーにも対応させるには下記のような記述が必要です。

@media screen and (max-width:959px){

}

@media screen and (max-width:767px){ 


}
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>RWD基礎その2</title>
<meta name="viewport" content="width=device-width">
<style>
html,body,p {
  margin:0;
  padding:0;
}
#container {
  width:1000px;
  margin:0 auto;
}
header {
  width:1000px;
  height:100px;
  background:#F8108A;
}
nav {
  width:1000px;
  height:50px;
  background: #F5F421;
}
#wrapper {
  overflow:hidden;
}
#main {
  width:700px;
  height:400px;
  background: #28C6EF;
  float:left;
}
p#txt {
  font-size:24px;
  color:#FFF;
  margin-left:30px;
}
#sub {
  width:300px;
  height:400px;
  background: #FFAF03;
  float:right;
}
footer {
  width:1000px;
  height:50px;
  background: #787878;
}
@media screen and (max-width:999px) {
  /*タブレット*/
#container {
  width:100%;
  margin:0;
}
header {
  width:100%;
}
nav {
  width:100%;
}
#main {
  width:70%;
}
#sub {
  width:30%;
}
footer {
  width:100%;
}
}
@media screen and (max-width:767px) {
  /*スマホ用*/
#wrapper {
  overflow: visible;
}
#main {
  width:100%;
  height:400px;
  float:none;
}
#sub {
  width:100%;
  height:200px;
  float:none;
}
}
</style>
</head>
<body>
<div id="container">
<header></header>
<nav></nav>
<div id="wrapper">
<div id="main">
<p id="txt">テキストテキスト</p>
</div>
<div id="sub"></div>
</div>
<footer></footer>
</div>
</body>
</html>