メディアクエリ レベル 5

W3C 作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-mediaqueries-5-20260219/
最新の公開版:
https://www.w3.org/TR/mediaqueries-5/
編集者草案:
https://drafts.csswg.org/mediaqueries-5/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/mediaqueries-5/
フィードバック:
CSSWG Issues リポジトリ
仕様内(インライン)
編集者:
Florian Rivoal (招待 エキスパート)
Tab Atkins Jr. (Google)
Daniel Libby (Microsoft)
Luke Warlow (Igalia)
元編集者:
Dean Jackson (Apple)
この仕様に対する編集提案:
GitHub エディター
テストスイート:
https://wpt.fyi/results/css/mediaqueries/

要約

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

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

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節に従って情報を開示しなければなりません。

以下の機能はat-riskであり、CR期間中に削除される可能性があります:

「At-risk」はW3Cプロセスにおける専門用語であり、必ずしもその機能が削除または遅延の危機にあることを意味するわけではありません。 これは、WGがその機能が適時に相互運用可能に実装されるのが難しい可能性があると考えていることを意味し、 それをそのようにマークすることで、提案勧告(Proposed Rec)段階へ移行する際に必要であれば、 まずその機能なしの新しい勧告候補を公開することなく、WGがその機能を削除できるようにします。

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. モジュール間の相互作用

このモジュールは[MEDIAQUERIES-4] および、その前身である [MEDIAQUERIES-3] を拡張し、それらに取って代わります。 これらはさらに、CSS 2 § 7 メディア型を基にして置き換えたものです。

1.2.

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

1.3. 単位

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

メディアクエリにおける相対長単位は、初期値に基づきます。 これは、単位が宣言の結果に基づくことは決してないことを意味します。

注: 例えばHTMLでは、 em単位は、初期値 に対して相対的であり、 それはユーザーエージェントまたはユーザーの設定によって定義される font-size の初期値であって、 ページ上のいかなるスタイリングでもありません。 これにはまた、ユーザーが適用しうる追加の制約(最小フォントサイズなど)も考慮される点に注意してください。

テスト

2. メディアクエリ

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

メディアクエリの構文は、 任意のメディアクエリ修飾子、 任意のメディア型、 および0個以上のメディア特性 から構成されます:

media condition only not media type and media condition

メディアクエリは、 trueまたはfalseのいずれかとなる論理式です。 メディアクエリがtrueとなるのは、次の場合です:

本節におけるメディアクエリに関する記述は、構文の節に従っていることを前提とします。 構文に適合しないメディアクエリは、§ 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);

ユーザーエージェントは、把握しているユーザー環境の変化に応じて、 メディアクエリを再評価しなければなりません。 例えば、デバイスが横向きから縦向きへ切り替えられた場合などです。 そして、それらメディアクエリに依存するあらゆる構成要素の挙動を、 それに応じて変更しなければなりません。

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

テスト

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

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

media query ,

メディアクエリリストは、 構成要素であるメディアクエリのうちいずれかがtrueであればtrueとなり、 構成要素であるメディアクエリすべてがfalseのときにのみfalseとなります。

例えば、次のメディアクエリリストは、 (メディア型screenでカラーデバイスである) またはメディア型projectionでカラーデバイスである) のいずれかでtrueとなります:
@media screen and (color), projection and (color) { … }

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

例えば、次は等価です:
@media all { … }
@media { … }

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

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

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

個々のメディアクエリは、 キーワード not を前置することで、 結果を否定できます。 通常trueと評価されるメディアクエリは、 notを前置するとfalseになり、 その逆も同様です。

例えば、次は、色表示可能な画面以外のすべてに適用されます。 メディア型メディア型だけでなく、 メディアクエリ全体が否定される点に注意してください。
<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" />

注: only キーワードは、 メディア型の前でのみ使用できる点に注意してください。 メディア特性のみからなるメディアクエリ、 あるいは not のような別のメディアクエリ修飾子を伴うものは、 レガシーなユーザーエージェントによって自動的にfalseとして扱われます。

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

2.3. メディア型

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

残念ながら、メディア型は、 異なるスタイリングの必要を持つデバイスを区別する方法として不十分であることが明らかになりました。 元々はかなり明確に区別されていたカテゴリ、例えばscreenhandheldは、 発明以降の年月で著しく混ざり合ってきました。 一方で、ttytvのようなものは、 フル機能のコンピュータモニタという標準から見て有用な違いを露出し、 異なるスタイリングで対象化するのに潜在的に有用ですが、 メディア型が相互排他的であるという定義のために、 それらを合理的に用いることが難しくなっています。 代わりに、それらの排他的な側面は、 メディア特性(例えばgridscan)として表現する方が適切です。

このため、次のメディア型が、 メディアクエリで使用するために定義されます:

all
すべてのデバイスに一致します。
print
プリンタ、および印刷表示の再現を意図したデバイス(例えば「印刷プレビュー」で文書を表示するWebブラウザ)に一致します。
screen
print に一致するもの以外のすべてのデバイスに一致します。

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

ユーザーエージェントは、次のメディア型を妥当として認識しなければなりませんが、 それらが何にも一致しないようにしなければなりません。

注: すべてのメディア型は、重要な違いを捉える適切なメディア特性が定義され次第、 いずれ非推奨となることが見込まれています。

テスト

2.4. メディア特性

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

構文的には、メディア特性はCSSプロパティに似ています。 すなわち、特性名、コロン、およびテストする値から構成されます。 また、特性名だけのブール形式、 あるいは比較演算子を伴う範囲形式で書くこともできます。

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

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

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

メディア特性device-aspect-ratioは視覚デバイスにのみ適用されます。 speechデバイスでは、device-aspect-ratioを含む式はしたがって常にfalseになります:
<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つの値は比較でき、どちらが小さくどちらが大きいかを判断できます。

この2つの型の唯一の重要な違いは、「range」メディア特性範囲文脈で評価でき、 その名前に「min-」および「max-」接頭辞を受け入れられることです。 これらのいずれかを行うと特性の意味が変わります—​すなわち、 メディア特性が与えられた値に正確に一致するときにtrueとなるのではなく、 その値以上/以下/等しいときに一致します。

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

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

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

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

このように書かれた場合、メディア特性ブール文脈で評価されます。 特性が、数0以外の任意の値、 値0を持つ<dimension>、 キーワードnone、 または、そのメディア特性によりブール文脈でfalseと評価されると明示的に定義された値 に対してtrueとなる場合、 メディア特性はtrueと評価されます。 そうでなければfalseと評価されます。

いくつかのメディア特性は、このように書くことを意図して設計されています。

例えば、updateは、何らかの更新が利用可能かどうかをテストするために通常(update)と書かれ、 その反対を確認するにはnot (update)とします。

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

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

例えば、(pointer)は有用です。 これは、pointerが、 デバイス上にポインティングデバイスがまったく存在しないことを示すnone値を持つためです。 一方、(scan)は(デバイスにそもそも適用されるかどうかに依存して) 常にtrueまたは常にfalseとなるだけです。 「false」を意味する値が存在しないためです。

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

「range」型のメディア特性は、 値に順序があるという事実を活用する範囲文脈で別の書き方もでき、 通常の数学的比較演算子を用います:

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

注: この構文はMediaqueriesのレベル4で新しく導入されたものであり、 そのため現時点ではmin-/max-接頭辞ほど広くはサポートされていません。

特性名、 比較演算子、 および値からなる基本形は、 その関係が真である場合にtrueを返します。

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

残りの形式、すなわち 特性名が2つの値比較の間に入れ子になっている形式は、 両方の比較が真である場合にtrueを返します。

例えば、(400px < width < 1000px)は、 ビューポートの幅が400px1000pxの間(ただしどちらとも等しくない)である場合にtrueを返します。

「range」型のいくつかのメディア特性は、負の範囲ではfalseであるとされます。 これは、負の値が妥当でありパースされなければならないこと、 そして、そのような負の値のいずれかに対してメディア特性が等しい/より小さい/以下であるかどうかを問い合わせると、 falseと評価されなければならないことを意味します。 メディア特性が負の値より大きい、または以上であるかどうかを問い合わせる場合、 その関係が真であればtrueと評価されます。

注: もし負の値がパース時に拒否されていたなら、 代わりにエラー処理規則に基づいてunknownとして扱われていたでしょう。 しかし実際には、デバイスのresolution-300dpiであるかどうかはunknownではなく、 falseであることが分かっています。 同様に、任意の視覚デバイスに対して、対象となる表示領域のwidth-200pxより大きいことは分かっています。 上記の規則はこれを反映しており、 直感がUAの挙動に一致するようにしています。

次の例は、すべての視覚デバイスで緑の背景になります:
@media not (width <= -100px) {
  body { background: green; }
}
@media (height > -100px) {
  body { background: green; }
}
@media not (resolution: -300dpi) {
  body { background: green; }
}
これは、メディアクエリ レベル3 [MEDIAQUERIES-3]と比べた挙動変更です。 レベル3では、これらのプロパティにおける負の値は構文エラーを引き起こしました。 レベル3では、構文エラー(禁止値を含む)により、 このレベルで定義されるunknownとしての扱いではなく、 メディアクエリ全体がfalseになっていました。 レベル3から更新する実装は、 § 2.5 メディア特性の結合で定義されるより豊かな構文のサポートを追加する際、 意図しない意味論の導入を避けるために、 関連するプロパティに対する負の値の扱いを変更することを確認すべきです。
テスト

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

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

これは、次のとおり、その特性を範囲文脈で評価することと等価です:

注: 「min-」と「max-」はいずれも、 値を含む範囲比較に相当するため、 ある状況では制限となる場合があります。

例えば、 著者が「min-」および「max-」を用いてビューポート幅のブレークポイントに基づく異なるスタイルを定義しようとする場合、 通常は比較する値をオフセットし、 両方の問い合わせが同時にtrueと評価されないようにします。 ブレークポイントが320pxであると仮定すると、著者は概念的に次のように用います:
@media (max-width: 320px) { /* styles for viewports <= 320px */ }
@media (min-width: 321px) { /* styles for viewports >= 321px */ }

これは、ビューポート幅が320pxのときに2つのスタイル集合が同時に適用されないことを保証しますが、 非整数のピクセル密度 (例: 高dpiディスプレイ、またはズーム/スケーリングの結果) により発生しうる分数のビューポートサイズの可能性を考慮していません。 320pxと321pxの間に入るビューポート幅では、どちらのスタイルも適用されないことになります。

この問題を回避するための1つの方法は、比較に用いる値の精度を上げることです。 上の例では、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 メディア特性は数値に見えますが、 0および1を受け入れるためです。)

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

2.5. メディア特性の結合

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

メディアクエリの同じ「レベル」でandornotを混在させることは無効です。 例えば、(color) and (pointer) or (hover)は不正です。 何を意味するのかが不明確だからです。 代わりに、特定の結合キーワードを用いるもの同士をグループ化するために括弧を使用でき、 (color) and ((pointer) or (hover))または((color) and (pointer)) or (hover)のいずれかになります。 これら2つは非常に異なる意味を持ちます: (hover)だけがtrueである場合、 前者はfalseと評価されますが、 後者はtrueと評価されます。

テスト

3. 構文

メディアクエリ構文の非形式的な説明は、前節までの本文およびレールロード図に現れます。 正式なメディアクエリ構文は本節で記述されます。 その際、規則/プロパティの文法構文は [CSS-SYNTAX-3] および [CSS-VALUES-4] で定義されるものを用います。

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

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

注: <media-query-list>のパースに関するこの定義は、意図的に空のリストを受け入れます。

注: [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>生成規則には、キーワードonlynotandor、およびlayerは含まれません。

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

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

注: notand、またはorキーワードと、 それに続く(文字の間には空白が必要です。 空白がないと、代わりに<function-token>としてパースされてしまうためです。 これは、上記の文法で既にカバーされているため、明示的に無効とはされません。 ただし、)と後続のキーワードの間に空白があるのは問題ありません。

<media-in-parens>生成規則をパースする際、 <general-enclosed>分岐は、入力がそれ以前のどちらの分岐にも一致しない場合にのみ選ばれなければなりません。 <general-enclosed>は、 将来の文法拡張を合理的に互換性のある形で可能にするために存在します。

テスト

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>がtrueならtrue、 これらの<media-in-parens>項のうち少なくとも1つがfalseならfalse、 それ以外の場合はunknownです。
<media-in-parens> <media-or>*
結果は、<media-in-parens>の子項と、 <media-or>の子項であるすべての<media-in-parens>がfalseならfalse、 これらの<media-in-parens>項のうち少なくとも1つがtrueならtrue、 それ以外の場合はunknownです。
<general-enclosed>
結果はunknownです。

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

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

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

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

メディアクエリは、項が“true”“false”“unknown”となり得る三値論理を使用します。 具体的には、Kleeneの三値論理を用います。 この論理において、“unknown”は「trueかfalseのいずれかだが、どちらかはまだ確定していない」ことを意味します。

一般に、式にunknown値が現れると、式もunknownになりがちです。 これは、unknownを“true”に置き換えた場合と“false”に置き換えた場合で、式が異なる結果を与えるためです。 unknown値を取り除く唯一の方法は、 unknownがtrue/falseのどちらに置き換えられても同じ結果を与える式で用いることです。 これは、“false AND unknown”(結果は常にfalse)および “true OR unknown”(結果は常にtrue)の場合に起こります。

この論理が採用されたのは、<general-enclosed>に 真理値を割り当てる必要があるためです。 標準的なブール論理では、唯一妥当な値は“false”ですが、 そうするとnot unknown(function)がtrueとなり、 混乱を招き望ましくない場合があります。 Kleeneの三値論理は、unknownなものが、 その値が最終結果に無関係でない限り、 メディアクエリの一致を妨げることを保証します。

3.2. エラー処理

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

注: 文法不一致はメディアクエリリスト全体を消し去るのではなく、 問題のあるメディアクエリだけに影響する点に注意してください。 上で定義されたパース挙動は、次のトップレベルのカンマで自動的に回復します。

@media (example, all,), speech { /* 音声デバイスにのみ適用 */ }
@media &test, speech           { /* 音声デバイスにのみ適用 */ }

上記のメディアクエリリストはいずれも、 パース中にnot all, speechへ変換されます。 これは、単にspeechとする場合と同じ真理値を持ちます。

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

@media (example, speech { /* 音声デバイス向け規則 */ }

括弧付きブロックが閉じられていないため、 それはその地点からスタイルシートの残り全体を含むことになります (スタイルシート内のどこかで不一致の“)“文字に偶然遭遇しない限り)。 そして全体をnot allメディアクエリへ変換します。

未知の<media-type>は、一致しないものとして扱わなければなりません。

例えば、メディアクエリunknownはfalseです。 unknownが未知のメディア型であるためです。

しかし、not unknownはtrueです。 notがfalseなメディア型を否定するためです。

いくつかのキーワードは<media-type>として許可されておらず、 パースが完全に失敗することを覚えておいてください: メディアクエリor and (color)は、 orを未知のメディア型として扱うのではなく、 パース中にnot allへ変換されます。

未知の<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と等価であり、常にtrueです。 しかし、CSSのパース規則により、@media規則、ひいてはメディアクエリは、 セミコロンで終わることになります。 残りのテキストは、 無効なセレクタと内容を持つスタイル規則として扱われます。

テスト

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

4.1. 幅: width 特性

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

widthメディア特性は、出力デバイスの対象となる表示領域の幅を記述します。 連続メディアでは、 これはビューポートの幅であり (CSS2の9.1.1節で述べられるとおり [CSS2])、 レンダリングされたスクロールバーの大きさ(もしあれば)を含みます。 ページメディアでは、これはページボックスの幅です (CSS2の13.2節で述べられるとおり [CSS2])。

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

width負の範囲ではfalseです。

例えば、次のメディアクエリは、 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に対して相対的です。

テスト

4.2. 高さ: height 特性

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

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

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

height負の範囲ではfalseです。

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

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

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

テスト

4.4. 向き: orientation 特性

名前: orientation
対象: @media
値: portrait | landscape
型: discrete
portrait
orientationメディア特性は、 heightメディア特性の値が widthメディア特性の値以上であるとき、 portraitです。
landscape
それ以外の場合、orientationlandscapeです。
次のメディアクエリは、 例えば電話を直立させて持ったときのような「portrait」向きをテストします。
@media (orientation:portrait) { … }

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

名前: overflow-block
対象: @media
値: none | scroll | paged
型: discrete

overflow-blockメディア特性は、 ブロック軸において 内容が初期包含ブロックからあふれたときの、デバイスの挙動を記述します。

none
ブロック軸におけるオーバーフローのための手段はありません。 あふれた内容は単に表示されません。 例: 看板
scroll
ブロック軸であふれた内容は、 ユーザーがスクロールして到達できるようにすることで露出されます。 例: コンピュータ画面
paged
内容は離散的なページに分割されます。 ブロック軸で1ページからあふれた内容は次のページに表示されます。 例: プリンタ、電子書籍リーダー

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

注: このメディア特性の追加の値は、 連続ページメディアの側面を組み合わせた ハイブリッドな挙動を持つユーザーエージェントのクラスを記述するために、 将来追加される可能性があります。 例えば、Prestoレイアウトエンジン(現在は廃止)は、 強制改ページを尊重する点を除けばcontinuousに似た、半ページ分割のプレゼンテーションモード挙動を備えていました。 現在出荷されているユーザーエージェントでこの種の挙動を持つものを把握していないため、 Working Groupは、このレベルではそのような値を追加しないことを決定しました。 それにより、そのようなユーザーエージェントを誤って特徴付けることを避けます。 上で指定されたいずれの値でも十分に記述できないユーザーエージェントを実装する人は、 このメディア特性の拡張が検討できるよう、 Working Groupに連絡することが推奨されます。

テスト

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

名前: overflow-inline
対象: @media
値: none | scroll
型: discrete

overflow-inlineメディア特性は、 インライン軸において 内容が初期包含ブロックからあふれたときの、デバイスの挙動を記述します。

none
インライン軸におけるオーバーフローのための手段はありません。 あふれた内容は単に表示されません。
scroll
インライン軸であふれた内容は、 ユーザーがスクロールして到達できるようにすることで露出されます。

注: インライン方向にはみ出した内容をページ送りで表示するオーバーフローについて、 既知の実装はありません。 そして、その概念自体もあまり意味があるようには見えないため、 overflow-inlineには意図的にpaged値がありません。

4.7. 水平方向ビューポートセグメント: horizontal-viewport-segments 特性

名前: horizontal-viewport-segments
対象: @media
値: <integer>
型: range

horizontal-viewport-segmentsメディア特性は、 ビューポートを水平方向に見たときの論理セグメントの数を記述します。

horizontal-viewport-segmentsメディア特性は、 負の範囲ではfalseです。

ビューポートが、1つ以上のハードウェア機構(例えば別々のディスプレイの間にある折り目やヒンジなど)によって分割され、 それらが論理的な区切りとして機能する場合、 セグメントとは、ページが論理的に別個のものとして扱えるビューポート領域です。

4.8. 垂直方向ビューポートセグメント: vertical-viewport-segments 特性

名前: vertical-viewport-segments
対象: @media
値: <integer>
型: range

vertical-viewport-segmentsメディア特性は、 ビューポートを垂直方向に見たときの論理セグメントの数を記述します。

vertical-viewport-segmentsメディア特性は 負の範囲ではfalseです。

次のメディアクエリは、横に並んだセグメントがちょうど2つあるビューポートを検出します。
@media (horizontal-viewport-segments: 2) and (vertical-viewport-segments: 1) { … }

4.9. 表示モード: display-mode メディア特性

名前: display-mode
対象: @media
値: fullscreen | standalone | minimal-ui | browser | picture-in-picture
型: discrete

display-modeメディア特性は、 現在の閲覧コンテキストが エンドユーザーに対して現在どのようなモードで提示されているかを記述します。 子の閲覧コンテキストでは、表示モードは、 トップレベルの閲覧コンテキストのそれに一致しなければなりません。

この特性は主として、ユーザーエージェントが アプリケーションコンテキストに適用した どの表示モードであるかを判定するために使用されます。 そのため、この特性の値は、[APPMANIFEST]で定義される表示モードに対応します。 ただし、これは非アプリケーションの文脈においても、 ビューポートがfullscreenやpicture-in-pictureなどの他のモードにあるかどうかを判定するために使用できます。

fullscreen
閲覧コンテキストは、ブラウザUI要素を隠して表示され、利用可能な表示領域の全体を占めます。 fullscreenコンテキストは、fullscreen表示モード(アプリケーションマニフェストにおける)により引き起こされた可能性がありますし、 Fullscreen APIrequestFullscreen() メソッドにより引き起こされた可能性もあります。 あるいは、他の手段(例えばユーザーがユーザーエージェント組み込みの制御を使って手動でfullscreenモードを有効化するなど)による可能性もあります。

fullscreen表示モードに対応します。

standalone
standalone表示モードが使用中です。 アプリケーションコンテキストでのみ適用されます。
minimal-ui
minimal-ui表示モードが使用中です。 アプリケーションコンテキストでのみ適用されます。
browser
閲覧コンテキストは、ユーザーエージェントにおいてハイパーリンクを開くためのプラットフォーム固有の慣例に従って表示されます (例: ブラウザタブ、またはアドレスバーなどの制御を備えたWebブラウザウィンドウ)。 これは、他の表示モードが適切でない非アプリケーションコンテキストで使用されるべきです。

browser表示モードに対応します。

picture-in-picture
このモードは、ユーザーがデバイス上で他のサイトやアプリケーションとやり取りしながら、 メディアの視聴を継続できるようにします。 閲覧コンテキストは、浮遊し常に最前面に表示されるウィンドウで提示されます。 ユーザーエージェントは、プラットフォーム固有の他のUI要素 (例えば「back-to-tab」や「site information」ボタンなど、またはプラットフォームとユーザーエージェントにおいて慣習的なもの)を含める場合があります。
例えば、アプリケーションマニフェストは、 次のようにstandalone 表示モードを要求できます:
{
  "display": "standalone"
}

このメディアクエリは、ユーザーエージェントが実際にstandaloneモードを適用したかどうかを判定するために使用できます:

@media (display-mode: standalone) {}

ユーザーエージェントは、現在使用中の実際のモードに応じて、 display-modeを他のいずれかの値に設定できます。

fullscreen 表示モードは、Fullscreen APIとは別物です。

fullscreenは、display-modeの値として、 CSSの:fullscreen 疑似クラスとは直接の関係はありません。 :fullscreen疑似クラスは、 要素がfullscreen要素スタックに置かれた場合にのみ、その要素に排他的に一致します。 しかし、Fullscreen APIを用いて要素に対してrequestFullscreen()メソッドを呼び出す副作用として、 ブラウザがOSレベルのfullscreenモードへ入ることがあります。 その場合、:fullscreen(display-mode: fullscreen)の両方が一致します。

いくつかのプラットフォームでは、 ユーザー—​またはWeb Application Manifest—​が、 Fullscreen APIを呼び出すことなくWebアプリケーションをfullscreenへ移行させることが可能です。 これが起きた場合、 :fullscreen疑似クラスは一致しませんが、 (display-mode: fullscreen)は一致します。 これは以下のCSSコードで例示されます:
/* ビューポートがfullscreenのときに適用 */
@media (display-mode: fullscreen) {}

/* 要素がfullscreenのときに適用 */
#game:fullscreen {}

注: このメディア特性の追加の値は、 [APPMANIFEST]に追加される新しい表示モードに一致するために、 将来追加される可能性があります。

テスト

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

5.1. 表示解像度: resolution 特性

名前: resolution
対象: @media
値: <resolution> | infinite
型: range

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

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

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

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

解像度に物理的な制約がない出力媒体(例えばベクターグラフィックスへの出力など)では、 この特性はinfinite値に一致しなければなりません。 このメディア特性を範囲文脈で評価する目的では、 infiniteは、考え得るいかなる<resolution>よりも大きいものとして扱われなければなりません。 (すなわち、(resolution > 1000dpi)のような問い合わせは、infiniteなメディアに対してtrueになります。)

このメディアクエリは、単に「高解像度」スクリーン (ハードウェアピクセルと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 特性

名前: scan
対象: @media
値: interlace | progressive
型: discrete

scanメディア特性は、いくつかの出力デバイスにおける走査処理を記述します。

interlace
CRTおよび一部種類のプラズマTV画面は「インターレース」レンダリングを使用しており、 映像フレームが、画面上の「偶数」ラインのみを指定するものと 「奇数」ラインのみを指定するものとで交互になっていました。 これは、滑らかな動きを生成するために、さまざまな自動的な心的イメージ補正能力を利用するものです。 これにより、帯域幅コストを半分に抑えつつ、より高いFPSの放送を擬似的に実現できました。

インターレース画面で表示する場合、 著者は「コーミング」を避けるために画面上を非常に速く横切る動きを避けるべきであり、 また「twitter」を避けるために画面上の細部が1pxより広いことを確保すべきです。

progressive
「プログレッシブ」レンダリングを使用する画面は、各画面を完全に表示し、 特別な取り扱いを必要としません。

ほとんどの現代的な画面、およびすべてのコンピュータ画面は、プログレッシブレンダリングを使用します。

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

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

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

名前: grid
対象: @media
値: <mq-boolean>
型: discrete

gridメディア特性は、出力デバイスがグリッドかビットマップかを問い合わせるために使用されます。 出力デバイスがグリッドベースである場合 (例: 「tty」端末、または固定フォントが1つしかない電話ディスプレイ)、 値は1になります。 それ以外の場合、値は0になります。

<mq-boolean>値型は、値が0または1である<integer>です。 他の整数値はすべて無効です。CSSでは-0は常に0と等価であるため、 妥当な<mq-boolean>値としても受け入れられます。

注: <mq-boolean>型は、レガシー目的のためにのみ存在します。 もしこの特性が今日設計されるのであれば、 値に対して適切な名前付きキーワードを代わりに使用するでしょう。

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

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

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

名前: update
対象: @media
値: none | slow | fast
型: discrete

updateメディア特性は、 一度レンダリングされた後にコンテンツの見た目を変更できる出力デバイスの能力を問い合わせるために使用されます。 次の値を受け入れます:

none
一度レンダリングされると、レイアウトはそれ以上更新できません。 例: 紙に印刷された文書。
slow
レイアウトは、CSSの通常の規則に従って動的に変化し得ますが、 出力デバイスは変化を滑らかなアニメーションとして知覚できるほど十分に速くレンダリングまたは表示できません。 例: E-ink画面、または極端に非力なデバイス。
fast
レイアウトは、CSSの通常の規則に従って動的に変化し得て、 出力デバイスは速度の点で特別に制約されているわけではないため、 CSS Animationsのような定期的に更新されるものを使用できます。 例: コンピュータ画面。
例えば、ページがリンクに対してホバー時にのみ下線を追加するようにスタイルしている場合、 印刷時には常に下線を表示したいかもしれません:
@media (update) {
  a { text-decoration: none; }
  a:hover, a:focus { text-decoration: underline; }
}
/* In non-updating UAs, the links get their default underline at all times. */
テスト

5.5. 表示技術の検出: environment-blending 特性

名前: environment-blending
対象: @media
値: opaque | additive | subtractive
型: discrete

environment-blendingメディア特性は、 著者が文書のスタイルを調整できるように、ユーザーの表示装置の特性を問い合わせるために使用されます。 著者は、魅力を高めたり可読性を改善したりするために、 表示技術に応じてページの視覚表現および/またはレイアウトを調整することを選ぶかもしれません。

次の値が妥当です:

opaque
文書は、従来のモニタや紙のような不透明媒体上でレンダリングされます。 黒は暗く、白は100%の光です。
additive
表示装置は、加法混色を用いてキャンバスの色と現実世界を混合します。 黒は完全に透明で、白は100%の光です。

例えば: 車のヘッドアップディスプレイ。

subtractive
表示装置は、減法混色を用いてキャンバスの色と現実世界を混合します。 白は完全に透明で、暗い色が最もコントラストを持ちます。

例えば: 浴室の鏡に埋め込まれたLCD表示。

subtractive値は必要ですか?

body { background-color: white; }
p { color: black; }

@media(environment-blending: additive) {
  body { background-color: black; }
  p { color: white; font-size: 16px; font-weight: 1000; }
}

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

6.1. 色深度: color 特性

名前: color
対象: @media
値: <integer>
型: range

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

color負の範囲ではfalseです。

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

異なる色成分が異なるビット数で表現される場合、最も小さい数が使用されます。

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

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

注: 記述された機能は、色の能力を表層的なレベルでしか記述できません。 color-gamutは、一般に著者の必要性とより関連します。 さらなる機能が必要な場合、 RFC2879 [RFC2879]は、 後の段階でサポートされる可能性がある、より具体的なメディア特性を提供します。

6.2. パレット式カラースクリーン: color-index 特性

名前: color-index
対象: @media
値: <integer>
型: range

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

color-index負の範囲ではfalseです。

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

6.3. モノクロスクリーン: monochrome 特性

名前: monochrome
対象: @media
値: <integer>
型: range

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

monochrome負の範囲ではfalseです。

例えば、スタイルシートがすべてのモノクロデバイスに適用されることを表すには次のようにします:
@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 特性

名前: color-gamut
対象: @media
値: srgb | p3 | rec2020
型: discrete

color-gamutメディア特性は、 UAおよび出力デバイスがサポートするおおよその色域を記述します。 すなわち、UAが指定された空間内の色を持つコンテンツを受け取った場合に、 出力デバイスが適切な色、または十分に近い色をレンダリングできることを意味します。

注: この問い合わせが近似範囲を用いるのには、いくつか理由があります。 第一に、表示ハードウェアには多くの差異があります。 例えば、あるデバイスが「Rec. 2020」をサポートすると主張しても、 実際にはフル色域のかなり低い範囲しかレンダリングしない場合があります。 第二に、デバイスがサポートする色域は多様であり、 それらをすべて列挙するのは煩雑です。 多くの場合、著者はディスプレイの正確な能力を知る必要はなく、 sRGBより良いか、 あるいはsRGBより著しく良いかを知れれば十分です。 そうすることで、著者は色プロファイルを付けた適切な画像をユーザーに提供できます。

srgb
UAおよび出力デバイスは、おおよそsRGB色域以上をサポートできます。

注: 色表示の大多数は、この種類の問い合わせに対してtrueを返せると予想されます。

p3
UAおよび出力デバイスは、Display P3 [Display-P3] Color Spaceで指定される色域以上を、おおよそサポートできます。

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

rec2020
UAおよび出力デバイスは、ITU-R Recommendation BT.2020 Color Spaceで指定される色域以上を、おおよそサポートできます。

注: 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

注: 上の表は色空間を完全に記述するのに十分な情報を含みませんが、 出力デバイスがそれぞれの色域をおおよそカバーするかどうかを判断するには十分です。 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)

テスト

6.5. ダイナミックレンジ: dynamic-range 特性

名前: dynamic-range
対象: @media
値: standard | high
型: discrete

dynamic-rangeは、 ユーザーエージェントおよび出力デバイスがサポートする最大輝度・色深度・コントラスト比の組み合わせを表します。

high
ユーザーエージェントおよび出力デバイスは、次のすべての基準を満たします:

注: 一部のデバイスは、高ダイナミックレンジ能力を持っていても常時オンではなく、 有効化が必要です (プログラムによる場合もあれば、ユーザーによる場合もあり、コンテンツに基づく場合もあります)。 このメディア特性は、そのようなモードが有効かどうかをテストするのではなく、 デバイスが高ダイナミックレンジの視覚表現に対応可能かどうかだけをテストします。

standard
この値は、任意の視覚デバイスに一致し、 視覚能力を欠くデバイスには一致しません。

注: このメディア特性の複数の値が同時に一致する場合があります: highに一致するユーザーエージェントは、 standardにも一致します。

6.5.1. 表示のコントラストと輝度の決定

ピーク輝度は、 LCD画面のような発光デバイスが生成できる最も明るい点がどれほど明るいか、 または紙やe-inkのような反射型デバイスの場合には、 光を最も吸収しない点を指します。

注: 一部のデバイスは、短時間のみ、または任意の時点で表面のごく一部においてのみ、 ピーク輝度を生成できます。

コントラスト比は、 システムが生成できる最も明るい色の輝度と最も暗い色の輝度の比です。

本仕様は、これらの特性を測定するための正確な方法を定義しません。 また、ユーザーエージェントが コントラスト比に関して何が高いと見なされるか、 およびピーク輝度に関して何が高いと見なされるかを決定できるようにします。 それでもなお、ユーザーエージェントは次の意図に従うよう試みなければなりません: 高いピーク輝度に対応するデバイスは、 「白より明るい」ハイライトを表示でき、 かつ深い黒を提示しつつ同時にそれを行える能力 (全体として明るいが白っぽく洗い流された画像ではなく) は、高いコントラスト比を示すものです。

注: dynamic-rangeおよびvideo-dynamic-rangeの判定はユーザーエージェントによって異なり得ますが、 おおむね信頼できる意味論を持つことが期待されます。

テスト

6.6. 表示上の反転色の検出: inverted-colors 特性

名前: inverted-colors
対象: @media
値: none | inverted
型: discrete

inverted-colorsメディア特性は、 コンテンツが通常どおり表示されているか、 あるいは色が反転されているかを示します。

注: これは、ユーザーエージェントまたは下層のオペレーティングシステムが、すべての色を強制的に反転したことを示すものであり、そうすることを要求するものではありません。 これは簡単なアクセシビリティ機能として提供されることがあり、 ユーザーが明るい背景に暗い文字(dark-on-light)と暗い背景に明るい文字(light-on-dark)を切り替えられるようにします。 しかし、画像が反転されたり、 影がハイライトになったりするなどの不快な副作用があり、 それによってコンテンツの可読性が低下します。

none
色は通常どおり表示されます。
inverted
表示領域内のすべてのピクセルが反転されています。

この値は、ユーザーエージェントが画像を保持するような、何らかのコンテンツ認識型反転を行った場合には一致してはなりません。

注: これは、このメディア特性の目的が、 すべてのピクセルを反転する非コンテンツ認識型アプローチの望ましくない影響を緩和できるようにすることだからです。 著者がコンテンツ認識型の場合にまで対策を講じてしまうと、 著者の対策とUAの対策が互いに相殺してしまう危険があります。

スタイルシートによっては、著者は画像や動画を反転したい場合があります:
@media (inverted-colors) {
  img:not(picture > img), picture, video {
    filter: invert(100%);
  }
}

著者はまた、CSS経由で注入された画像(背景など)を反転したり、 影を無効化したりすることもできます:

@media (inverted-colors) {
  * {
    text-shadow: none !important;
    box-shadow: none !important;
  }
}
テスト

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

「interaction」メディア特性は、ユーザーがページとどのように相互作用するかのさまざまな側面を反映します。

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

pointerhover 特性は「主」ポインティングデバイスの特性に関係し、 一方で 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:none'がtrueのデバイスでは:hover 疑似クラスが決して一致しないと仮定しないよう注意すべきですが、 ホバーに依存せずとも十分に利用できるレイアウトを設計すべきです。

アクセシビリティ上の理由から、ホバーをサポートするデバイスであっても、 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-pointerany-hoverメディア特性は、 pointerhoverメディア特性と同一ですが、 ユーザーが利用可能なすべてのポインティングデバイスの能力の和集合に対応します。 any-pointerの場合、 異なるポインティングデバイスが異なる特性を持つなら、複数の値が一致し得ます。

any-pointerany-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は、coarseにもfineにも一致するようになります。

(any-pointer: fine)がtrueになったという理由だけで 小さなクリックターゲットへ切り替えるのは適切ではありません。 それは、TVにおける期待と合致しない体験を提供してユーザーを驚かせるだけでなく、 かなり不便になり得ます: マウスはTVを操作する主要な手段ではないため、手の届かない場所にあったり、 ソファのクッションの下に隠れていたりするかもしれません…

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

名前: nav-controls
対象: @media
値: none | back
型: discrete

nav-controlsメディア特性は、 ユーザーエージェントがそのユーザーインターフェースの一部として 明らかに見つけやすいナビゲーションコントロールを提供しているかどうかを、 著者が知ることを可能にします。

注: 従来のブラウザは通常そのようなコントロールを提供しており、 Webページは通常それを気にする必要がありませんでしたが、 ある種の文脈では、Webアプリケーションは、いわゆるweb-viewを通じて実行され、 それらは必ずしもフル機能のユーザーインターフェースを備えていません。 そのため、著者にとっては、 ユーザーエージェントから何が提供されているかを知ることが有用であり、 見つけやすい代替手段を提供する必要があるかどうかを検討できます。

この文脈で、明らかに見つけやすいとは、 ボタンのようにユーザーインターフェース上で直接見えるコントロール、 またはそのデバイスのユーザーインターフェースとして典型的で、 ユーザーが容易に識別できる他の形態のコントロールを指します。 視覚的ユーザーインターフェースの場合、 通常は可視のコントロールになりますが、 音声または触覚ユーザーインターフェースの場合には別のものになり得ます。 重要なのは、これはキーボードショートカットやジェスチャーのことではないという点です。 これらがどれほど便利であっても、 (視覚UIの場合に)ユーザーエージェントを見ただけで明らかに見つけられるものではありません。

次の値が妥当です:

none
ユーザーエージェントは、明らかに見つけやすいナビゲーションコントロールを何も持たず、 とりわけ、ユーザーエージェントがページの直前のセッション履歴エントリへ戻ることを引き起こすものはありません。
back
ユーザーエージェントはナビゲーションコントロールを提供し、 少なくとも、ユーザーエージェントがページの直前のセッション履歴エントリへ戻ることを引き起こす 明らかに見つけやすいコントロール(通常は「戻る」ボタン)を含みます。
著者はWebアプリケーションに戻るボタンを含め、 ユーザーエージェントがすでにその機能を提供している場合には条件付きで非表示にできます:
@media (nav-controls: back) {
  #back-button {
    display: none;
  }
}

このメディア特性はブール文脈で使用できるため、 同じ例はより短い構文でも書けます:

@media (nav-controls) {
  #back-button {
    display: none;
  }
}

注: 理論上、両者は厳密に等価ではありません。 将来このメディア特性が拡張され、 back以外の新しい値が追加され、 backが一致しない場合でも一致する可能性があるためです。 その場合、nav-controls特性をブール文脈で使用するのは誤解を招く可能性があります。 しかし、戻るナビゲーションはおそらく最も基本的なナビゲーション操作であるため、 CSS Working Groupは、 明示的なナビゲーションコントロールがあるのに戻るボタンがないユーザーインターフェースは想定しておらず、 この問題は実際には発生しないと期待されます。

明らかに見つけやすいコントロールが有効かどうかは、 このメディア特性の評価に影響しません。

もしページに対して直前のセッション履歴エントリが存在しない場合、 「戻る」ボタンを備えたユーザーエージェントは、 実際に戻れる履歴が存在するまで操作できない無効状態へ切り替えることがあります。 そのような場合でも、@media (nav-controls: back) { … }は一致すると期待されます。

8. ビデオ接頭辞付き機能

一部のユーザーエージェント(多くのテレビを含む)は、ビデオとグラフィックを二つの 別個の「プレーン」(bi-plane)として、それぞれ異なる画面特性でレンダリングします。ビデオプレーンを 記述するために、ビデオ接頭辞付きの機能群が提供されています。

任意の bi-plane 実装は、次の機能についてビデオプレーンに基づく値を返さなければなりません: video-color-gamut; video-dynamic-range。 その他の全ての機能はグラフィックスプレーンに基づく値を返さなければなりません。

bi-plane でない実装は、ビデオ接頭辞付き機能と接頭辞なしの対応する機能に対して同じ値を返さなければなりません。

8.1. ビデオカラー表示品質: the video-color-gamut feature

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

The video-color-gamut メディア機能は、 ユーザーエージェントと出力機器のビデオプレーンがサポートするおおよその色域を記述します。 つまり、UA が指定された色空間の色を含むコンテンツを受け取った場合に、 出力機器で適切な色または十分に近いものをレンダリングできることを意味します。

値と色空間の定義は color-gamut と同じです。

8.2. ビデオダイナミックレンジ: the video-dynamic-range feature

Name: video-dynamic-range
For: @media
Value: standard | high
Type: discrete

video-dynamic-range は、 UA と出力機器のビデオプレーンがサポートする最大輝度、色深度、およびコントラスト比の組み合わせを表します。

サポートされる値は dynamic-range と同じです。

9. スクリプト用メディア機能

9.1. スクリプトサポート: the scripting feature

Name: scripting
For: @media
Value: none | initial-only | enabled
Type: discrete

The scripting メディア機能は、JavaScript のようなスクリプト言語が 現在の文書でサポートされているかどうかを照会するために使用されます。

enabled
ページのスクリプトがユーザーエージェントによってサポートされており、 現在の文書におけるスクリプトが文書の寿命の間有効であることを示します。
initial-only
ページのスクリプトがユーザーエージェントによってサポートされており、 現在の文書では初回読み込み時にスクリプトが有効であるが、その後はサポートされないことを示します。 例としては印刷用ページや、サーバー側でページをレンダリングしてほとんど静的なバージョンを送る プリレンダリングプロキシなどがあります。

initial-only と主張する前に満たすべき 明示的な最低閾値を設けるべきか、という問題があります。 閾値があれば著者は依存できる条件が分かりやすくなり、スクリプトをそれに合わせて調整できます。 一方で、その閾値を特定するのは困難です。閾値が低すぎると、著者が依存できるスクリプト機能が 実用的に制限されてしまう可能性がありますが、逆に高すぎると読み込み時にスクリプトを 有効にする UA を除外してしまうかもしれません。 たとえば保守的な定義は少なくともすべてのインラインスクリプトを実行し DOMContentLoaded イベントを 発火することを含むでしょう。しかし、多く(あるいはほとんどの)initial-only UA が外部スクリプト(asyncdefer を含む)をロードし load イベントを発火する場合、 それに制限してしまうのは現実的でないかもしれません。 他方で外部スクリプトのロードを必須にし load イベントの発火を要求すると、 Opera mini のようにタイムアウトやその他のヒューリスティクスにより外部スクリプトを 実行しない場合の UA を除外する可能性があります。 [Issue #503]

none
この文書に対して UA がスクリプトを実行しないことを示します; スクリプト言語をサポートしていないか、 現在の文書ではサポートが有効でないためです。

一部のユーザーエージェントはスクリプトをスクリプト単位やドメイン単位でオフにする機能を持ち、 特定の文書内で一部のスクリプトのみを実行できる場合があります。 scripting メディア機能は、どのスクリプトが許可されるかを 細かく検出することを許容しません。 このようなシナリオでは、同一ドメイン起源のスクリプトが実行可能であれば scripting メディア機能の値は enabledinitial-only にすべきであり、 そうでなければ none にするべきです。

注意: 将来の CSS レベルでは、このメディア機能を拡張して どのスクリプトが実行可能かをより細かく検出できるようになるかもしれません。

Tests

10. カスタムメディアクエリ

メディアクエリを使用する文書を設計する際、同じメディアクエリが複数の場所で使用されることがあり、 例えば複数の @import 文を修飾する場合があります。 同じメディアクエリを繰り返すことは編集上の危険を生みます; 著者が変更を行う場合、すべてのコピーを同じように編集しなければならず、 そうでなければ CSS に見つけにくいバグが生じます。

これを緩和するために、本仕様は カスタムメディアクエリ を定義する方法を定めています。 これは長く複雑なメディアクエリのための単純な名前の別名です。 このようにして、複数箇所で使用されるメディアクエリは カスタムメディアクエリ に割り当てられ、 どこでもそれを使用でき、メディアクエリの編集は一行だけ触れば済むようになります。

A custom media query@custom-media ルールで定義されます:

@custom-media = @custom-media <extension-name> [ <media-query-list> | true | false ] ;
Tests

<extension-name> はその後 メディア機能 で使えます。 それは 必ず ブール文脈 で使わなければなりません; 通常文脈や レンジ文脈 で使うと構文エラーです。 <media-query-list> が与えられた場合、 その カスタムメディアクエリ は、 それが表す <media-query-list> が true と評価されると true を返し、 そうでなければ false を返します。 true または false が与えられた場合、 その カスタムメディアクエリ はそれぞれ true または false と評価されます。

カスタムメディアクエリは論理的に評価され、文字列置換として扱われません。 例えば次のコードスニペットを見てください:
/* --modern targets modern devices that support color or hover */
@custom-media --modern (color), (hover);

@media (--modern) and (width > 1024px) {
  .a { color: green; }
}

これは次のように等価です:

@media ((color) or (hover)) and (width > 1024px) {
  .a { color: green; }
}

次のように処理するのは誤りです:

@media (color), (hover) and (width > 1024px) {
  .a { color: green; }
}

@custom-media ルールは他の カスタムメディアクエリ を参照することができます。 ただしループは禁じられており、カスタムメディアクエリ は自分自身または 間接的に自分を参照する別のカスタムメディアクエリで定義してはなりません。 そのような循環依存による定義の試みは、ループ内のすべてのカスタムメディアクエリが定義に失敗する原因となります。

同じ @custom-media ルールが同じ <extension-name> を宣言している場合、 真偽値は最後の宣言のみを基に決まり、同じ <extension-name> の以前の宣言は無視されます。

注意: エラー処理の観点から、未定義の メディア機能 は false と評価される メディア機能 とは異なります。 詳細は Media Queries 4 § 3.2 Error Handling を参照してください。

例えば、レスポンシブサイトがいくつかの場所で特定の ブレークポイントを使用している場合、それに合理的な名前をつけてエイリアスにできます:
@custom-media --narrow-window (max-width: 30em);

@media (--narrow-window) {
  /* narrow window styles */
}
@media (--narrow-window) and (script) {
  /* special styles for when script is allowed */
}
/* etc */

10.1. スクリプトベースのカスタムメディアクエリ

JS 用に名前と値のマップを定義します。 値は MediaQueryList オブジェクトかブール値にでき、そうした場合は上記と同様に扱われます。 また数値や文字列にすることもでき、その場合は通常の MQ として扱われ、 通常文脈やレンジ文脈の構文を使用できます。 例:
<script>
CSS.customMedia.set('--foo', 5);
</script>
<style>
@media (_foo: 5) { ... }
@media (_foo < 10) { ... }
</style>

11. CSSOM

The CSSCustomMediaRule インターフェイスは @custom-media ルールを表します。

typedef (MediaList or boolean) CustomMediaQuery;

[Exposed=Window]
interface CSSCustomMediaRule : CSSRule {
  readonly attribute CSSOMString name;
  readonly attribute CustomMediaQuery query;
};
name, 型は CSSOMString, 読み取り専用
<extension-name> を表す CSSOMString を返します。
query, 型は CustomMediaQuery, 読み取り専用
カスタムメディアクエリの値を表します。 返される CustomMediaQuery は次のいずれかになります:
  • A MediaList オブジェクト、 ルールが <media-query-list> で定義されていた場合。
  • 真のブール値 true、 ルールが値 true で定義されていた場合。
  • 偽のブール値 false、 ルールが値 false で定義されていた場合。
Tests

12. ユーザー設定に関するメディア機能

12.1. ページ上の動きの削減を検出する: the prefers-reduced-motion feature

Name: prefers-reduced-motion
For: @media
Value: no-preference | reduce
Type: discrete

The prefers-reduced-motion メディア機能は、 ユーザーがシステムに対して不要な動きの量を最小化するよう要請しているかを検出するために使われます。

no-preference
システムに対してユーザーが特に好みを示していないことを示します。このキーワード値は ブール文脈 では false と評価されます。
reduce
ユーザーが前庭感覚過敏や注意欠陥のある人にとって不快となる種類のモーションベースのアニメーションを 削除または置換するインターフェースを好むことをシステムに通知したことを示します。
Tests

12.2. ページ上の透明度低減の希望を検出する: the prefers-reduced-transparency feature

Name: prefers-reduced-transparency
For: @media
Value: no-preference | reduce
Type: discrete

The prefers-reduced-transparency メディア機能は、 ユーザーがシステムに対して透明または半透明のレイヤー効果の使用量を最小化するよう要請しているかを検出するために使われます。

no-preference
システムに対してユーザーが特に好みを示していないことを示します。このキーワード値は ブール文脈 では false と評価されます。
reduce
ユーザーが透明または半透明のレイヤー効果の使用を最小限にするインターフェースを好むことを示します。

これがパターン塗りや背景に関する好みと どのように相互作用するか、という問題があります。これらは透明性の問題ではありませんが、形状認識の妨げにもなります。

Tests

12.3. ページ上の要素からの色のコントラストを増減する希望を検出する: the prefers-contrast feature

Name: prefers-contrast
For: @media
Value: no-preference | less | more | custom
Type: discrete

The prefers-contrast メディア機能は、 ユーザーがページでより多いまたはより少ないコントラストを要求しているかを検出するために使われます。 例えば隣接する色のコントラスト比を調整したり、 要素の視覚的な浮き立ち具合を変える(境界線を調整するなど)ことで応答できます。

no-preference
システムに対してユーザーが特に好みを示していないことを示します。このキーワード値は ブール文脈 では false と評価されます。
less
ユーザーが低いレベルのコントラストを好むことをシステムに通知したことを示します。
more
ユーザーが高いレベルのコントラストを好むことをシステムに通知したことを示します。
custom
ユーザーが特定の色セットを使用したいと示しており、 その色により暗黙されるコントラストが more でも less でもないことを示します。

注意: この値は forced colors mode のユーザーが選んだパレットが 特に高コントラストでも低コントラストでもない場合に該当します。 詳細は § 12.4 Detecting Forced Colors Mode: the forced-colors feature を参照してください。

錆色の背景にシアンのテキストを指定するユーザーは、 輝度の点では必ずしも特に高コントラストや低コントラストを望んでいるわけではありませんが、 好みがないというわけでもありません。
注意: 著者は適切に prefers-contrast: more または prefers-contrast: less に応答することができます。

未指定の @media (prefers-contrast) {} を使って高コントラストスタイルを適用するのは誤りでありユーザーに不親切です。 なぜならそれは逆に低コントラストを要求したユーザーにも高コントラストを押し付けることになるからです。

しかし、視覚的混雑や色の複雑さを高・低どちらのコントラスト要望にも応じて削減することは一般的です。 その場合は @media (prefers-contrast) {}moreless を指定せずに使うことは適切であり、 背景画像を単色に置き換えたり、装飾的なグラデーションをオフにしたり、 ボーダーイメージやボックスシャドウをシンプルな実線ボーダーに置き換えたりすることができます。 prefers-contrast: custom—および prefers-contrast: moreprefers-contrast: lessブール文脈 で true と評価されるため、 こうした簡素化は forced colors mode のユーザーにも有益です。 これは望ましいことであり、forced colors mode により強制される限定パレットは ページの視覚的簡素化を必要とするからです。

コントラストを多くしたり少なくしたりする好みはさまざまな状況から生じます。 以下はいくつかの例です:

このリストは精緻化され拡張されるべきです。

Tests

12.4. 強制カラーモードの検出: the forced-colors feature

Name: forced-colors
For: @media
Value: none | active
Type: discrete
active
forced colors mode が有効であることを示します: ユーザーエージェントがユーザー選択の限定色パレットをページに強制します。 UA は著者に対して CSS のシステムカラーキーワードを通じてカラーパレットを提供します。 詳細は CSS Color Adjustment 1 § 3 Forced Color Palettes を参照してください。
これは必ずしもより高いコントラストを意味するわけではありません。 色はユーザーの好みに合わせて強制的に調整されていますが、 その好みはより低いコントラストやより高いコントラスト、あるいはどちらでもない配置である可能性があります。

さらに、forced-colors: active に加えて、 ユーザーが選んだ強制カラーパレットが特に高コントラストまたは低コントラストであると UA が判断できる場合には、 prefers-contrast: more または prefers-contrast: less のいずれかを マッチさせる必要があり、そうでなければ prefers-contrast: custom をマッチさせる必要があります。

同様に、ユーザーが選んだ強制カラーパレットが prefers-color-scheme で記述されるカラースキームの いずれかに当てはまる場合、その対応する値もマッチさせる必要があります。

none
Forced colors mode が有効でないことを示します。
forced colors mode が有効な場合、 著者に利用可能な色は システムカラー のみになります。 ユーザーエージェントはこの限定されたパレットを自動的に強制しますが、 著者は適切な場合にそれを検出するために forced-colors メディア機能を使って 別の使い方を選択することができます。
Tests

12.5. ライトまたはダークのカラースキームの希望を検出する: the prefers-color-scheme feature

Name: prefers-color-scheme
For: @media
Value: light | dark
Type: discrete

The prefers-color-scheme メディア機能は、 ページにライトまたはダークのカラーテーマを使用してほしいというユーザーの希望を反映します。

light
ユーザーがライトテーマ(明るい背景に暗いテキスト)を好むと表明しているか、 明確なアクティブな好みを表明していない(したがって「ウェブのデフォルト」であるライトを受け取る)ことを示します。
dark
ユーザーがダークテーマ(暗い背景に明るいテキスト)を好むと表明していることを示します。

注意: この機能の値は将来拡張される可能性があります (ライトテーマに対するより積極的な希望を表すためや、「セピア」のような他のカラースキームの希望を表すため)。 したがって、このメディア機能を使用する最も将来対応的な方法は否定を使うことです(例: (prefers-color-scheme: dark)(not (prefers-color-scheme: dark)))。 これにより新しい値が少なくともスタイルブロックのいずれかに入り込むことが保証されます。

ユーザーの希望の表現手段は様々です。OS によるシステム全体の設定か、 ユーザーエージェントが制御する設定である場合があります。

注意: ユーザーの設定は媒体によって変わることがあります。 例えば、発光スクリーン上ではダークテーマを好むが印刷時にはライトテーマを好むことがあります (インク節約や、背景にインクがあるよりも白紙にインクで印字された方が読みやすいため)。 UA はそのような差異を考慮し、prefers-color-scheme が媒体に適した設定を反映するように期待されます。

埋め込み SVG 文書で "Secure Animated" 埋め込みモードを使用して評価される場合、 優先カラースキームは埋め込み文書の埋め込みノード上の used color scheme の値を反映しなければなりません。

なぜそうするのか?

最外層の文書はユーザーの希望を直接取得する必要がありますが、 埋め込まれた文書が周囲の埋め込みコンテクストのカラースキームを使う方が、 周囲のコンテンツと一致して有益であることが多いです。

しかしこれは埋め込み文書へのコミュニケーションを可能にするため、外部リソースを読み込めずスクリプトを実行できない "Secure Animated" モードの SVG に限定されています。

iframe に対して同様にするかどうか、またその条件については Issue 7213 で議論中です。

この機能は他の prefers-* 機能と同様に、 かつてはアクティブな好みを表明していないことを示す no-preference 値がありました。 しかしユーザーエージェントはデフォルトの振る舞いを light と表現する方向に収束し、 no-preference は使われなくなりました。

将来の UA が "no preference" と "本当にライトを望む" を区別して公開したい場合は、 CSSWG に連絡して議論してください。

Tests

12.6. ページ読み込み時のデータ使用量削減の希望を検出する: the prefers-reduced-data feature

この機能は望ましくないフィンガープリンティングの 情報源となる可能性があり、低所得でデータ制限のある層に偏る懸念があります。 [Issue #10076]

Name: prefers-reduced-data
For: @media
Value: no-preference | reduce
Type: discrete

The prefers-reduced-data メディア機能は、 ページのレンダリングに際してより少ないデータを使う代替コンテンツを提供してほしいという ユーザーの希望を検出するために使われます。

no-preference
システムに対してユーザーが特に好みを示していないことを示します。このキーワード値は ブール文脈 では false と評価されます。
reduce
ユーザーが軽量な代替コンテンツを好むことを示します。

ユーザーが好みを表現する方法は様々です。OS の設定やユーザーエージェントの設定である場合があります。 ユーザーエージェントは Save-Data HTTP リクエストヘッダを設定する際に使うものと同じユーザー/システムの設定を これに基づいて考慮することができます(参照: Save-Data)。

注意: ユーザーエージェントはこの値の切り替えを扱う際に 自身の裁量でユーザー中心の判断を行うことが推奨されます。ページ読み込み後または読み込み中に切り替わった場合に どのように振る舞うかが例示されています。主な目標は不要なデータをダウンロードしないことかもしれません。 例えばページが既に高品質のアセットで読み込まれていてユーザーが reduced に切り替えた場合、 ページは直ちにドキュメントを更新せず、ユーザーの明示的なリロードを待つようにすることが考えられます。 逆にダウンロードに時間がかかっているページでユーザーが reduced に切り替えた場合は、 より小さなアセットのダウンロードに即座に切り替えて帯域を節約するのが適切かもしれません。 UA はこうした状況に対して適切と考えるロジックを実装する自由があり、またそのような状況が存在することを認識すべきです。

例えば、データ節約モードをオンにしたユーザーの好みを尊重して、 サイトが小さな画像を返すことができます。
.image {
  background-image: url("images/heavy.jpg");
}

@media (prefers-reduced-data: reduce) {
  /* Save-Data: On */
  .image {
    background-image: url("images/light.jpg");
  }
}
Tests

12.7. ユーザー設定の自動処理

ユーザーエージェントはユーザーが好みを示す明示的な設定を提供する場合や、 基盤となる OS の設定に基づいて決定する場合があります。 また、デバイスや環境に関する知識に基づいて自動的にユーザーの好みを推測することもあります。 そのような場合には、自動的に決定された好みをユーザーがオプトアウトまたは上書きできる方法を提供することが推奨されます。

例えば、ユーザーエージェントは 明示的に light または dark を選ばせることに加えて、 現在の時刻に基づいて自動的に決定するモードを持ち、日の入りから日出までを dark にする、といった挙動を取ることができます。
表示に使われるディスプレイの種類によっては、 周囲光レベルの変化が読書体験を困難または不快にすることがあります。

例えば液晶ディスプレイは明るい環境で色が飛んで読みにくくなることがあります。 そのような画面を持ち、周囲光センサーを備えたデバイスは、 条件が読みづらくなると検出した際に prefers-contrastmore に自動で切り替えることができます。 e-ink ディスプレイを搭載したデバイスでは同じ調整は適切ではありません。

反対に、発光スクリーン(LCD、OLED 等)を搭載し周囲光センサーを持つデバイスは、 暗い環境では過度のコントラストや明るさが気になるため prefers-contrastless に、 および prefers-color-schemedark に自動で切り替えることができます。

ユーザーエージェントは ネットワーク接続が無制限であるか従量制であるかに応じて、 prefers-reduced-data: no-preferencereduce を自動で切り替えることができます。

13. スクリプトによるユーザー設定の制御

Web サイトの作者が、ユーザーのシステム設定を尊重しつつもその設定を上書きできるようにしたいと考えることはよくあります。 これを支援するために、本仕様は § 12 User Preference Media Features をスクリプトで上書きする方法を PreferenceManager インターフェイスとして定義します。

この上書きにより、これらの設定に影響されるさまざまなプラットフォーム機能とプリファレンスを統合して扱うことが可能になります。

[Exposed=Window, SecureContext]
partial interface Navigator {
	[SameObject] readonly attribute PreferenceManager preferences;
};

13.1.1. preferences 属性

preferences 属性を取得する際は常に同じ PreferenceManager オブジェクトのインスタンスを返すものとします。

13.1.2. PreferenceManager インターフェイス

[Exposed=Window, SecureContext]
interface PreferenceManager {
	readonly attribute PreferenceObject colorScheme;
	readonly attribute PreferenceObject contrast;
	readonly attribute PreferenceObject reducedMotion;
	readonly attribute PreferenceObject reducedTransparency;
	readonly attribute PreferenceObject reducedData;
};

13.1.3. colorScheme 属性

The colorScheme 属性はサイトのカラースキームに関するユーザーの好みを上書きするために使われる PreferenceObject です。これは § 12.5 prefers-color-scheme をモデルとしています。

The get valid values for colorScheme algorithm, when invoked, must run these steps:
  1. Let validValues be a new empty sequence.

  2. Add light to validValues.

  3. Add dark to validValues.

  4. Return validValues.

もしこのプリファレンスのための上書きが設定されている場合:

13.1.4. contrast 属性

The contrast 属性はサイトのコントラストに関するユーザーの好みを上書きするために使われる PreferenceObject です。これは § 12.3 prefers-contrast をモデルとしています。

The get valid values for contrast algorithm, when invoked, must run these steps:
  1. Let validValues be a new empty sequence.

  2. Add more to validValues.

  3. Add less to validValues.

  4. Add no-preference to validValues.

  5. Return validValues.

もしこのプリファレンスのための上書きが設定されている場合:

注意: このプリファレンスは custom に設定できない点でメディア機能とは異なります。 これは § 12.4 forced-colors と密接に結びついているためです。

13.1.5. reducedMotion 属性

The reducedMotion attribute is a PreferenceObject used to override the user’s preference for reduced motion on the site. This is modeled after the § 12.1 prefers-reduced-motion.

The get valid values for reducedMotion algorithm, when invoked, must run these steps:
  1. Let validValues be a new empty sequence.

  2. Add reduce to validValues.

  3. Add no-preference to validValues.

  4. Return validValues.

もしこのプリファレンスのための上書きが設定されている場合:

注意: このプリファレンスに影響される UA 機能の例としては、スムーススクロールを無効にしたり、 marquee 要素を一時停止することなどが考えられます。

13.1.6. reducedTransparency 属性

The reducedTransparency attribute is a PreferenceObject used to override the user’s preference for reduced transparency on the site. This is modeled after the § 12.2 prefers-reduced-transparency.

The get valid values for reducedTransparency algorithm, when invoked, must run these steps:
  1. Let validValues be a new empty sequence.

  2. Add reduce to validValues.

  3. Add no-preference to validValues.

  4. Return validValues.

もしこのプリファレンスのための上書きが設定されている場合:

13.1.7. reducedData 属性

The reducedData attribute is a PreferenceObject used to override the user’s preference for reduced data usage on the site. This is modeled after the § 12.6 prefers-reduced-data.

The get valid values for reducedData algorithm, when invoked, must run these steps:
  1. Let validValues be a new empty sequence.

  2. Add reduce to validValues.

  3. Add no-preference to validValues.

  4. Return validValues.

もしこのプリファレンスのための上書きが設定されている場合:

13.1.8. PreferenceObject インターフェイス

[Exposed=Window, SecureContext]
interface PreferenceObject : EventTarget {
	readonly attribute DOMString? override;
	readonly attribute DOMString value;
	readonly attribute FrozenArray<DOMString> validValues;

	undefined clearOverride();
	Promise<undefined> requestOverride(DOMString? value);

	attribute EventHandler onchange;
};
13.1.8.1. override 属性
The override attribute, when accessed, must run these steps:
  1. Let preference be the preference object’s name.

  2. Let override be null.

  3. If an override for preference exists, set override to the value of that override.

  4. Return override.

13.1.8.2. value 属性
The value attribute, when accessed, must run these steps:
  1. Let preference be the preference object’s name.

  2. Let value be null.

  3. If an override for preference exists, set value to the value of that override.

  4. If value is null, set value to the UA value of the preference.

  5. Return value.

13.1.8.3. validValues 属性
The validValues attribute, when accessed, must run these steps:
  1. Let preference be the preference object’s name.
  2. Switch on preference:
    "colorScheme"
    Return the result of get valid values for colorScheme.
    "contrast"
    Return the result of get valid values for contrast.
    "reducedMotion"
    Return the result of get valid values for reducedMotion.
    "reducedTransparency"
    Return the result of get valid values for reducedTransparency.
    "reducedData"
    Return the result of get valid values for reducedData.
13.1.8.4. onchange イベントハンドラ属性

The onchange attribute is an event handler IDL attribute for the onchange event handler, whose event handler event type is change.

Whenever the user agent is aware that the state of a PreferenceObject instance value has changed, it runs the PreferenceObject update steps:
  1. Let preference be the PreferenceObject object that value is associated with.

  2. If this’s relevant global object is a Window object, then:

    1. Let document be preference’s relevant global object’s associated Document.

    2. If document is null or document is not fully active, terminate this algorithm.

  3. Fire an event named change at preference.

13.1.8.5. requestOverride() メソッド
The requestOverride(value) method, when invoked, must run these steps:
  1. Let result be a new promise.

  2. Let allowed be false.

  3. Set allowed to the result of executing a UA defined algorithm for deciding whether the request is allowed.

  4. If allowed is false, return a promise rejected with a "NotAllowedError" DOMException.

  5. Let value be the method’s argument.

  6. Let result be a new promise.

  7. If value is null or the empty string:

    1. Run clearOverride.

    2. Resolve and return result.

  8. Let currentValue be the preference object’s value.

  9. Let validValues be null.

  10. Switch on preference:

    "colorScheme"
    Set validValues to the result of get valid values for colorScheme.
    "contrast"
    Set validValues to the result of get valid values for contrast.
    "reducedMotion"
    Set validValues to the result of get valid values for reducedMotion.
    "reducedTransparency"
    Set validValues to the result of get valid values for reducedTransparency.
    "reducedData"
    Set validValues to the result of get valid values for reducedData.
  11. If value is not in validValues:

    1. Reject result with a "TypeError" DOMException.

    2. Return result.

  12. Let previousOverride be null.

  13. If an override for preference exists, set previousOverride to the value of that override.

  14. If value is different from previousOverride:

    1. Set the preference override for preference to value.

  15. If previousOverride is null, then:

    1. If value is the same as currentValue, then:

      1. Fire an event named change at this.

  16. Resolve and return result.

このアルゴリズムは、実際にプリファレンス上書きを設定することが正確に何を行うのかについて より詳細が必要です。

ここで TypeError は正しいでしょうか?

注意: `change` イベントは計算された値が変更されたときに発火しますが、 新しい上書きが設定されたときは値が変わっていなくても発火されます。

13.1.8.6. clearOverride() メソッド
The clearOverride() method, when invoked, must run these steps:
  1. Let preference be the preference object’s name.

  2. Let override be null.

  3. If an override for preference exists, set override to the value of that override.

  4. If override is null, then return.

  5. Clear the override for preference.

  6. Let newValue be the preference object’s value.

  7. If newValue is equal to override, then:

  8. Fire an event named change at this.

注意: `change` イベントは計算された値が変更されたときに発火しますが、 上書きが解除されたときは値が変わっていなくても発火されます。

付録 A: 廃止予定のメディア機能

以下の media features廃止予定 です。 後方互換性のために残されていますが、新しいスタイルシートには適していません。著者はこれらを使用してはなりません。 ユーザーエージェントは仕様どおりにこれらをサポートしなければなりません。

ビューポート(または印刷メディアのページボックス)のサイズを問合せるには、 widthheight、および aspect-ratiomedia features を使うべきであり、 物理デバイスの大きさを参照する device-widthdevice-height、 および device-aspect-ratio は使うべきではありません。 これらはレイアウト対象の文書に利用可能な空間とは無関係に、デバイスの物理的な大きさを参照します。 device-* の media features はしばしばモバイルデバイスの検出のために代用として使われますが、 代わりに著者は意図するスタイル対象により適切に対応する 他の media features を使うべきです。

device-width

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

The device-width media feature describes the width of the rendering surface of the output device. For continuous media, this is the width of the Web-exposed screen area. For paged media, this is the width of the page sheet size.

device-width is false in the negative range.

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

上の例では、スタイルシートは長さが 800px 未満のスクリーンにのみ適用されます。 px 単位は論理的な種類のものであり、 Units セクションで説明される通りです。

注意: デバイスが縦向きや横向きなど複数の向きで使える場合、 device-* メディア機能は現在の向きを反映します。

device-height

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

The device-height media feature describes the height of the rendering surface of the output device. For continuous media, this is the height of the Web-exposed screen area. For paged media, this is the height of the page sheet size.

device-height is false in the negative range.

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

上の例では、スタイルシートは垂直ピクセルが 600 より大きいスクリーンにのみ適用されます。 px 単位の定義は他の CSS 部分と同じです。

device-aspect-ratio

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

The device-aspect-ratio media feature is defined as the ratio of the value of the device-width media feature to the value of the device-height media feature.

例えば、正方ピクセルを持つスクリーンが横 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) { … }
Tests

変更点

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

2021 年 12 月 18 日作業草案以降の変更

編集上の変更や小さな明確化に加え、次の変更と追加が 2021-12-18 Working Draft 以降にこのモジュールへ加えられました:

2020 年 07 月 31 日作業草案以降の変更

編集上の変更や小さな明確化に加え、次の変更と追加が 2020-07-31 Working Draft 以降にこのモジュールへ加えられました:

2020 年 07 月 15 日作業草案以降の変更

次の追加が 2020-07-15 Working Draft 以降このモジュールへ行われました:

2020 年 06 月 03 日作業草案以降の変更

次の追加が 2020-06-03 Working Draft 以降このモジュールへ行われました:

2020 年 03 月 18 日作業草案以降の変更

次の追加が 2020-03-18 Working Draft 以降このモジュールへ行われました:

First Public Working Draft 以降の変更

次の追加が 2020-03-03 First Public Working Draft 以降このモジュールへ行われました:

FPWD のための変更(Media Queries Level 4 以降)

次の追加が First Public Working Draft を作成するために行われました(Media Queries Level 4 以降):

Media Queries Level 4 以降の変更

次の追加が Media Queries Level 4 以降このモジュールへ行われました:

謝辞

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

この仕様は Cascading Style Sheets ワーキンググループの成果物です。

以下からのコメント: Adam Argyle, Amelia Bellamy-Royds, Andreas Lind, Andres Galante, Arve Bersvendsen, Björn Höhrmann, Chen Hui Jing, Chris Lilley, Chris Rebert, Christian Biesinger, Christoph Päper, Elika J. Etemad (fantasai), Emilio Cobos Álvarez, François Remy, Frédéric Wang, Fuqiao Xue, Greg Whitworth, Ian Pouncey, James Craig, Jay Harris, Jinfeng Ma, Kivi Shapiro, L. David Baron, Masataka Yakura, Matt Giuca, Melinda Grant, Michael Smith, Nicholas C. Zakas Patrick H. Lauke, Philipp Hoschka, Rick Byers, Rijk van Geijtenbeek, Rik Cabanier, Roger Gimson, Rossen Atanassov, Sam Sneddon, Sigurd Lerstad, Simon Kissane, Simon Pieters, Stephen Chenney, Steven Pemberton, Susan Lesch, Tantek Çelik, Thomas Wisniewski, Vi Nguyen, Xidorn Quan, Yves Lafon, akklesed, and 張俊芝 によって本仕様は改善されました。

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

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

この節は 未完成

多くのメディア機能はデバイスの表示や操作特性に基づいてユーザーをフィンガープリントすることを可能にします:

environment-blending 機能は特に懸念されます。 なぜならそれはユーザーがどこにいるかを示唆する可能性があり、限られたデバイス群に存在する傾向があるためです。 珍しいデバイス特性はフィンガープリンティング上強力です。なぜならそれがデバイスをより小さな集合に分割するのに役立つからです。

OS の設定を反映するメディア機能は、そうした設定がユーザー自身の特性と相関するためフィンガープリンティングのリスクとなります:

上記メディアクエリに依存するプロパティはスクリプトからアクセスされ得ます:

ユーザーエージェントはトラッキングへの感度が示された場合にこれらのメディア機能を無効化することができます。 または、ページ内で組み合わせられる特徴の数を制限してフィンガープリンティングの力を低減することもできます。

The PreferenceManager object allows querying some user-preference media features. This is not a privacy leak, as that information is already trivially available by using media features themselves.

The PreferenceManager object also allows overriding these user-preference media features; this is also neither a privacy nor accessibility regression, as the media features were already ignorable by simply not querying them.

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

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

この節は 未完成

display-mode メディア機能は、オリジンにユーザーのローカル環境の側面へアクセスを与えます。 特にアプリケーションマニフェストの manifestdisplay メンバーと組み合わせて使われる場合、オリジンはユーザーエージェントのネイティブ UI をある程度制御することができます。 CSS メディアクエリを通じてスクリプトはウェブアプリケーションの表示モードを知ることができます。 攻撃者は、そのような場合に、アプリケーションがフルスクリーンで表示されていることを悪用して 他のアプリケーションのユーザーインターフェイスを模倣する可能性があります。

適合性

文書上の慣例

適合性要件は、記述的な主張と RFC 2119 の用語の組み合わせで表現されています。規範的な本文中に現れるキーワード “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, および “OPTIONAL” は RFC 2119 に従って解釈されるものとします。 ただし、可読性のために、これらの語は本仕様書ではすべて大文字で表記されているわけではありません。

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

本仕様の例は “for example” という語で導入されるか、あるいは class="example" で規範的本文から区別されます。次のように:

これは参考情報の例です。

参考情報的な注記は “Note” という語で始まり、規範的本文から class="note" で区別されます。次のように:

注: これは参考情報の注記です。

助言(Advisements)は、特別な注意を喚起するために様式化された規範的節であり、他の規範的本文と区別するために <strong class="advisement"> で囲まれます。たとえば: UA はアクセシブルな代替手段を提供しなければなりません。

Tests

この仕様の内容に関連するテストは、このような "Tests" ブロックに記録されることがあります。 こうしたブロックはすべて非規範的です。


適合クラス

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

style sheet
A CSS style sheet.
renderer
A UA that interprets the semantics of a style sheet and renders documents that use them.
authoring tool
A UA that writes a style sheet.

スタイルシートが本仕様に適合しているとは、このモジュールで定義された構文を使用するすべての記述が、一般的な CSS 文法および本モジュールで定義された各機能の個別の文法に従って有効であることを意味します。

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

作成ツール(authoring tool)が本仕様に適合するためには、一般的な CSS 文法および本モジュールの各機能の個別文法に従って構文的に正しいスタイルシートを書くこと、ならびに本モジュールで記述されているスタイルシートに対するその他のすべての適合条件を満たすことが必要です。

部分的な実装

著者がフォワード互換の解析ルールを利用してフォールバック値を割り当てられるようにするため、CSS レンダラは、使用可能なサポートレベルを持たない at-rule、プロパティ、プロパティ値、キーワード、その他の構文構成を無効として扱い(そして適切に 無視 )しなければなりません。特に、UA はサポートされていないコンポーネント値を選択的に無視してサポートされる値だけを単一の複数値プロパティ宣言内で尊重してはなりません: いずれかの値が無効とみなされる場合(サポートされていない値は無効とされねばなりません)、CSS はその宣言全体を無視することを要求します。

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

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

非実験的実装

仕様が Candidate Recommendation の段階に到達すると、非実験的実装が可能になり、実装者は CR レベルの機能で仕様に従って正しく実装されていることを示せるものについてはプレフィックスなしの実装を公開するべきです。

CSS の実装間での相互運用性を確立および維持するため、CSS ワーキンググループは非実験的な CSS レンダラに対して、プレフィックスなしの実装を公開する前に実装報告(必要であればその実装報告に使用したテストケースも)を W3C に提出するよう要請します。W3C に提出されたテストケースは CSS ワーキンググループによるレビューと修正の対象となります。

テストケースおよび実装報告の提出に関する詳細は、CSS ワーキンググループのウェブサイト https://www.w3.org/Style/CSS/Test/ にあります。 質問は public-css-testsuite@w3.org メーリングリスト宛に行ってください。

索引

本仕様で定義された用語

参照で定義された用語

参考文献

規範的参照

[APPMANIFEST]
Marcos Caceres; et al. Web Application Manifest. 29 January 2026. WD. URL: https://www.w3.org/TR/appmanifest/
[COLORIMETRY]
Colorimetry, Fourth Edition. 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 Cascading and Inheritance Level 5. 13 January 2022. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COLOR-ADJUST-1]
Elika Etemad; et al. CSS Color Adjustment Module Level 1. 16 December 2025. CR. URL: https://www.w3.org/TR/css-color-adjust-1/
[CSS-CONDITIONAL-3]
Chris Lilley; David Baron; Elika Etemad. CSS Conditional Rules Module Level 3. 15 August 2024. CRD. URL: https://www.w3.org/TR/css-conditional-3/
[CSS-EXTENSIONS-1]
CSS Extensions Module Level 1. Editor's Draft. URL: https://drafts.csswg.org/css-extensions-1/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS Syntax Module Level 3. 24 December 2021. CRD. URL: https://www.w3.org/TR/css-syntax-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 12 March 2024. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 30 July 2019. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 7 June 2011. REC. URL: https://www.w3.org/TR/CSS2/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 26 August 2021. WD. URL: https://www.w3.org/TR/cssom-1/
[CSSOM-VIEW-1]
Simon Fraser; Emilio Cobos Álvarez. CSSOM View Module. 16 September 2025. WD. URL: https://www.w3.org/TR/cssom-view-1/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[FULLSCREEN]
Philip Jägenstedt. Fullscreen API Standard. Living Standard. URL: https://fullscreen.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[MEDIAQUERIES-3]
Florian Rivoal. Media Queries Level 3. 21 May 2024. REC. URL: https://www.w3.org/TR/mediaqueries-3/
[MEDIAQUERIES-4]
Florian Rivoal; Tab Atkins Jr.. Media Queries Level 4. 25 December 2021. CRD. URL: https://www.w3.org/TR/mediaqueries-4/
[MEDIAQUERIES-5]
Dean Jackson; et al. Media Queries Level 5. 18 December 2021. WD. URL: https://www.w3.org/TR/mediaqueries-5/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SAVEDATA]
Save Data API. Editor's Draft. URL: https://wicg.github.io/savedata/
[USER-PREFERENCE-MEDIA-FEATURES-HEADERS]
User Preference Media Features Client Hints Headers. Draft Community Group Report. URL: https://wicg.github.io/user-preference-media-features-headers/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

参考(Informative References)

[CSS-COLOR-4]
Chris Lilley; Tab Atkins Jr.; Lea Verou. CSS Color Module Level 4. 24 April 2025. CRD. URL: https://www.w3.org/TR/css-color-4/
[CSS-FONTS-4]
Chris Lilley. CSS Fonts Module Level 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 Specification. 27 March 2018. REC. URL: https://www.w3.org/TR/html401/
[ITU-R-BT-2020-2]
Parameter values for ultra-high definition television systems for production and international programme exchange. October 2015. URL: https://www.itu.int/rec/R-REC-BT.2020/en
[RFC2879]
G. Klyne; L. McIntyre. Content Feature Schema for Internet Fax (V2). August 2000. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc2879
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 22 January 2026. WD. URL: https://www.w3.org/TR/selectors-4/
[SRGB]
Multimedia systems and equipment - Colour measurement and management - Part 2-1: Colour management - Default RGB colour space - sRGB. URL: https://webstore.iec.ch/publication/6169
[XML-STYLESHEET]
James Clark; Simon Pieters; Henry Thompson. Associating Style Sheets with XML documents 1.0 (Second Edition). 28 October 2010. REC. URL: https://www.w3.org/TR/xml-stylesheet/

プロパティ索引

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

@media ディスクリプタ

Name Value Initial Type
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
display-mode fullscreen | standalone | minimal-ui | browser | picture-in-picture discrete
dynamic-range standard | high discrete
environment-blending opaque | additive | subtractive discrete
forced-colors none | active discrete
grid <mq-boolean> discrete
height <length> range
horizontal-viewport-segments <integer> range
hover none | hover discrete
inverted-colors none | inverted discrete
monochrome <integer> range
nav-controls none | back discrete
orientation portrait | landscape discrete
overflow-block none | scroll | paged discrete
overflow-inline none | scroll discrete
pointer none | coarse | fine discrete
prefers-color-scheme light | dark discrete
prefers-contrast no-preference | less | more | custom discrete
prefers-reduced-data no-preference | reduce discrete
prefers-reduced-motion no-preference | reduce discrete
prefers-reduced-transparency no-preference | reduce discrete
resolution <resolution> | infinite range
scan interlace | progressive discrete
scripting none | initial-only | enabled discrete
update none | slow | fast discrete
vertical-viewport-segments <integer> range
video-color-gamut srgb | p3 | rec2020 discrete
video-dynamic-range standard | high discrete
width <length> range

IDL 索引

typedef (MediaList or boolean) CustomMediaQuery;

[Exposed=Window]
interface CSSCustomMediaRule : CSSRule {
  readonly attribute CSSOMString name;
  readonly attribute CustomMediaQuery query;
};

[Exposed=Window, SecureContext]
partial interface Navigator {
	[SameObject] readonly attribute PreferenceManager preferences;
};

[Exposed=Window, SecureContext]
interface PreferenceManager {
	readonly attribute PreferenceObject colorScheme;
	readonly attribute PreferenceObject contrast;
	readonly attribute PreferenceObject reducedMotion;
	readonly attribute PreferenceObject reducedTransparency;
	readonly attribute PreferenceObject reducedData;
};

[Exposed=Window, SecureContext]
interface PreferenceObject : EventTarget {
	readonly attribute DOMString? override;
	readonly attribute DOMString value;
	readonly attribute FrozenArray<DOMString> validValues;

	undefined clearOverride();
	Promise<undefined> requestOverride(DOMString? value);

	attribute EventHandler onchange;
};

問題索引

subtractive 値は必要でしょうか?
UA が initial-only を主張する前に満たすべき明示的な最低閾値を設けるべきでしょうか? そうした閾値があれば、著者は何に依存できるかが明確になり、 スクリプトをそれに合わせて調整できます。 一方で、その閾値を特定するのは困難です: もし閾値が低すぎると、 著者が依存できるスクリプト機能は実用的に制約されてしまう可能性があり、 実際の UA が潜在的にもっと多くをサポートしている場合でもそうなりえます。 逆に閾値を高く設定しようとすると、読み込み時にスクリプトをサポートしている UA を除外してしまう恐れがあります。 例えば保守的な定義では少なくともすべてのインラインスクリプトを実行し DOMContentLoaded イベントを発火することを含むでしょう。 しかし、大多数(あるいはほとんどすべて)の initial-only UA が 外部スクリプト(asyncdefer を含む)もロードし load イベントを発火するのであれば、著者がそれに自らを制限するのは有益とは言えません。 他方で、外部スクリプトのロードと load イベントの発火を必須にすると、 Opera mini のような UA を排除してしまう可能性があり、 そうした UA は通常はスクリプトを実行しますが、タイムアウトやその他のヒューリスティクスに基づいて実行しない決定をする場合があるからです。 [Issue #503]
JS 用に名前から値へのマップを定義してください。 値は MediaQueryList オブジェクトかブール値のいずれかにでき、 その場合は上記と同一に扱われます。 また数値や文字列にすることもでき、その場合は通常の MQ として扱われ、 通常文脈やレンジ文脈の構文を使用できます。 例えば:
<script>
CSS.customMedia.set('--foo', 5);
</script>
<style>
@media (_foo: 5) { ... }
@media (_foo < 10) { ... }
</style>
パターン塗りや背景に関する好み(例えば)とはどのように相互作用しますか? それらは透明性に関するものではありませんが、形状認識を妨げることもあります。
この一覧は精査し拡張されるべきです。
この機能は望ましくないフィンガープリンティングの原因となる可能性があり、 データに制限のある低所得層へ偏る懸念があります。 [Issue #10076]
このアルゴリズムは、プリファレンス上書きを設定することが具体的に何を行うのかについて さらに詳述する必要があります。
ここで TypeError は正しいでしょうか?
この節は 未完成 です
この節は 未完成 です