前回はwhenやwhen notを使い、
今回はさらに上級編として、
Media Queriesでさまざまな画像解像度に対応する
スマートフォンのデザインで問題となるのは、
そんな問題を解決するのに役立つのが、
Media Queriesとは、
- W3C Media Queries http://www.w3.org/TR/css3-mediaqueries/
このMedia Queriesを利用すると、
- 画面解像度
(スクリーンサイズ) ごとにCSSを指定 - iPhoneのRetina Displayをはじめとした高解像度の画面に対応した画像と、
通常画像の振り分けを指定
大前提として、
そのため、
<!-- html -->
<meta name="viewport" content="width=device-width, maximum-scale=1.0" />
画面解像度(スクリーンサイズ)ごとにCSSを指定する
まずは、
- スクリーンの横幅が最大640pxまでの場合 ⇒ 背景が赤
- スクリーンの横幅が最大320pxまでの場合 ⇒ 背景が青
//CSS
@media screen and (max-width: 640px){
body {
background: red;
}
}
@media screen and (max-width: 320px){
body {
background: blue;
}
}
max-widthの値を変更することにより、
「最大幅が640pxの」
- 「セレクタの深さが同じであれば、
後に書いたものが優先される」
というCSSの基本ルールのもと、
また、
同時に、
そのため、
//CSS
@media screen and (min-width: 640px) and (max-width: 1000px){
body {
background: green;
}
}
高解像度画像と通常画像の振り分けを指定する
たとえばiPhoneのRetina Displayでは、
つまり、
その密度を表すための単位として
Retina Displayで画像をドットバイドットで表示するためには、
- width: 320px
このように指定することで、
しかし、
画像のサイズが大きいと、
そこで、
以下は、
//CSS
@media screen and (-webkit-device-pixel-ratio:2){
body {
background-image: url('bg_x2.png');//640px × 960pxのRetina用画像
background-size: 320px 480px;
}
}
@media screen and (-webkit-device-pixel-ratio:1){
body {
background-image: url('bg.png');//320px x 480pxの非Retina用画像
background-size: 320px 480px;
}
}
先ほどのmax-widthなどの指定と同様、
- -webkit-device-pixel-ratioが2の場合 ⇒ 高解像度のbg_
x2. pngを読み込む - -webkit-device-pixel-ratioが1の場合 ⇒ 低解像度のbg.
pngを読み込む
なお、
LESSを利用してMedia Queriesの指定をかんたんに行うには
ここまでの例のように、
まず、
つまり、
//CSS
body #foo {
background-size: 320px 480px;
@media screen and (-webkit-device-pixel-ratio:2){
background-image: url('bg_x2.png');
}
@media screen and (-webkit-device-pixel-ratio:1){
background-image: url('bg.png');
}
}
正しくは、
//CSS
body #foo {
background-size: 320px 480px;
}
@media screen and (-webkit-device-pixel-ratio:2){
body #foo {
background-image: url('bg_x2.png');
}
}
@media screen and (-webkit-device-pixel-ratio:1){
body #foo {
background-image: url('bg.png');
}
}
上記の例では、
どんなに階層が深くなってもこのような記述が必要です。
これは、
しかし、
先ほど、
//LESS
body {
#foo {
background-size: 320px 480px;
@media screen and (-webkit-device-pixel-ratio:2){
background-image: url('bg_x2.png');
}
@media screen and (-webkit-device-pixel-ratio:1){
background-image: url('bg.png');
}
}
}
/* Compiled CSS */
body #foo {
background-size: 320px 480px;
}
@media screen and (-webkit-device-pixel-ratio: 2) {
body #foo {
background-image: url('bg_x2.png');
}
}
@media screen and (-webkit-device-pixel-ratio: 1) {
body #foo {
background-image: url('bg.png');
}
}
このように、
ですから、
以上、
とはいえ、
次回はさらにこちらをmixinにして、