メディアクエリ レベル 4

W3C 勧告候補草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/CRD-mediaqueries-4-20260219/
最新の公開版:
https://www.w3.org/TR/mediaqueries-4/
編集者草案:
https://drafts.csswg.org/mediaqueries-4/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/mediaqueries-4/
実装レポート:
https://wpt.fyi/results/css/mediaqueries
フィードバック:
CSSWG Issues リポジトリ
編集者:
Florian Rivoal (招待 エキスパート)
Tab Atkins Jr. (Google)
元編集者:
(Opera)
(Mozilla)
(破壊的 イノベーションズ)
(Mozilla)
この仕様に対する編集提案:
GitHub エディター
テストスイート:
https://wpt.fyi/results/css/mediaqueries/

要約

メディアクエリは、レンダリングされる文書とは独立に、 ユーザーエージェントまたは表示デバイスの値や機能をテストし、問い合わせることを著者に可能にします。 これはCSSの@media規則で文書にスタイルを条件付きで適用するために使用され、HTMLやJavaScriptなど、 さまざまな他の文脈や言語でも用いられます。

メディアクエリ レベル4は、メディアクエリ、メディア型、およびメディア特性の仕組みと構文を記述します。 これはメディアクエリ レベル3で定義された機能を拡張し、それに取って代わります。

CSSは、構造化文書(HTMLやXMLなど)のレンダリングを記述するための言語であり、 画面、紙などでの表示に用いられます。

この文書のステータス

この節は、この文書が公開された時点でのステータスを記述します。 現行のW3C公開文書の一覧およびこの技術報告書の最新改訂版は、 W3C標準および草案の索引で参照できます。

この文書は CSS Working Groupにより、 勧告トラックを用いた 勧告候補草案として公開されました。 勧告候補としての公開は、W3Cおよびその会員による支持を意味しません。 勧告候補草案は、作業グループが後続の勧告候補スナップショットに含める意図のある、 前回の勧告候補からの変更を統合します。

これは草案文書であり、 いつでも更新、置換、 または他の文書によって廃止される可能性があります。 作業中の成果以外としてこの文書を引用することは不適切です。

フィードバックは、 GitHubでissueを提出(推奨)して送ってください。 その際、タイトルに仕様コード「mediaqueries」を含め、次のようにしてください: 「[mediaqueries] …コメントの要約…」。 すべてのissueとコメントはアーカイブされます。 代替として、フィードバックは(アーカイブされた)公開メーリングリスト www-style@w3.org に送ることもできます。

この文書は、2025年8月18日 W3Cプロセス文書により統治されます。

この文書は、W3C特許ポリシーの下で運営されるグループにより作成されました。 W3Cは、当該グループの成果物に関連して行われたあらゆる特許開示の公開一覧を維持しています。 そのページには、特許を開示するための手順も含まれています。 個人が、当該個人が必須クレームを含むと考える特許について現実の知識を有する場合、 W3C特許ポリシー第6節に従って情報を開示しなければなりません。

現在、予備的な相互運用性レポートまたは実装レポートはありません。

1. はじめに

この節は規範的ではありません。

1997年、HTML4 [HTML401] は、異なる メディア型 に合わせて メディア依存のスタイルシートをサポートするための仕組みを定義しました。 例えば、文書は画面用と印刷用で異なるスタイルシートを使用できます。 HTMLでは次のように書けます:

<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<link rel="stylesheet" type="text/css" media="print" href="print.css">

CSSは @media@import 規則でこの機能を適応・拡張し、 個々の特性の値を問い合わせる機能を追加しました:

CSSスタイルシート内では、 あるセクションが特定の メディア型 に適用されることを宣言できます:
@media screen {
  * { font-family: sans-serif }
}

同様に、スタイルシートはメディアクエリに基づいて条件付きでインポートできます:

@import "print-styles.css" print;

メディアクエリ は HTML、XHTML、XML [xml-stylesheet] および CSSの@importと@media規則で使用できます。

以下は同じ例を HTML、XHTML、XML、 @import、@media で書いたものです:
<link media="screen and (color), projection and (color)"
      rel="stylesheet" href="example.css">

<link media="screen and (color), projection and (color)"
      rel="stylesheet" href="example.css" />

<?xml-stylesheet media="screen and (color), projection and (color)"
                 rel="stylesheet" href="example.css" ?>

@import url(example.css) screen and (color), projection and (color);

@media screen and (color), projection and (color) { … }

1.1. モジュール間の相互作用

このモジュールは、[CSS2] のセクション7および [MEDIAQUERIES-3] で定義されたメディアクエリ、メディア型、メディア特性を置き換え、拡張します。

1.2.

この仕様で定義されていない値型、例えば <integer><number>、 または <resolution> は、 [CSS-VALUES-3] で定義されています。他のCSSモジュールはこれらの値型の定義を拡張する場合があります。

1.3. 単位

メディアクエリで使用される単位は、CSSの他の部分と同じであり、 [CSS-VALUES-3] で定義されています。例えば、ピクセル単位は CSSピクセルを表し、物理ピクセルではありません。

相対長 単位は、 初期値 に基づきます。 つまり、単位は宣言の結果に基づくことはありません。例えばHTMLでは、 em 単位は 初期値 である font-size に相対し、 ユーザーエージェントまたはユーザーの設定で定義され、ページ上のスタイルには依存しません。

Tests

2. メディアクエリ

メディアクエリは、 文書が表示されているユーザーエージェント またはデバイスの特定の側面をテストする方法です。メディアクエリは(ほぼ)常に文書の内容から独立しており、 そのスタイリング、 またはその他の内部的な側面には依存しません。 別の特性が、メディアクエリの解決に影響すると明示的に規定していない限り、 それらは「外部」の情報にのみ依存します。

メディアクエリ の構文は、 任意の メディアクエリ修飾子、 任意の メディア型、 そして0個以上の メディア特性 から成ります:

media condition only not media type and media condition

メディアクエリ は 真または偽となる論理式です。 メディアクエリが真となるのは次の場合です:

本節のメディアクエリに関する記述は 構文節 に従うことを前提とします。 構文に合致しないメディアクエリは § 3.2 エラー処理 で扱います。 すなわち、構文が本節の要件より優先します。

これはHTMLで書いた単純な例です:
<link rel="stylesheet" media="screen and (color)" href="example.css" />

この例は、特定のスタイルシート (example.css) が特定のメディア型 (screen) かつ特定の特性(カラースクリーンであること) を持つデバイスに適用されることを表します。

同じメディアクエリをCSSの@import規則で書いたもの:

@import url(example.css) screen and (color);

ユーザーエージェントは、認識できるユーザー環境の変化に応じて メディアクエリ を再評価しなければなりません。 例えば、デバイスが横向きから縦向きに回転された場合などです。 そして、これらの メディアクエリ に依存する構成の挙動を それに合わせて変更しなければなりません。

別の特性がメディアクエリの解決に影響すると明示しない限り、 式を評価するためにスタイルシートを適用する必要はありません。

Tests

2.1. メディアクエリの結合

複数の メディアクエリ を カンマ区切りの メディアクエリリスト に結合できます。

media query ,

メディアクエリリスト は、 構成要素の メディアクエリいずれか が真であれば真となり、 構成要素の メディアクエリすべて 偽の場合にのみ偽となります。

例えば、次の メディアクエリリスト は、 メディア型screen で カラーデバイスである、または メディア型projection でカラーデバイスである場合に真です:
@media screen and (color), projection and (color) { … }

空の メディアクエリリスト は真と評価されます。

例えば、以下は同等です:
@media all { … }
@media { … }

2.2. メディアクエリ修飾子

メディアクエリ は、 任意で単一の メディアクエリ修飾子 を前置できます。 これは後続の メディアクエリ の意味を変更する単一のキーワードです。

2.2.1. メディアクエリの否定: not キーワード

個々の メディアクエリ は、 not キーワードを前置することで結果を反転できます。 メディアクエリ が通常真と評価される場合、 not を付けると偽になり、その逆も同様です。

例えば、次のものはカラースクリーン以外すべてに適用されます。 なお、否定されるのはメディア型だけではなく、メディアクエリ全体です。
<link rel="stylesheet" media="not screen and (color)" href="example.css" />

2.2.2. レガシーなユーザーエージェントからメディアクエリを隠す: only キーワード

メディアクエリ の概念は HTML4 [HTML401] に由来します。 その仕様では メディア型 のみが定義されていましたが、 将来的な メディア特性 の追加に対応できる 前方互換の構文を持っていました。 それは メディアクエリ の文字列を最初の非英数字まで読み取り、 それを メディア型 と解釈し、残りを無視するというものです。 例えば、メディアクエリ screen and (color)screen に切り詰められます。

残念ながら、こうしたエラー処理を行うレガシーなユーザーエージェントは、 メディア特性 を含む メディアクエリ を無視してしまいます。 これは、特性が メディア型 より重要であっても同様です。 その結果、不適切な状況でスタイルが適用されることがあります。

これらの メディアクエリ を レガシーなユーザーエージェントから隠すために、 メディアクエリonly キーワードを前置できます。 only キーワードは メディアクエリ の結果に影響しませんが、 レガシーなユーザーエージェントには未知の メディア型「only」として解析され、無視されます。

この例では、<link> 要素で指定された スタイルシートはレガシーなユーザーエージェントでは使用されません。 たとえ通常は screen メディア型 に一致していたとしてもです。
<link rel="stylesheet" media="only screen and (color)" href="example.css" />

Note: only キーワードは メディア型 の前にのみ使えます。 メディアクエリメディア特性 のみで構成される場合、 または メディアクエリ修飾子(例:not)を含む場合、 レガシーなユーザーエージェントでは自動的に偽として扱われます。

Note: この仕様の公開時点では、 そのようなレガシーなユーザーエージェントは極めて稀であり、 only 修飾子は、ほとんど(あるいは全く)必要ありません。

2.3. メディア型

メディア型 は、文書が表示される ユーザーエージェントデバイスの大まかなカテゴリです。 最初の メディア型 は HTML4 で定義され、 <link> 要素の media 属性で使用されました。

残念ながら、メディア型 は 異なるスタイリング要件を持つデバイスを判別する手段として不十分であることが示されました。 例えば、screenhandheld のように もともと明確に区別されていたカテゴリが、年月とともに大きく融合しました。 一方で、ttytv のようなカテゴリは、 高機能なモニタの標準から有用な差異を示し、 異なるスタイリングの対象として潜在的に有用ですが、 メディア型 が相互排他的であるため 合理的な方法で利用するのが難しくなっています。 そのため、排他的な側面は メディア特性 として表現する方が適切です。 例えば gridscan です。

したがって、次の メディア型メディアクエリ で使用できます:

all
すべてのデバイスに一致。
print
プリンタ、および印刷表示を再現する目的のデバイス(印刷プレビュー表示のブラウザなど)に一致。
screen
print に一致しないすべてのデバイスに一致。

加えて、以下の非推奨メディア型 が定義されています。 著者はこれらの メディア型 を使用してはなりません。 代わりに、デバイスの対象となる側面をより適切に表す メディア特性 を選択することが推奨されます。

ユーザーエージェントは次の メディア型 を有効として認識しなければなりませんが、 何にも一致しないものとして扱わなければなりません。

Note: これらのメディア型も、重要な差異を捉える メディア特性 が定義され次第、 いずれは非推奨になると予想されます。

Tests

2.4. メディア特性

メディア特性 は、 メディア型 よりも細かなテストであり、 ユーザーエージェントまたは表示デバイスの単一の特定特性をテストします。

構文的には、メディア特性 は CSSプロパティに似ています: 特性名、コロン、そしてテストする値で構成されます。 特性名だけのブール形式や、比較演算子を伴う範囲形式でも書けます。

( feature name : feature value feature name range form (see below) )

ただし、プロパティとメディア特性にはいくつか重要な違いがあります:

メディア特性 が参照する概念が UAが動作するデバイスに存在しない場合 (例えば、音声UAには「width」の概念がない)、 メディア特性 は常に偽と評価されなければなりません。

メディア特性 device-aspect-ratio は視覚デバイスにのみ適用されます。 speech デバイスでは、 device-aspect-ratio を含む式は常に偽になります:
<link media="speech and (device-aspect-ratio: 16/9)"
      rel="stylesheet" href="example.css">

2.4.1. メディア特性の型: “range” と “discrete”

すべてのメディア特性は、その定義表で「range」または「discrete」のいずれかの“型”を持ちます。

“discrete” メディア特性(例:pointer)は 値の集合から取り出されます。 値はキーワードまたはブール数(0と1)ですが、 共通点はそれらに固有の「順序」がないことです。 つまり、値同士に「小さい」「大きい」の関係がありません。

一方、“range” メディア特性(例:width)は 範囲から値を取ります。 任意の2つの値を比較して、どちらが小さいか大きいか判断できます。

両者の大きな違いは、“range” メディア特性範囲文脈 で評価でき、 名称に「min-」や「max-」接頭辞を受け入れることです。 これらを行うと特性の意味が変わり、メディア特性 が指定値と完全一致する場合に真となるのではなく、 指定値以上/以下/等しい場合に一致します。

(width >= 600px)メディア特性 は、 ビューポートの幅が 600px 以上 のときに真です。

一方、(width: 600px) は ビューポート幅が ちょうど 600px のときのみ真です。 600px より小さいまたは大きい場合は偽です。

2.4.2. ブール文脈におけるメディア特性の評価

メディア特性 は通常 CSSプロパティに似た構文を持ちますが、 特性名だけ(例:(color))で書くこともできます。

この形で書かれた場合、メディア特性ブール文脈 で評価されます。 特性が 0 以外の任意の値で真となる場合、 値が 0<dimension>、 またはキーワード none 以外であれば、 メディア特性 は真になります。 それ以外の場合は偽になります。

いくつかの メディア特性 は、この形で書くように設計されています。

例えば、update は 任意の更新が利用可能かを調べるために (update) と書くのが一般的です。 逆に not (update) で反対をチェックできます。

また、明示的な値を与えることも可能で、 (update: fast) or (update: slow)(update) に等しく、 (update: none)not (update) に等しいです。

数値系の メディア特性(例:width)は、 値がほぼ常にゼロより大きいため、 ブール文脈 で評価するのが有用なことは稀です。 一方 color のように有意味なゼロ値を持つものもあり、 (color)(color > 0) と同一で、 デバイスが色表示可能かどうかを示します。
キーワードを受け入れる メディア特性 のうち、 ブール文脈 で意味を持つのは一部です。

例えば (pointer) は有用で、 pointer に ポインティングデバイスが全くないことを示す none 値があるためです。

同様に、not (color-gamut) は非常に低品質なスクリーンの検出に有用です。 そのようなデバイスは color-gamut の いずれのキーワードにも一致せず、 color-gamutnone キーワードがなくても、 いずれの値にも一致しないため ブール文脈 では偽になります。

一方、(scan) は常に真または常に偽です (デバイスに適用されるかどうかによる)ので、 適用される場合は必ず少なくとも一つの値に一致するためです。

2.4.3. 範囲文脈におけるメディア特性の評価

“range” 型の メディア特性 は、 値が順序付けられていることを活かした 範囲文脈 で 通常の数学的比較演算子を使って書くこともできます:

( feature name/value > <= < = >= feature value/name value < <= feature name < <= value value > >= feature name > >= value )

Note: この構文は Media Queries レベル4で新たに追加されたため、 現時点では min-/max- 接頭辞ほど広くサポートされていません。

基本形は、特性名、比較演算子、値から成り、 関係が真なら真を返します。

例えば、(height > 600px)(または (600px < height)) はビューポート高さが 600px より大きい場合に真を返します。

残りの形式は、特性名が二つの比較の間に挟まれており、 両方の比較が真のときに真を返します。

例えば、(400px < width < 1000px) はビューポート幅が 400px1000px の間(いずれにも等しくない)にある場合に真を返します。

“range” 型の一部のメディア特性は 負の範囲で偽 とされます。 つまり、負の値は有効で解析される必要があり、 そのような負の値に等しい/小さい/以下であるかを問い合わせると 常に偽と評価されます。 一方、負の値より大きい/以上であるかの問い合わせは 関係が真なら真と評価されます。

Note: もし負の値が解析時に拒否されていれば、 エラー処理規則により unknown と扱われていたでしょう。 しかし実際には、デバイスの resolution-300dpi かどうかは 未知ではなく、偽であることが分かっています。 同様に、任意の視覚デバイスで表示領域の width-200px より大きいことは確実です。上記の規則はこの直感に合わせるものです。

次の例はすべて、すべての視覚デバイスで背景が緑になります:
@media not (width <= -100px) {
  body { background: green; }
}
@media (height > -100px) {
  body { background: green; }
}
@media not (resolution: -300dpi) {
  body { background: green; }
}
これは Media Queries レベル3 [MEDIAQUERIES-3] と比べた挙動変更です。 レベル3では、これらの特性の負の値は構文エラーとなりました。 レベル3では、禁止された値を含む構文エラーは メディアクエリ 全体を偽にし、 このレベルで定義される unknown 扱いにはなりませんでした。 レベル3から更新する実装は、 § 2.5 メディア特性の結合 で定義されるより豊かな構文に対応する際、 関連特性の負の値の扱いを必ず変更し、 意図しない意味論を導入しないようにしてください。
Tests

2.4.4. 範囲特性に対する「min-」と「max-」接頭辞の使用

上述のように“range”型の メディア特性 を範囲文脈で評価する代わりに、 特性名に「min-」または「max-」接頭辞を付けて通常の メディア特性 として書けます。

これは次のように 範囲文脈 と等価です:

Note: “min-” と “max-” はどちらも 比較が値を含むため、 特定の状況では制約が生じる場合があります。

例えば、 ビューポート幅のブレークポイントに基づいて異なるスタイルを定義する場合、 “min-” と “max-” では両方のクエリが同時に真とならないよう値をオフセットするのが一般的です。 ブレークポイントが 320px の場合、概念的には以下のようにします:
@media (max-width: 320px) { /* styles for viewports <= 320px */ }
@media (min-width: 321px) { /* styles for viewports >= 321px */ }

これにより 320px の場合に同時適用されることを防ぎますが、 高DPIディスプレイやズーム/スケーリングによる非整数ピクセル密度の影響で 320px と 321px の間の幅が生じる可能性は考慮されていません。 320px と 321px の間に入るビューポート幅では、どのスタイルも適用されません。

この問題を回避する一つの方法は、比較に使用する値の精度を上げることです。 例えば、2つ目の比較値を 320.01px に変更すると、 デバイスのビューポート幅が隙間に落ちる可能性が大きく減ります。

@media (max-width: 320px) { /* styles for viewports <= 320px */ }
@media (min-width: 320.01px) { /* styles for viewports >= 320.01px */ }

しかし、これらの状況では、より適切な解決策として “>=” と “<=” に限定されない 範囲文脈 クエリを使えます:

@media (width <= 320px) { /* styles for viewports <= 320px */ }
@media (width > 320px) { /* styles for viewports > 320px */ }

“discrete” 型プロパティは「min-」「max-」接頭辞を受け付けません。 “discrete” 型の メディア特性 に接頭辞を付けると、 未知の特性名となります。

例えば、(min-grid: 1) は無効です。 なぜなら grid は “discrete” 型の メディア特性 で、 接頭辞を受け付けないためです。 (grid メディア特性01 を受け入れるため数値に見えますが。)

min/max 接頭辞付きの メディア特性ブール文脈 で評価しようとするのは無効であり構文エラーです。

2.5. メディア特性の結合

複数の メディア特性 は、 完全なブール代数(not, and, or)を使って メディア条件 に結合できます。

andornot を メディアクエリの同じ「レベル」で混在させるのは 無効 です。 例えば、(color) and (pointer) or (hover) は違法です。 意図が不明確なためです。 代わりに、特定の結合キーワードでグループ化するための括弧を用い、 (color) and ((pointer) or (hover)) あるいは ((color) and (pointer)) or (hover) とします。 これらは意味が大きく異なります: (hover) だけが真の場合、 前者は偽、後者は真になります。

Tests

3. 構文

メディアクエリ構文の非形式的な説明は、前節の文章およびレールロード図に記載されています。 形式的なメディアクエリ構文はこの節で説明され、 規則/プロパティの文法構文は [CSS-SYNTAX-3][CSS-VALUES-3] で定義されています。

<media-query-list> 生成規則を解析するには、 コンポーネント値のカンマ区切りリストを解析し、 返されたリストの各エントリを <media-query> として解析します。 その値は、生成された <media-query> のリストです。

Note: <media-query-list> 解析の明示的な定義は、 メディアクエリリスト のエラー回復動作を明確にするために必要です。

Note: この <media-query-list> 解析の定義は空リストを意図的に許容します。

Note: [CSS-SYNTAX-3] に従い、トークンは ASCII 大文字小文字非区別 です。

<media-query> = <media-condition>
             | [ not | only ]? <media-type> [ and <media-condition-without-or> ]?
<media-type> = <ident>

<media-condition> = <media-not> | <media-in-parens> [ <media-and>* | <media-or>* ]
<media-condition-without-or> = <media-not> | <media-in-parens> <media-and>*
<media-not> = not <media-in-parens>
<media-and> = and <media-in-parens>
<media-or> = or <media-in-parens>
<media-in-parens> = ( <media-condition> ) | ( <media-feature> ) | <general-enclosed>

<media-feature> = [ <mf-plain> | <mf-boolean> | <mf-range> ]
<mf-plain> = <mf-name> : <mf-value>
<mf-boolean> = <mf-name>
<mf-range> = <mf-name> <mf-comparison> <mf-value>
           | <mf-value> <mf-comparison> <mf-name>
           | <mf-value> <mf-lt> <mf-name> <mf-lt> <mf-value>
           | <mf-value> <mf-gt> <mf-name> <mf-gt> <mf-value>
<mf-name> = <ident>
<mf-value> = <number> | <dimension> | <ident> | <ratio>
<mf-lt> = '<' '='?
<mf-gt> = '>' '='?
<mf-eq> = '='
<mf-comparison> = <mf-lt> | <mf-gt> | <mf-eq>

<general-enclosed> = [ <function-token> <any-value>? ) ] | [ ( <any-value>? ) ]

<media-type> 生成規則には、 onlynotandorlayer は含まれません。

Note: layer を除外するのは、 @import url() layer; という カスケードレイヤー の構文で 曖昧になるためです。 [CSS-CASCADE-5] を参照してください。

“<” または “>” の <delim-token> と、続く “=” <delim-token> の間には 空白を入れてはなりません(存在する場合)。

Note: notandor と後続の ( の間には空白が必要です。 空白がないと <function-token> として解析されます。 これは上記文法で既に網羅されているため明示的に無効とはしていません。 ただし ) と後続のキーワードの間の空白は問題ありません。

<media-in-parens> を解析する際は、 入力が前の分岐に一致しない場合にのみ <general-enclosed> 分岐を選ばなければなりません。 <general-enclosed> は将来の文法拡張との互換性を保つために存在します。

Tests

3.1. メディアクエリの評価

<media-condition> または <media-condition-without-or> の主要な部分式は 以下のように真偽値が関連付けられます:

<media-condition>
<media-condition-without-or>
結果は子部分式の結果です。
<media-in-parens>
結果は子項の結果です。
<media-not>
結果は <media-in-parens> 項の否定です。 unknown の否定は unknown です。
<media-in-parens> <media-and>*
結果は、<media-in-parens> 子項と、 <media-and> 子項の <media-in-parens> 子が すべて真なら真、 これらの <media-in-parens> の 少なくとも一つが偽なら偽、 それ以外は unknown です。
<media-in-parens> <media-or>*
結果は、<media-in-parens> 子項と、 <media-or> 子項の <media-in-parens> 子が すべて偽なら偽、 これらの <media-in-parens> の 少なくとも一つが真なら真、 それ以外は unknown です。
<general-enclosed>
結果は unknown です。

著者はスタイルシート内で <general-enclosed> を使用してはなりません。これは将来互換性のためだけに存在し、 古いユーザーエージェントで新しい構文追加が <media-condition> を できるだけ無効化しないようにするためです。

<media-feature>
結果は指定されたメディア特性を評価した結果です。

上記の生成規則の結果が二値の真偽値を期待する文脈で使用される場合、 “unknown” は “false” に変換されなければなりません。

Note: これは例えば、 メディアクエリ@media 規則で使用され、 “unknown” に解決された場合、 “false” として扱われ一致しないことを意味します。

メディアクエリは「真」「偽」「unknown」の三値論理を使用します。 具体的には、Kleene の三値論理 を使います。 この論理では “unknown” は「真か偽のどちらかだが、まだ分からない」という意味です。

一般に、式の中に unknown が含まれると式全体も unknown になります。 unknown を “true” に置き換えた結果と “false” に置き換えた結果が異なるためです。 unknown を取り除く唯一の方法は、unknown を含んでも結果が変わらない式で使うことです。 これは “false AND unknown”(常に false)と “true OR unknown”(常に true)で起こります。

この論理は <general-enclosed> に真偽値を割り当てる必要があるため採用されました。 通常の二値論理では合理的な値は “false” だけですが、 それだと not unknown(function) が真になり、 混乱や望ましくない結果を生む可能性があります。 Kleene の三値論理では、unknown は メディアクエリ を 一致させないようにし、最終結果に無関係な場合のみ一致できます。

3.2. エラー処理

前節の文法に一致しないメディアクエリは、解析時に not all に置き換えられなければなりません。

Note: 文法不一致は メディアクエリリスト全体を無効にしません。 問題のある メディアクエリ のみが対象です。 上記の解析動作は次のトップレベルのカンマで自動的に回復します。

@media (example, all,), speech { /* only applicable to speech devices */ }
@media &test, speech           { /* only applicable to speech devices */ }

上記の メディアクエリリスト は、 解析時に not all, speech に変換され、 これは speech と同じ真偽値になります。

エラー回復はメディアクエリのトップレベルでのみ発生することに注意してください。 無効な括弧付きブロックの内側にあるものは何であれ、 グループとしてnot allに変換されるだけです。 例えば:

@media (example, speech { /* rules for speech devices */ }

括弧が閉じていないため、 括弧内はスタイルシートの残り全体を含み (途中で一致しない “)” に遭遇しない限り)、 全体が not allメディアクエリ になります。

未知の <media-type> は一致しないものとして扱われます。

例えば、メディアクエリ unknown は偽です。 これは unknown が未知の メディア型 だからです。

しかし not unknown は真です。 not が偽のメディア型を否定するためです。

いくつかのキーワードは <media-type> として許可されず、解析全体を失敗させることに注意してください: メディアクエリ or and (color) は解析時に not all に変換され、 or を未知の メディア型 として扱うことはありません。

未知の <mf-name> または <mf-value>、 またはその メディア特性 の値構文に一致しない値は “unknown” となります。 値が “unknown” の <media-query>not all に置き換えられなければなりません。

<link media="screen and (max-weight: 3kg) and (color), (color)"rel="stylesheet" href="example.css" />

max-weight は未知の メディア特性 なので、 この メディアクエリリストnot all, (color) に変換され、 (color) と同等になります。

@media (min-orientation: portrait) { … }

orientation 特性は接頭辞を受け付けないため、 これは未知の メディア特性 と見なされ、 not all に変換されます。

メディアクエリ (color:20example)color メディア特性に対して未知の値を指定しているため、 not all に変換されます。
メディアクエリ は ホスト言語の解析規則にも従います。 例えば、次のCSSスニペット:
@media test;,all { body { background: lime } }

メディアクエリ test;,all は、それ自体で解析すると not all, all と等価で、常に真になります。 しかしCSSの解析規則により @media 規則と メディアクエリ は セミコロンで終了します。 残りのテキストは無効なセレクタと内容を持つスタイル規則として扱われます。

Tests

4. ビューポート/ページ寸法のメディア特性

4.1. 幅: width 特性

Name: width
For: @media
Value: <length>
Type: range

width メディア特性は、 出力デバイスの対象表示領域の幅を記述します。 連続メディア では ビューポートの幅(CSS2 セクション9.1.1 [CSS2])で、 レンダリングされたスクロールバーのサイズ(ある場合)を含みます。 ページメディア では ページボックスの幅(CSS2 セクション13.2 [CSS2])です。

<length>§ 1.3 単位 に従って解釈されます。

width負の範囲で偽 です。

例えば、次のメディアクエリは 25cm より幅の広い印刷出力にスタイルシートを使用することを表します:
<link rel="stylesheet" media="print and (min-width: 25cm)" href="http://…" />
このメディアクエリは ビューポート(文書がレンダリングされる画面/紙面の部分)の幅が 400〜700ピクセルのデバイスでスタイルシートを使用することを表します:
@media (400px <= width <= 700px) { … }
このメディアクエリは ビューポート幅が 20em より大きい場合にスタイルシートを使用することを表します。
@media (min-width: 20em) { … }

em 値は 初期値 である font-size に相対します。

Tests

4.2. 高さ: height 特性

Name: height
For: @media
Value: <length>
Type: range

height メディア特性は、 出力デバイスの対象表示領域の高さを記述します。 連続メディア では ビューポートの高さで、レンダリングされたスクロールバーのサイズ(ある場合)を含みます。 ページメディア では ページボックスの高さです。

<length>§ 1.3 単位 に従って解釈されます。

height負の範囲で偽 です。

4.3. アスペクト比: aspect-ratio 特性

Name: aspect-ratio
For: @media
Value: <ratio>
Type: range

aspect-ratio メディア特性は、 width メディア特性の値と height メディア特性の値の比として定義されます。

Tests

4.4. 向き: orientation 特性

Name: orientation
For: @media
Value: portrait | landscape
Type: discrete
portrait
orientation メディア特性は、 height メディア特性の値が width メディア特性の値以上のとき portrait です。
landscape
それ以外の場合、orientationlandscape です。
次のメディアクエリは「portrait」向きをテストします。 例えば、電話を縦に持った場合です。
@media (orientation: portrait) { … }

5. 表示品質のメディア特性

5.1. 表示解像度: resolution 特性

Name: resolution
For: @media
Value: <resolution> | infinite
Type: range

resolution メディア特性は、 出力デバイスの解像度、つまりピクセル密度を記述します。 ページズーム を考慮し、 スケール係数 を 1.0 と仮定します。

resolution メディア特性は 負の範囲で偽 です。

非正方形ピクセルのメディアを問い合わせる場合、 resolution は垂直方向の密度を問い合わせます。

プリンタの場合、これはスクリーン解像度(任意色の印刷ドットの解像度)に対応します。 プリンタはグレースケール印刷で異なる解像度を持つ場合があります。

物理的な解像度制約のない出力媒体(ベクターグラフィックスなど)では、 この特性は infinite 値に一致しなければなりません。 範囲文脈 で評価する目的では、 infinite は どんな <resolution> よりも大きいとみなされます。 (つまり、(resolution > 1000dpi)infinite メディアで真になります。)

次のメディアクエリは「高解像度」スクリーン (ハードウェアピクセルとCSS px の比が少なくとも2) を検出します:
@media (resolution >= 2dppx)
例えば、次のメディアクエリは CSS in あたり 300 ドットより高い解像度のデバイスで スタイルシートを使用することを表します:
@media print and (min-resolution: 300dpi) { … }

このメディアクエリは同等ですが、CSS cm 単位を使用しています:

@media print and (min-resolution: 118dpcm) { … }
<resolution> は 物理長単位あたりのデバイスピクセル数ではなく、 CSS単位あたりのデバイスピクセル数を指します。 このマッピングはユーザーエージェントによって行われるため、 常にユーザーエージェントに既知です。

ユーザーエージェントが物理ピクセルの幾何情報を持たない場合、 あるいは物理ピクセルが(ほぼ)正方形であると分かっている場合、 CSSピクセル当たりのデバイスピクセル数を軸ごとに変えることはなく、 垂直・水平解像度の差はありません。

それ以外の場合、UAが軸ごとに異なる数を割り当てるのは、 物理ピクセルが正方形でないことに対応するためです。 UAがその知識を得る方法は範囲外ですが、 それを判断できる情報があるなら、デバイスが90度回転した際に マッピングを反転できます。

5.2. 表示種別: scan 特性

Name: scan
For: @media
Value: interlace | progressive
Type: discrete

scan メディア特性は、いくつかの出力デバイスの走査方式を記述します。

interlace
CRTや一部のプラズマTVは「インターレース」表示を使用し、 偶数行と奇数行を交互に描画することで、 視覚の補完効果を利用して滑らかな動きを再現しました。 これは帯域を半分に抑えつつ高いFPSの放送を模擬できました。

インターレース画面で表示する場合、 著者は非常に高速な移動を避けて「コーミング」を防ぎ、 「twitter」 を避けるため 画面上の詳細を 1px より幅広くする必要があります。

progressive
「プログレッシブ」表示の画面は全フレームを表示し、 特別な扱いは不要です。

現代のほとんどの画面、およびすべてのコンピュータ画面はプログレッシブ表示です。

例えば、セリフ体の文字の「足」は非常に小さく、 インターレースデバイスでは「twitter」を引き起こすことがあります。 scan メディア特性を使って検出し、 「twitter」の起こりにくい代替フォントを使用できます:
@media (scan: interlace) { body { font-family: sans-serif; } }

Note: 執筆時点では、既知の実装はすべて scan: progressive に一致し、scan: interlace には一致しません。

5.3. コンソール表示の検出: grid 特性

Name: grid
For: @media
Value: <mq-boolean>
Type: discrete
<mq-boolean> = <integer [0,1]>

grid メディア特性は、出力デバイスがグリッドかビットマップかを問い合わせます。 出力デバイスがグリッドベース (例えば “tty” 端末や固定フォントのみの電話ディスプレイ)であれば値は1です。 それ以外は0です。

<mq-boolean> 値型は 0 または 1 の値を持つ <integer> です。 その他の整数値は無効です。-0 は CSS で常に 0 と同一なので、 有効な <mq-boolean> 値として受け入れられます。

Note: <mq-boolean> 型はレガシー目的のみに存在します。 もし今日設計されるなら、 値には適切な名前付きキーワードを使用していたでしょう。

これは狭いコンソール画面を検出する例です:
@media (grid) and (max-width: 15em) { … }

Note: 執筆時点では、既知の実装はすべて grid: 0 に一致し、grid: 1 には一致しません。

5.4. 表示更新頻度: update 特性

Name: update
For: @media
Value: none | slow | fast
Type: discrete

update メディア特性は、 出力デバイスがレンダリング後に内容の見た目を変更できる能力を問い合わせます。 以下の値を受け入れます:

none
一度レンダリングするとレイアウトは更新できません。 例:紙への印刷。
slow
レイアウトはCSSの通常の規則に従って動的に変化できますが、 出力デバイスが十分速くレンダリング/表示できず、 滑らかなアニメーションとして知覚されません。 例:電子インク画面や非常に低速なデバイス。
fast
レイアウトはCSSの通常の規則に従って動的に変化でき、 出力デバイスが特別に速度制約されていないため、 CSSアニメーションのような定期更新を利用できます。 例:コンピュータ画面。
例えば、リンクにホバー時だけ下線を付けるページは、 印刷時には常に下線を表示したいかもしれません:
@media (update) {
  a { text-decoration: none; }
  a:hover, a:focus { text-decoration: underline; }
}
/* 更新不可のUAでは、リンクは常に既定の下線を持つ */
Tests

5.5. ブロック軸オーバーフロー: overflow-block 特性

Name: overflow-block
For: @media
Value: none | scroll | paged
Type: discrete

overflow-block メディア特性は、 コンテンツが初期包含ブロックから ブロック軸 方向に はみ出したときのデバイスの挙動を記述します。

none
ブロック軸 に オーバーフローの手段がなく、はみ出した内容は表示されません。 例:ビルボード
scroll
ブロック軸 の はみ出した内容はスクロールで表示されます。 例:コンピュータ画面
paged
内容は離散的なページに分割され、 ブロック軸 で 1ページからはみ出した内容は次のページに表示されます。 例:プリンタ、電子書籍リーダー

none または scroll に一致するメディアは 連続メディア と呼ばれ、 paged に一致するものは ページメディア と呼ばれます。

Note: 将来、このメディア特性に追加の値が追加される可能性があります。 それは 連続ページメディア の両面を持つ ハイブリッドな挙動のユーザーエージェントを記述するためです。 例えば、Presto レイアウトエンジン(現在は廃止)は、 強制改ページを尊重する点以外は continuous に似た 半ページ化のプレゼンテーションモードを備えていました。 現在その種の挙動を持つUAが確認されていないため、 作業グループはこのレベルで値を追加しないことに決定しました。 上記いずれの値でも十分に説明できないユーザーエージェントを実装する場合は、 作業グループに連絡し、このメディア特性の拡張を検討するよう促されています。

Tests

5.6. インライン軸オーバーフロー: overflow-inline 特性

Name: overflow-inline
For: @media
Value: none | scroll
Type: discrete

overflow-inline メディア特性は、 コンテンツが初期包含ブロックから インライン軸 方向に はみ出したときのデバイスの挙動を記述します。

none
インライン軸 に オーバーフローの手段がなく、はみ出した内容は表示されません。
scroll
インライン軸 の はみ出した内容はスクロールで表示されます。

Note: インライン方向のはみ出しに対するページ化オーバーフローの 既知の実装はなく、この概念自体があまり意味を成さないため、 paged 値は overflow-inline には意図的に存在しません。

6. 色に関するメディア特性

6.1. 色深度: color 特性

Name: color
For: @media
Value: <integer>
Type: range

color メディア特性は、 出力デバイスの色成分あたりのビット数を記述します。 デバイスがカラーデバイスでない場合、値は0です。

color負の範囲で偽 です。

例えば、以下の2つのメディアクエリは スタイルシートがすべてのカラーデバイスに適用されることを表します:
@media (color) { … }
@media (min-color: 1) { … }
このメディアクエリは 色成分あたり8ビット以上のカラーデバイスにスタイルシートが適用されることを表します:
@media (color >= 8) { … }

色成分ごとにビット数が異なる場合、最小のビット数が使用されます。

例えば、8ビットカラーシステムで 赤が3ビット、緑が3ビット、青が2ビットの場合、 color メディア特性の値は2になります。

インデックスカラーのデバイスでは、ルックアップテーブル内の 色成分あたりの最小ビット数が使用されます。

Note: この機能は色の能力を表面的にしか記述できません。 color-gamut の方が 著者のニーズに一般的に適しています。 さらに機能が必要な場合は、 RFC2879 [RFC2879] が より具体的なメディア特性を提供しており、将来的にサポートされる可能性があります。

6.2. パレットカラー画面: color-index 特性

Name: color-index
For: @media
Value: <integer>
Type: range

color-index メディア特性は、 出力デバイスのカラールックアップテーブルのエントリ数を記述します。 デバイスがカラールックアップテーブルを使用しない場合、値は0です。

color-index負の範囲で偽 です。

例えば、スタイルシートがすべてのカラーインデックスデバイスに 適用されることを表す2つの方法です:
@media (color-index) { … }
@media (color-index >= 1) { … }
このメディアクエリは 256以上のエントリを持つカラーインデックスデバイスに スタイルシートが適用されることを表します:
<?xml-stylesheet media="(min-color-index: 256)"
  href="http://www.example.com/…" ?>

6.3. モノクロ画面: monochrome 特性

Name: monochrome
For: @media
Value: <integer>
Type: range

monochrome メディア特性は、 モノクロフレームバッファのピクセルあたりのビット数を記述します。 デバイスがモノクロでない場合、出力デバイスの値は0です。

monochrome負の範囲で偽 です。

例えば、モノクロデバイスすべてにスタイルシートを適用する方法:
@media (monochrome) { … }
2ビット/ピクセルより多いモノクロデバイスに スタイルシートを適用することを表します:
@media (monochrome >= 2) { … }
カラーページ用とモノクロ用で 別々のスタイルシートがあることを表します:
<link rel="stylesheet" media="print and (color)" href="http://…" />
<link rel="stylesheet" media="print and (monochrome)" href="http://…" />

6.4. 色表示品質: color-gamut 特性

Name: color-gamut
For: @media
Value: srgb | p3 | rec2020
Type: discrete

color-gamut メディア特性は、 UAと出力デバイスがサポートするおおよその色域を記述します。 つまり、UAが指定された色空間の色を受け取った場合、 出力デバイスは適切な色、または十分に近い色を表示できるということです。

Note: このクエリが概算範囲を使用する理由はいくつかあります。 第一に、表示ハードウェアの差異が大きいこと。 例えば「Rec. 2020」に対応すると主張しながら、 実際にはその全色域のかなり低い範囲しか再現できないデバイスがあります。 第二に、デバイスがサポートする色域が多数存在し、それらをすべて列挙するのは煩雑です。 多くの場合、著者は表示がsRGBより優れているか、 あるいはsRGBより大幅に優れているかを知るだけで十分です。 それにより、適切な色プロファイル付き画像を ユーザーに提供できます。

srgb
UAと出力デバイスがsRGB色域またはそれ以上をサポートできます。

Note: ほとんどのカラーディスプレイが このクエリに真を返すと予想されます。

p3
UAと出力デバイスが Display P3 [Display-P3] 色空間、またはそれ以上の色域をサポートできます。

Note: p3 色域は srgb 色域より大きく、 それを含みます。

rec2020
UAと出力デバイスが ITU-R Recommendation BT.2020 色空間、またはそれ以上の色域をサポートできます。

Note: rec2020 色域は p3 色域より大きく、 それを含みます。

以下の表は、[COLORIMETRY] で定義される 色空間の色度座標に基づき、これらの色空間の原色を示します。

色空間 白色点 原色
xW yW xR yR xG yG xB yB
srgb 0.3127 0.3290 0.640 0.330 0.300 0.600 0.150 0.060
p3 0.3127 0.3290 0.680 0.320 0.265 0.690 0.150 0.060
rec2020 0.3127 0.3290 0.708 0.292 0.170 0.797 0.131 0.046

Note: 上表は色空間を完全に記述するには不十分ですが、 出力デバイスが各色域をおおよそカバーしているか判断するには十分です。 sRGBについては [SRGB]、 Display P3については [Display-P3]、 ITU-R Recommendation BT.2020については [ITU-R-BT-2020-2] を参照してください。

例えば、このメディアクエリは、ディスプレイがDisplay P3の範囲の色を サポートしている場合に適用されます:
@media (color-gamut: p3) {}

注: 出力デバイスは、このメディア特性の複数の値に対してtrueを返すことがあります。 それは、デバイスの出力可能な色域全体が十分に大きい場合、 あるいは、ある色域が別のサポートされる色域の部分集合である場合です。 その結果、 この特性は「昇順」の方式で使うのが最適です—​まず(color-gamut: srgb)がtrueのときに基準値を設定し、 次に(color-gamut: p3)がtrueならそれを上書きし、などです。

注: モノクロ表示など一部の出力デバイスは、 srgb 色域でさえサポートできないことがあります。 これらのデバイスをテストするには、 この特性を否定したブール文脈の形式で使用できます: not (color-gamut).

テスト

7. インタラクションに関するメディア特性

「インタラクション」メディア特性は、ユーザーがページとどのようにやり取りするかのさまざまな側面を反映します。

pointerhover の組み合わせに一致するデバイスの代表例:
pointer: none pointer: coarse pointer: fine
hover: none キーボードのみの操作、順次/空間(d-pad)フォーカスナビゲーション スマートフォン、タッチスクリーン 基本的なスタイラス用デジタイザ(Cintiq、Wacomなど)
hover: hover Nintendo Wiiコントローラ、Kinect マウス、タッチパッド、高度なスタイラス用デジタイザ(Surface、Samsung Note、Wacom Intuos Proなど)

pointer および hover 特性は、「主」ポインティングデバイスの特性に関係します。 一方、any-pointerany-hover は、 利用可能なすべてのポインティングデバイスの特性を問い合わせるために使用できます。

注: 本仕様は、ユーザーエージェントが「主」のポインティングデバイスを どのように決定すべきかを定義しませんが、 期待されるのは、ユーザーエージェントがこの決定を、 実行中のデバイス/環境に関する知識、 利用可能なポインティングデバイスの数と種類、 および、一般的および/または現在どれが使用されているかという概念を組み合わせて行うことです。 デバイスの主要入力機構がポインティングデバイスではないが、 それより使用頻度の低い二次的な入力としてポインティングデバイスがある状況では、 ユーザーエージェントは非ポインティングデバイスを主として扱うことを決定する場合があります(その結果 pointer: none となります)。 ユーザーエージェントはまた、主と見なされるポインティングデバイスの種類を、 ユーザー環境の変化 またはユーザーがUAとどのようにやり取りしているかの変化に応じて、 動的に変更すると決定する場合もあります。

注: pointerhoverany-pointer、および any-hover 特性は、ポインティングデバイスの特性、 またはその完全な不在のみに関係し、 キーボードのような非ポインティングデバイスの入力機構の存在を検出するためには使用できません。 著者は、これらの特性を問い合わせた際にどの値が一致するかにかかわらず、 非ポインティングデバイス入力が存在し得ることを考慮すべきです。

pointerhover は、 主入力機構に適したページの主要スタイルおよびインタラクション モード(主ポインティングデバイスの特性、または完全な不在に基づく)を設計するために使用できますが、 著者は、検出された可能性のあるあらゆる種類のポインティングデバイスを考慮に入れるために、 any-pointerany-hover の使用を強く検討すべきです。

7.1. ポインティングデバイスの精度: pointer 特性

名前: pointer
対象: @media
値: none | coarse | fine
型: discrete

pointer メディア特性は、マウスのようなポインティングデバイスの有無と精度を問い合わせるために使用されます。 複数のポインティングデバイスが存在する場合、 pointer メディア特性は、 ユーザーエージェントにより決定される「主」のポインティングデバイスの特性を反映しなければなりません。 (利用可能ないずれかのポインティングデバイスの能力を問い合わせるには、 any-pointer メディア特性を参照してください。)

none
デバイスの主要入力機構にポインティングデバイスが含まれません。
coarse
デバイスの主要入力機構に、精度が限定されたポインティングデバイスが含まれます。 例としてタッチスクリーンや動作検出センサー(Xbox向けKinect周辺機器など)があります。
fine
デバイスの主要入力機構に、精度の高いポインティングデバイスが含まれます。 例としてマウス、タッチパッド、描画用スタイラスがあります。

coarsefine はどちらもポインティングデバイスの存在を示しますが、 精度が異なります。 拡大率1のときに、隣接する複数の小さなターゲットのうち1つを確実に選ぶことが困難または不可能であるようなポインティングデバイスは、 coarse と見なされます。 ズームレベルを変更しても、このメディア特性の値には影響しません。

注: UAはユーザーにズームする能力を提供する場合があり、 また二次的なポインティングデバイスは異なる精度を持つ場合があるため、 このメディア特性の値が coarse であってもユーザーが正確なクリックを行えることがあります。 このメディア特性は、ユーザーが決して正確にクリックできないことを示すのではなく、 それが不便であることのみを示します。 著者は、coarse の値に対して、 正確なクリックに依存せず操作できるようにページを設計することで反応することが期待されます。

アクセシビリティ上の理由により、 ポインティングデバイスが fine と記述できるデバイスであっても、 UAはこのメディアクエリに coarse または none の値を与えることがあります。 これは、ユーザーがポインティングデバイスを正確に、またはまったく操作することに困難があることを示すためです。 さらに、主ポインティングデバイスが fine の精度を持つ場合でも、 ユーザーには追加の coarse なポインティングデバイスが利用可能なことがあります。 著者は、これら他の coarse な潜在的ポインティングデバイスを考慮するために、 any-pointer メディア特性を問い合わせたいと思うかもしれません。

/* 主ポインティングデバイスが不正確な場合、ラジオボタンとチェックボックスを大きくする */
@media (pointer: coarse) {
  input[type="checkbox"], input[type="radio"] {
    min-width: 30px;
    min-height: 40px;
    background: transparent;
  }
}

7.2. ホバー能力: hover 特性

名前: hover
対象: @media
値: none | hover
型: discrete

hover メディア特性は、主ポインティングデバイスを用いてページ上の要素に ホバーできるユーザーの能力を問い合わせるために使用されます。 デバイスに複数のポインティングデバイスがある場合、 hover メディア特性は、 ユーザーエージェントにより決定される「主」のポインティングデバイスの特性を反映しなければなりません。 (利用可能ないずれかのポインティングデバイスの能力を問い合わせるには、 any-hover メディア特性を参照してください。)

none
主ポインティングデバイスがホバーできないこと、 またはポインティングデバイスが存在しないことを示します。 例としてタッチスクリーンや、基本的な描画用スタイラスを使う画面があります。

ホバーできるポインティングデバイスであっても、 それを行うことが不便で、通常の使用方法の一部ではないものも、 この値に一致します。 例えば、長押しがホバーとして扱われるタッチスクリーンは hover: none に一致します。

hover
主ポインティングデバイスがページの一部の上を容易にホバーできることを示します。 例としてマウスや、Nintendo Wiiコントローラのように物理的に画面を指し示すデバイスがあります。
例えば、任意のマウスでも操作できるタッチスクリーンデバイスでは、 主ポインティングデバイス(タッチスクリーン)がユーザーにホバーを許可しないため、 hover メディア特性hover: none に一致すべきです。

しかし、それにもかかわらず、任意のマウスはユーザーにホバーを可能にします。 したがって著者は、:hover 疑似クラスが、 hover: none がtrueであるデバイス上で決して一致しないと仮定しないよう注意すべきです。 しかし、ホバーに依存せずに完全に利用可能なレイアウトを設計すべきです。

アクセシビリティ上の理由により、ホバーをサポートするデバイスであっても、 UAはこのメディアクエリに hover: none の値を与えることがあります。 これは、ホバーなしでもうまく動作するレイアウトを選択するためです。 主入力機構が hover: hover 能力を持つ場合でも、 ユーザーにはホバー能力を提供しない追加の入力機構が利用可能な場合があることに注意してください。

/* 便利にホバーできるデバイスでのみ、ホバー起動のドロップダウンメニューを使用する。 */
@media (hover) {
  .menu > li        {display:inline-block;}
  .menu ul          {display:none; position:absolute;}
  .menu li:hover ul {display:block; list-style:none; padding:0;}
  /* ... */
}

7.3. 利用可能なすべてのインタラクション能力: any-pointerany-hover 特性

名前: any-pointer
対象: @media
値: none | coarse | fine
型: discrete
名前: any-hover
対象: @media
値: none | hover
型: discrete

any-pointer および any-hover メディア特性は、 pointer および hover メディア特性と同一ですが、 ユーザーが利用できるすべてのポインティングデバイスの能力の和集合に対応します。 any-pointer の場合、 異なるポインティングデバイスが異なる特性を持つなら、 複数の値が一致することがあります。

any-pointer および any-hover は、 対応する問い合わせにおいて、すべてのポインティングデバイスが none に一致する場合、 またはポインティングデバイスがまったく存在しない場合にのみ、 none に一致しなければなりません。

any-pointer は、ポインティングデバイスの有無と精度を問い合わせるために使用されます。 追加の非ポインティングデバイス入力は考慮せず、 d-padやキーボードのみの操作のような、 画面上のポインタを動かさない他の入力機構の存在をテストするためには使用できません。 any-pointer: none は、 ポインティングデバイスがまったく存在しない場合にのみtrueと評価されます。
マウスとキーボードを備えた従来型の デスクトップ環境では、any-pointer: none は (マウスが存在するため)falseになります。 非ポインタ入力(キーボード)も存在するにもかかわらず。
any-hover: none は、 ポインティングデバイスが存在しない場合、 または存在するすべてのポインティングデバイスにホバー能力がない場合にのみtrueと評価されます。 そのため、これは、いずれかのホバー可能なポインティングデバイスが存在するかどうかをテストする問い合わせとして理解されるべきであり、 ポインティングデバイスのいずれかがホバー不能であるかどうかを問うものではありません。 後者の状況は現在、any-hover または他のいかなるインタラクションメディア特性を用いても決定できません。 さらに、d-padやキーボードのみの操作のような非ポインティングデバイス入力は考慮しません。 それらは本質的にホバー不能でもあります。
マウスとタッチスクリーンを備えたタッチ対応ノートPCでは、 any-hover: none は、 (ホバー可能なマウスが存在するため)falseと評価されます。 ホバー不能なポインティングデバイス(タッチスクリーン)も存在するにもかかわらずです。 現在、異なるポインティングデバイスが異なるホバー能力を持つ場合に、 それぞれ異なるスタイルを提供することはできません。
ホバーや正確なポインティングに依存するページを、 any-hover または any-pointer が、 利用可能な入力機構の少なくとも1つがこれらの能力を持つことを示すという理由だけで設計するのは、 望ましくない体験につながる可能性があります。 ただし著者は、この情報を用いて、ユーザーが利用可能な追加のポインティングデバイスに基づき、 どのようなスタイルや機能を提供するかの判断材料にできます。
多くのスマートTVには、画面上のカーソルを制御する手段がありますが、 それはしばしばかなり基本的なコントローラであり、正確に操作するのが難しいものです。

このようなスマートTVのブラウザでは、coarsepointerany-pointer の両方の値となり、 著者は大きくて届きやすいクリックターゲットを備えたレイアウトを提供できます。

ユーザーはTVにBluetoothマウスをペアリングしており、 追加の利便性のために時々それを使うこともありますが、 このマウスはTVを操作する主要な手段ではありません。 pointer は依然として coarse に一致しますが、 any-pointer は、いまや coarsefine の両方に一致します。

(any-pointer: fine) がいまtrueであるという事実に基づいて小さなクリックターゲットに切り替えるのは適切ではありません。 それは、TVで期待されるものとかけ離れた体験を提供してユーザーを驚かせるだけでなく、 かなり不便である可能性もあります: マウスはTVを制御する主要な手段ではないため、手の届かないところにあったり、 ソファのクッションの下に隠れていたりするかもしれません…

対照的に、同じTVでのスクロールを考えてみてください。 スクロールバーは、精度の高いポインティングデバイスなしでは操作が困難です。 (pointer: coarse) がtrueであることに基づいて、さらに閲覧できるコンテンツがあることを示す代替手段を用意していたとしても、 (any-pointer: fine) がtrueならスクロールバーも追加で表示したいかもしれませんし、 (any-pointer: fine) がfalseなら視覚的な雑然さを減らすためにスクロールバーを完全に隠したいかもしれません。

付録A: 非推奨のメディア特性

以下のメディア特性非推奨です。これらは後方互換性のために保持されていますが、 新たに書かれるスタイルシートには適切ではありません。著者はこれらを使用してはなりません。ユーザーエージェントは、指定どおりにこれらをサポートしなければなりません。

ビューポート(またはページメディアにおけるページボックス)のサイズを問い合わせるには、 widthheight、および aspect-ratio メディア特性を、 device-widthdevice-height、および device-aspect-ratio の代わりに使うべきです。後者は、 文書のレイアウトに利用可能な空間にかかわらずデバイスの物理サイズを参照します。 device-* メディア特性は、モバイルデバイスを検出する代理として使われることもあります。 代わりに著者は、スタイル適用の対象としているデバイスの側面をより適切に表すメディア特性を使うべきです。

device-width

名前: device-width
対象: @media
値: <length>
型: range

device-width メディア特性は、出力デバイスのレンダリング面の幅を記述します。 連続メディアでは、 これはWebに公開される画面領域の幅です。 ページメディアでは、 これは用紙サイズの幅です。

device-width負の範囲ではfalseです。

@media (device-width < 800px) { … }

上の例では、スタイルシートは長さが800px未満の画面にのみ適用されます。 px単位は論理的な種類であり、 単位節で説明されています。

注: デバイスが縦向きと横向きのように複数の向きで使用できる場合、 device-* メディア特性は現在の向きを反映します。

device-height

名前: device-height
対象: @media
値: <length>
型: range

device-height メディア特性は、出力デバイスのレンダリング面の高さを記述します。 連続メディアでは、 これはWebに公開される画面領域の高さです。 ページメディアでは、 これは用紙サイズの高さです。

device-height負の範囲ではfalseです。

<link rel="stylesheet" media="(device-height > 600px)" />

上の例では、スタイルシートは縦方向ピクセルが600を超える画面にのみ適用されます。 px単位の定義は、CSSの他の部分と同じです。

device-aspect-ratio

名前: device-aspect-ratio
対象: @media
値: <ratio>
型: range

device-aspect-ratio メディア特性は、 device-width メディア特性の値と device-height メディア特性の値の比として定義されます。

例えば、正方形ピクセルを持つ画面デバイスが横1280ピクセル、縦720ピクセル (一般に「16:9」と呼ばれます)である場合、 以下のメディアクエリはすべてそのデバイスに一致します:
@media (device-aspect-ratio: 16/9) { … }
@media (device-aspect-ratio: 32/18) { … }
@media (device-aspect-ratio: 1280/720) { … }
@media (device-aspect-ratio: 2560/1440) { … }
テスト

変更点

2021年12月25日 勧告候補草案からの変更点

以下の変更は、2021年12月25日 勧告候補草案以降にこの仕様に加えられました:

2020年7月21日 勧告候補からの変更点

以下の変更は、2020年7月21日 勧告候補以降にこの仕様に加えられました:

2017年9月5日 勧告候補からの変更点

以下の変更は、2017年9月5日 勧告候補以降にこの仕様に加えられました:

2017年5月19日 作業草案からの変更点

以下の変更は、2017年5月19日 作業草案以降にこの仕様に加えられました:

メディアクエリ レベル3以降の変更点

以下の変更は、2012年6月19日 メディアクエリ レベル3の勧告以降にこの仕様に加えられました:

謝辞

この仕様は、W3Cのカスケーディングスタイルシート作業グループによる成果物です。

以下の人々からのコメントにより、 Amelia Bellamy-Royds、 Andreas Lind、 Andres Galante、 Arve Bersvendsen、 Björn Höhrmann、 Chris Lilley、 Chris Rebert、 Christian Biesinger、 Christoph Päper、 Dean Jackson、 Elika J. Etemad (fantasai)、 Emilio Cobos Álvarez、 François Remy、 Frédéric Wang、 Greg Whitworth、 Ian Pouncey、 James Craig、 Jinfeng Ma、 Kivi Shapiro、 L. David Baron、 Masataka Yakura、 Melinda Grant、 Michael[tm] Smith、 Nicholas C. Zakas Patrick H. Lauke、 Philipp Hoschka、 Rick Byers、 Rijk van Geijtenbeek、 Roger Gimson、 Sam Sneddon、 Sigurd Lerstad、 Simon Kissane、 Simon Pieters、 Steven Pemberton、 Susan Lesch、 Tantek Çelik、 Thomas Wisniewski、 Vi Nguyen、 Xidorn Quan、 Yves Lafon、 および 張俊芝 が この仕様を改善しました。

セキュリティに関する考慮事項

本仕様に関して、新たなセキュリティ上の考慮事項は報告されていません。

プライバシーに関する考慮事項

メディアクエリは、CSSがページ環境のさまざまな側面を問い合わせることを可能にします。 これには、スクリプトでは見つけることが困難または不可能なものも含まれます。 これは潜在的なプライバシー上の危険であり、 ユーザーのフィンガープリント採取の強化を許し得ますが、 リスクは一般に低いです。 少なくとも、同じ情報はユーザーエージェント文字列を調べることでスクリプト経由でも推測可能であるべきです。 しかし、UA文字列の偽装はメディアクエリには影響しないため、 これはやや堅牢な検出技術となります。

とはいえ、メディアクエリによって得られる情報は比較的粗く、 この点に関してはエントロピーをあまり増やしません。

いくつかのレガシーなメディア特性(device-widthdevice-height、および device-aspect-ratio)は、 明確な利点がないにもかかわらず、UAが動作している環境についての情報を露出します。 これらは互換性の理由で保持されていますが、 プライバシーおよびセキュリティのため、 UAが不正確な情報を報告することが許容されています。

TAGは、仕様が導入するリスクを評価するために、 編集者および作業グループを支援するセルフレビュー質問票を策定しました。 回答は以下に示します。

この仕様は個人を特定できる情報を扱いますか?
いいえ。
この仕様は高価値データを扱いますか?
いいえ。
この仕様は、閲覧セッションをまたいで持続する新しい状態をオリジンに導入しますか?
いいえ。
この仕様は、持続的なクロスオリジン状態をWebに露出しますか?
いいえ。
この仕様は、オリジンが現在アクセスできない他のデータを露出しますか?
いいえ。
この仕様は、新しいスクリプト実行/読み込み機構を可能にしますか?
いいえ。
この仕様は、オリジンがユーザーの位置情報にアクセスすることを許しますか?
いいえ。
この仕様は、オリジンがユーザーのデバイス上のセンサーにアクセスすることを許しますか?
いいえ。
この仕様は、オリジンがユーザーのローカル計算環境の側面にアクセスすることを許しますか?
はい。上記の本文で説明したとおりです。
この仕様は、オリジンが他のデバイスにアクセスすることを許しますか?
いいえ。
この仕様は、オリジンがユーザーエージェントのネイティブUIに対して何らかの制御を行うことを許しますか?
いいえ。
この仕様は、一時的識別子をWebに露出しますか?
いいえ。
この仕様は、ファーストパーティとサードパーティ文脈の行動を区別しますか?
いいえ。
この仕様は、ユーザーエージェントの「シークレット」モードの文脈でどのように動作すべきですか?
振る舞いの違いは必要ありません。
この仕様は、データをユーザーのローカルデバイスに永続化しますか?
いいえ。
この仕様には「セキュリティに関する考慮事項」および「プライバシーに関する考慮事項」節がありますか?
はい。あなたが現在読んでいるこの節です。
この仕様は、既定のセキュリティ特性を格下げすることを許しますか?
いいえ。

適合性

文書の慣例

適合性要件は、記述的な断定とRFC 2119の用語の組み合わせによって表現されます。この文書の規範部分における キーワード「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」 「RECOMMENDED」「MAY」「OPTIONAL」は、RFC 2119に記述されているとおりに解釈されます。 ただし、可読性のため、これらの語は本仕様では常に全て大文字で表記されるわけではありません。

本仕様の本文は、明示的に非規範としてマークされた節、例、および注記を除き、すべて規範です。[RFC2119]

本仕様における例は「例えば」という語で導入されるか、あるいは規範本文から class="example" により次のように区別されます:

これは参考例(情報提供の例)の例です。

参考注記(情報提供の注記)は「Note」という語で始まり、規範本文から class="note" により次のように区別されます:

Note、これは参考注記(情報提供の注記)です。

勧告(advisement)は、特別な注意を喚起するようにスタイル付けされた規範節であり、他の規範本文から <strong class="advisement"> により次のように区別されます: UAはアクセシブルな代替手段を提供しなければならない。

テスト

本仕様の内容に関するテストは、このような「テスト」ブロック内で文書化される場合があります。 この種のブロックはすべて非規範です。


適合性クラス

本仕様への適合性は、次の3つの適合性クラスについて定義されます:

スタイルシート
CSS スタイルシート
レンダラー
スタイルシートの意味論を解釈し、それらを用いる文書をレンダリングするUA
オーサリングツール
スタイルシートを書くUA

スタイルシートが本仕様に適合するのは、このモジュールで定義される構文を用いるそのすべての記述が、 汎用CSS文法およびこのモジュールで定義される各特性の個別文法に従って妥当である場合です。

レンダラーが本仕様に適合するのは、該当する仕様で定義されるとおりにスタイルシートを解釈することに加え、 本仕様で定義されるすべての特性を、正しくパースし、文書をそれに従ってレンダリングすることによりサポートする場合です。 ただし、デバイスの制約によりUAが文書を正しくレンダリングできないことは、UAを不適合とするものではありません。 (例えば、UAはモノクロモニタ上で色をレンダリングすることを要求されません。)

オーサリングツールが本仕様に適合するのは、汎用CSS文法およびこのモジュールの各特性の個別文法に従って構文的に正しいスタイルシートを書き、 かつ、このモジュールに記述されたスタイルシートの他のすべての適合性要件を満たす場合です。

部分的な実装

著者が前方互換なパース規則を利用してフォールバック値を割り当てられるようにするため、 CSSレンダラーは、利用可能なレベルのサポートを持たないあらゆる at-rule、プロパティ、プロパティ値、キーワード、 およびその他の構文構成要素を無効として扱わなければならず(そして適切に無視しなければなりません)。 特にユーザーエージェントは、単一の複数値プロパティ宣言において、サポートされない構成値を選択的に無視し、 サポートされる値を尊重してはなりません。いずれかの値が無効(サポートされない値は無効と見なさなければならない)と見なされる場合、 CSSは宣言全体を無視することを要求します。

不安定および独自機能の実装

将来の安定したCSS機能との衝突を避けるため、 CSSWGは、不安定な機能およびCSSへの独自拡張の実装に関して、 ベストプラクティスに従うことを推奨します。

非実験的な実装

仕様が勧告候補(Candidate Recommendation)段階に達すると、 非実験的な実装が可能となり、実装者は、仕様に従って正しく実装されていることを示せるあらゆるCRレベルの機能について、 接頭辞なし(unprefixed)の実装をリリースすべきです。

実装間でCSSの相互運用性を確立し維持するため、 CSS Working Groupは、非実験的なCSSレンダラーに対し、 あらゆるCSS機能の接頭辞なし実装をリリースする前に、 実装レポート(および必要ならその実装レポートで用いたテストケース)をW3Cへ提出するよう要請します。 W3Cへ提出されたテストケースは、CSS Working Groupによるレビューおよび修正の対象となります。

テストケースおよび実装レポートの提出に関する追加情報は、 CSS Working Groupのウェブサイト https://www.w3.org/Style/CSS/Test/ で見つけられます。 質問は、メーリングリスト public-css-testsuite@w3.org に送ってください。

CR終了基準

本仕様を提案勧告(Proposed Recommendation)へ進めるためには、 各特性について、少なくとも2つの独立した相互運用可能な実装が存在しなければなりません。 各特性は異なる製品群によって実装されてもよく、 すべての特性が単一の製品によって実装される必要はありません。 この基準の目的のため、以下の用語を定義します:

独立
各実装は異なる当事者によって開発されなければならず、 他の適格な実装が使用したコードを共有、再利用、または派生してはなりません。 本仕様の実装に関係しないコードの節は、この要件の対象外です。
相互運用可能
公式CSSテストスイートの該当テストケースに合格すること、または、実装がWebブラウザでない場合は同等のテストに合格すること。 このようなユーザーエージェント(UA)を用いて相互運用性を主張する場合、 テストスイート内の各関連テストには同等のテストが作成されるべきです。 さらに、そのようなUAを用いて相互運用性を主張する場合、 相互運用性の目的のために、それら同等テストを同じ方法で合格できる追加のUAが1つ以上存在しなければなりません。 同等テストは、ピアレビューの目的のために公開されなければなりません。
実装
次を満たすユーザーエージェント:
  1. 仕様を実装している。
  2. 一般公衆に利用可能である。実装は出荷製品またはその他の公開版(例: ベータ版、プレビューリリース、または「ナイトリービルド」)でよい。 非出荷製品リリースは、安定性を示すため、少なくとも1か月間は当該機能を実装していなければなりません。
  3. 実験的ではない(すなわち、テストスイートに合格するためだけに特別に設計された版であり、 今後通常利用を意図しないものではない)。

本仕様は、少なくとも6か月間、勧告候補(Candidate Recommendation)のままとなります。

索引

本仕様により定義される用語

参照により定義される用語

参照

規範参照

[COLORIMETRY]
測色学(第4版)。CIE 015:2018. 2018. URL: http://www.cie.co.at/publications/colorimetry-4th-edition
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS カスケーディングと継承 レベル 5. 13 January 2022. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CONDITIONAL-3]
Chris Lilley; David Baron; Elika Etemad. CSS 条件付き規則モジュール レベル 3. 15 August 2024. CRD. URL: https://www.w3.org/TR/css-conditional-3/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS 構文モジュール レベル 3. 24 December 2021. CRD. URL: https://www.w3.org/TR/css-syntax-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 値と単位 モジュール レベル 3. 22 March 2024. CRD. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 値と単位 モジュール レベル 4. 12 March 2024. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS 書字方向 レベル 4. 30 July 2019. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; et al. カスケーディングスタイルシート レベル2 改訂1(CSS 2.1)仕様. 7 June 2011. REC. URL: https://www.w3.org/TR/CSS2/
[CSSOM-VIEW-1]
Simon Fraser; Emilio Cobos Álvarez. CSSOM View モジュール. 16 September 2025. WD. URL: https://www.w3.org/TR/cssom-view-1/
[MEDIAQUERIES-3]
Florian Rivoal. メディアクエリ レベル 3. 21 May 2024. REC. URL: https://www.w3.org/TR/mediaqueries-3/
[RFC2119]
S. Bradner. RFCにおいて要求レベルを示すために用いるキーワード. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119

参考参照

[CSS-FONTS-4]
Chris Lilley. CSS フォントモジュール レベル 4. 1 February 2024. WD. URL: https://www.w3.org/TR/css-fonts-4/
[Display-P3]
A; et al. Display P3. 2022-02. URL: https://www.color.org/chardata/rgb/DisplayP3.xalter
[HTML401]
Dave Raggett; Arnaud Le Hors; Ian Jacobs. HTML 4.01 仕様. 27 March 2018. REC. URL: https://www.w3.org/TR/html401/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 標準. リビング標準. URL: https://infra.spec.whatwg.org/
[ITU-R-BT-2020-2]
制作および国際番組交換のための超高精細テレビジョンシステムのパラメータ値. October 2015. URL: https://www.itu.int/rec/R-REC-BT.2020/en
[RFC2879]
G. Klyne; L. McIntyre. Internet Fax (V2) のためのコンテンツ特性スキーマ. August 2000. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc2879
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. セレクタ レベル 4. 22 January 2026. WD. URL: https://www.w3.org/TR/selectors-4/
[SRGB]
マルチメディアシステムおよび装置 - 色の測定および管理 - 第2-1部: 色管理 - 既定のRGB色空間 - sRGB. URL: https://webstore.iec.ch/publication/6169
[XML-STYLESHEET]
James Clark; Simon Pieters; Henry Thompson. XML文書とスタイルシートの関連付け 1.0 (第2版). 28 October 2010. REC. URL: https://www.w3.org/TR/xml-stylesheet/

プロパティ索引

定義されたプロパティはありません。

@media 記述子

名前 初期値
any-hover none | hover discrete
any-pointer none | coarse | fine discrete
aspect-ratio <ratio> range
color <integer> range
color-gamut srgb | p3 | rec2020 discrete
color-index <integer> range
device-aspect-ratio <ratio> range
device-height <length> range
device-width <length> range
grid <mq-boolean> discrete
height <length> range
hover none | hover discrete
monochrome <integer> range
orientation portrait | landscape discrete
overflow-block none | scroll | paged discrete
overflow-inline none | scroll discrete
pointer none | coarse | fine discrete
resolution <resolution> | infinite range
scan interlace | progressive discrete
update none | slow | fast discrete
width <length> range