メディアクエリ(英: media query)は画面の解像度 (例えばスマートフォンの画面とノートパソコンの画面) といった条件に対応してコンテンツの描画が行えるようにするCSS3のモジュールである。2012年6月にはW3C勧告になり、[1]レスポンシブウェブデザイン (responsive web design; RWD) の基礎になっている。
歴史
メディアクエリは1994年にホーコン・ウィウム・リーの最初のCSS案で初めて概要が示されたが[2]、CSS1の一部にはならなかった。1997年からのHTML 4勧告で将来どのようにメディアクエリが追加されるかに関する具体例が示されている[3]。2000年にはW3Cによって、メディアクエリや CC/PP の制定が始められた。この2つの案は同じ問題に対処しているが、CC/PP はサーバ中心であるのに対してメディアクエリはブラウザ中心である[4]。2001年には、メディアクエリに関する最初の公開ワーキングドラフトが発行され[5]、2012年には、ブラウザによる対応に伴いその仕様書はW3C勧告となった。
使い方
メディアタイプと1つ以上の式でメディアクエリは構成され、真または偽に決定されるメディア特性に関係を持つ。
メディアクエリで定められたメディアタイプと文書が表示されているデバイスの種類が合い、メディアクエリの式がすべて真であればクエリの結果は真になる。
メディアクエリが真なら対応するスタイルシートやスタイルルールが通常のカスケードルールにあわせて適用される[6][7]。
使用例
CSSのメディアクエリの使用例を次に示す。
@media screen and (display-mode: fullscreen) {
/* 全画面表示の画面にだけここのコードは適用される。 */
}
@media all and (orientation: landscape) {
/* 画面が横向きの時にだけここのコードは適用される。 */
}
@media screen and (min-device-width: 500px) {
/* 500ピクセルより幅が広い画面にだけここのコードは適用される。) */
}
[訳注 1]
メディアタイプ
メディアタイプはHTML文書の先頭で<link>要素の中で"media"属性を使って宣言できる。どのデバイスでリンクされた文書が表示されるかが"media"属性の値で指定される[9]。またメディアタイプはXML処理命令の @import at-rule や @media at-rule で定義することもできる。CSS2ではこれらがメディアタイプとして定義されている[10]。
- all (すべてのデバイスに適した)
- braille (点字)
- embossed
- handheld (ハンドヘルドコンピュータ)
- print
- projection
- screen
- speech
- tty
- tv
スタイルシートがすべてのメディアタイプに適応されることを示す目的にも、メディアタイプの"all"は用いられる[11]。
メディア属性
2017年9月5日付のメディアクエリ レベル4の勧告にのせられたメディア属性を次の表でしめす。廃止予定のメディア属性は示していない[8]。
属性 |
値 |
種類 |
説明
|
width |
<length> |
範囲 |
出力デバイスの対象となる表示エリアの幅
|
height |
<length> |
範囲 |
出力デバイスの対象となる表示エリアの高さ
|
aspect-ratio |
<ratio> (<integer> / <integer>) |
範囲 |
"height"属性の値にたいする"width"メディア属性の値の比率
|
orientation |
portrait または landscape |
個別 |
"height"属性の値が"width"属性の値以上ならportrait、そうでなければlandscape
|
resolution |
<resolution> または infinite |
範囲 |
解像度 (数字の後ろに"dpi"、"dpcm"、または"dppx"をつける)
|
scan |
interlace または progressive |
個別 |
一部表示デバイスのスキャン方式
|
grid |
<mq-boolean>{0, 1} |
個別 |
出力デバイスがマス目ベースなら1、ビットマップベースなら0
|
update |
none または slow または fast |
個別 |
表示されたコンテンツの表示を更新できるか
|
overflow-block |
none または scroll または optional-paged または paged |
個別 |
コンテンツが表示エリアからはみだすときどうするか
|
overflow-inline |
none または scroll |
個別 |
インラインのコンテンツが表示エリアからはみだすときどうするか
|
color |
<integer> |
範囲 |
色要素ごとのビット数
|
color-index |
<integer> |
範囲 |
色参照テーブルのエントリー数
|
monochrome |
<integer> |
範囲 |
モノクロームのフレームバッファならピクセルごとのビット数、そうでなければ0
|
color-gamut |
srgb または p3 または rec2020 |
個別 |
ユーザーエージェントや出力デバイスでサポートされるおおよその色の範囲
|
pointer |
none または coarse または fine |
個別 |
ポインティングデバイスがあるならその精度、なければnone
|
hover |
none または hover |
個別 |
カーソルがページの要素の上を通過するか
|
any-pointer |
none または coarse または fine |
個別 |
"pointer"属性と同じだが使用可能なすべてのポインティングデバイスに対応する
|
any-hover |
none または hover |
個別 |
"hover"属性と同じだが使用可能なすべてのポインティングデバイスに対応する
|
脚注
訳注
- ^ device-widthはメディアクエリ レベル4で廃止予定になっています。[8]
出典
外部リンク