1. 概論
各CSSプロパティの値の定義フィールドは、キーワード、データ型(これは<と>の間に出現する)、およびこれらをどのように組み合わせることができるかの情報を含めることができる。より具体的なデータ型(たとえば、
1.1. モジュール間の相互関係
このモジュールは、[CSS2]の1.4.2.1節、4.3節、A.2節におけるデータ型定義を置換し、拡張する。
2. 値の定義構文
ここで説明される値の定義構文は、CSSプロパティの妥当な値(およびCSSの他の多くの部分の妥当な構文)の集合を定義するために使用される。そのように説明された値は、1つ以上のコンポーネントを持つことができる。
2.1. コンポーネント値型
コンポーネント値の型は、複数の方法で指定される:
-
<と>の間に出現する基本データ型(たとえば、
、 など)。数値データ型の場合、この型表記は、後述の角括弧で囲まれた範囲表記を用いて任意の範囲の制限に注釈付けすることができる。 -
プロパティ値の範囲。これは同じ名前を持つプロパティと同じ値のパターンを表す。これらは、 <と>との間に一重引用符で囲まれたプロパティ名として記述される。たとえば、<'border-width'>、<'background-attachment'>など。
これらの型には、inheritのようなCSS全域キーワードは含まれない。それに加えて、プロパティの値の文法がカンマ区切りの繰り返しである場合、対応する型にはトップレベルのカンマ区切りのリスト乗数は含まれない。(たとえば、 pairingという名前のプロパティが[
?]#として定義される場合、<'pairing'>は[ ?]と同じであり、[ ?]#ではない。)\ 乗数を削除する理由?
トップレベルの乗数は、これらの値タイプから切り離される。これは、トップレベルのカンマ区切りの繰り返しが主に調整リストプロパティに使用されるためである。また、短縮記法がこのようなプロパティをいくつか組み合わせる場合、独自のカンマ区切りの繰り返しを構築できるように、乗算されない文法が必要になる。
この特別な処理がなければ、そのようなすべての完全な記法は、内部値のためだけにアドホックな生成で定義されなければならず、文法を全体的に理解するのが難しくなる。
-
関数表記とその引数。これらは、<と>との間に、関数の名前とそれに続く空の括弧のペアで記述される。たとえば、
のようになり、対応する名前の関数表記を参照する。 -
その他の非終端。これらは、
のように、<と>との間の非終端の名前として記述される。 と<'border-width'>との間の区別に注意する。後者はborder-widthのプロパティの文法を表し、前者は他の明示的な拡張を必要とする。非終端の定義は、仕様で非終端が最初に出現した近くに典型的には位置する。
また、一部のプロパティ値の定義は、リテラルにスラッシュ(/)、カンマ(,)および/または丸括弧を含む。これらは、対応するトークンを表す。“+”のような、コンポーネント値で出現してもよいその他のキーワードは、一重引用符で囲まれて書かなければならない。
文法においてオプションの項を区切るために使用する場合、状況次第で文法で指定されるコンマは、暗黙的に省略可能である。プロパティまたは他のCSS値におけるトップレベルリスト、または関数の引数リストの中で、文法で指定されるコンマは次の場合に省略されなければならない:
- コンマに先行するすべての項目が省略されている
- コンマに後続するすべての項目が省略されている
- コンマの間の項目の省略により、複数のコンマが(空白/コメントを無視して)隣接する
example ( first?, second?, third?)
文法によると、example(first, second, third)は妥当であり、example(first, second)、example(first, third)、example(second)も同様である。しかし、example(first, , third)は、コンマの1つがもはや2つのオプションを分けないので、無効である。同様に、example(,second)およびexample(first,)は無効である。コンマは依然としてオプションを実際に分けることを要求されるため、example(first second)もまた無効である。
コンマが暗黙的に省略可能でなかった場合、省略できる引数を厳密に表記するための文法はより複雑になり、その機能の単純性も損なわれることになるだろう。
すべてのCSSプロパティはまた、プロパティ値の単独コンポーネントとしてCSS全域キーワード値を受け入れる。読みやすさためにプロパティ値の構文定義で明示的に記載されない。たとえば、CSS Cascading and Inheritance Level 3のもとでのborder-colorの完全な値の定義は、(
と記載されるが)
である。
注:一般に、同一宣言中の他のコンポーネント値を持つこれらのキーワードを組み合わせは、無効な宣言を意味する。たとえば、background: url(corner.png) no-repeat, inherit;は無効である。
2.2. コンポーネント値の結合子
コンポーネント値は、次のようにプロパティ値に配置することができる:
- 値のすべてを意味する並置コンポーネントは、与えられた順序で出現しなければならない。
- 二重アンパサンド(&&)は2つ以上のコンポーネントを区切る。すべてが指定通りの順序で出現しなければならない。
- 二重縦線(||)は2つ以上の選択肢を区切る:任意の順序で、少なくとも1つ以上が出現しなければならない。
- 縦線(|)は2つ以上の選択肢を区切る:厳密にそのうちの1つが出現しなければならない。
- 角括弧([ ]])はグループ化を示す。
並置は二重アンパサンドよりも強く、二重アンパサンドは二重縦線よりも強く、二重縦線は縦線よりも強い。したがって、次の2行は等価である:
a b | c || d && e f[ a b] |[ c ||[ d &&[ e f]]]
再並び替え可能な結合子(||, &&)に対して、文法の順序付けは重要でない。同じグループにおける成分は、任意の順序で配置されてもよい。したがって、次の2行は等価である:
a || b || c b || a || c
注: 結合子は結合性がないため、グループ化は重要である。たとえば、a || b || cとa || [ b || c ]は別個の文法である。最初の文法はb a cのような値を許可するが、2番目の文法は許可しない。
2.3. コンポーネント値の量指定子
すべての型、キーワード、角括弧グループは、次の量指定子を付けてもよい:
- アスタリスク(*)は、直前の型、ワード、グループの0回以上の出現を示す。
- 正符号(+)は、直前の型、ワード、グループの1回以上の出現を示す。
- 疑問符(?)は、直前のデータ型、ワード、グループが任意である(0回もしくは1回出現する)ことを示す。
- 波括弧における単独の数字({A})は、直前のデータ型、ワード、グループがA回の出現を示す。
- 波括弧におけるコンマ区切りの数字の組({A,B})は、直前のデータ型、ワード、グループのA回以上B回以下の出現を示す。繰り返し数の上限を持たない、少なくともAの繰り返しが存在しなければならないことを示すために、Bは省略されてもよい({A,})。
- ハッシュマーク(#)は、コンマトークンによって区切られる(これは空白文字および/またはコメントによって囲まれてもよい)、先行する型、ワード、またはグループが1回以上出現することを示す。正確に何回繰り返しが発生するかを示すために、
#{1,4} のように、上記の波括弧の形式が続いてもよい。 - グループの後の感嘆符(!)は、そのグループが必須であり、1つ以上の値を生成しなければならないことを示す。たとえグループ内の各項目の文法が全体のコンテンツに省略を許すとしても、少なくとも1つの成分値は省略されてはならない。
+および#乗数は、+#として積み重ねてもよく、同様に、#および? 乗数は、#?として積み重ねてもよい。これらのスタックはそれぞれ、前の乗数の結果に適用された後の乗数を表す。(これらの同じスタックはグループ化を用いて表現できるが、複雑な文法では、これにより括弧の数が読みにくくなる可能性がある。)
繰り返しのコンポーネントの値(*、+、または#で示される)の場合、ユーザーエージェントは、少なくとも20回の繰り返しのコンポーネントをサポートしなければならない。プロパティ値が繰り返しでサポートされている数よりも多く含まれる場合、それが無効であったかのように、宣言は無視されなければならない。
2.4. 結合子および量指定子のパターン
特定の数および順序で複数の独立な成分値を組み合わせるための共通の方法の小さな集合がある。具体的に、著者は、成分値の集合から、文法で指定される順序か任意の順序のいずれかで、0個以上、1つ以上、すべてを選択しなければならないことを表現したいことは、一般的である。
このすべては、結合子および量指定子の単純なパターンを利用して容易に表記することができる:
指定順 | 任意の順 | |
---|---|---|
0個以上 | A? B? C?
| A? || B? || C?
|
1つ以上 |
| A || B || C
|
すべて | A B C
| A && B && C
|
"指定順"のものは、並記ですべての変形である一方で、"任意の順"のものは、結合子を用いて表記されることに注意する。
2.5. コンポーネント値と空白
別の方法で指定されない限り、空白および/またはコメントは、上記の結合子および量指定子を使用して結合されるコンポーネントの前、後および/または間に出現してもよい。
注:多くの場合、空白は実際にはトークン同士を区別するために、コンポーネント間に必要とされる。たとえば、値1em2emは、数字1と無効な単位識別子em2emとともに、単一の
2.6. プロパティ値の例
以下の対応する値の定義のフィールドを持つプロパティの例をいくつか示す。
プロパティ | 値の定義フィールド | 値の例 |
---|---|---|
orphans | 3 | |
text-align | left | right | center | justify | center |
padding-top | 5% | |
outline-color | #fefefe | |
text-decoration | none | underline || overline || line-through || blink | overline underline |
font-family | [ | "Gill Sans", Futura, sans-serif |
border-width | [ | 2px medium 4px |
box-shadow | [ inset? && | 3px 3px rgba(50%, 50%, 50%, 50%), lemonchiffon 0 0 4px inset |
3. テキストデータ型
テキストデータ型には、文字列(
一般的に
注:
3.1. 定義済みキーワード
値の定義フィールドにおいて、事前に定義された意味を持つキーワードはリテラルに出現する。キーワードは、識別子であり、かつASCII大文字・小文字不区別で解釈される(すなわち、[a-z][A-Z]と等価である)。
Value : collapse | separate
その使用例:
table{ border-collapse : separate}
3.1.1. CSS全域キーワード:initial、inheritおよびunset
上記で定義されるような、すべてのプロパティはすべてのCSSプロパティに共通の計算値を表すCSS全域キーワードを受け入れる。これらのキーワードは、CSS Cascading and Inheritance Moduleで規範的に定義される。
他の仕様は、追加でCSS全域キーワードを定義することができる。
3.2. 著者定義識別子: 型
一部のプロパティはコンポーネント値として著者定義識別子を受け入れる。この汎用データ型は、
CSS全域キーワードは妥当な
プロパティ値において位置的にあいまいなキーワードを構文解析する場合、
注:
3.3. 引用符付き文字列: 型
文字列は
"\" "
または"\22"
のように)エスケープされない限り、二重引用符の内部に出現することはできない。一重引用符も同様である('\' '
または'\27'
)。
content : "this is a 'string'." ; content : "this is a \" string\"." ; content : 'this is a "string".' ; content : 'this is a \' string\'.'
美的またはその他の理由で、複数行にわたって文字列を分割することは可能だが、そのような場合には改行文字自体をバックスラッシュ(\)でエスケープする必要がある。改行はその後文字列から削除される。たとえば、以下の2つのセレクタは厳密に等価である:
文字列は直接文字列に改行を表すことができないので、改行を含めるために"\A"エスケープを使用する。(16進数AはUnicodeでラインフィールド(U+000A)であるが、CSSでは"改行"の一般的な概念を表す。)
3.4. 資源位置表示: 型
= url ( * )
background : url ( "http://www.example.com/pinkish.gif" ); background : url ( http://www.example.com/pinkish.gif );
注:引用符なしurl()構文は、
(@importのような)一部のCSSコンテキストは、関数ラッパーなしで、
3.4.1. 相対URL
リソースの絶対位置に依存しないモジュラー・スタイルシートを作成するために、著者は、相対URLを使用すべきである。([URL]で定義されるように)相対URLは、基底URLを用いて完全なURLに解決される。RFC 3986の3章は、この処理に用いる標準的なアルゴリズムを定義する。CSSスタイルシートに対して、基底URLはスタイル付けされたソース文書のURIではなく、スタイルシート自身のURLである。文書中で埋め込まれるスタイルシートは、スタイルシートコンテナに関連付けられた基底URLを持つ。
注:HTML文書の場合、ベースURLは変更可能である。
前段落で説明したように、
body{ background : url ( "tile.png" ) }
URLで指定されたスタイルシート:
http : //www.example.org/style/basic.css
ソース文書のの背景は、URLで指定されたリソースによって記述される画像でタイル状に表示される:
http : //www.example.org/style/tile.png
同じ画像は、を含むソース文書のURLにかかわらず使用される。
3.4.1.1. フラグメントURL
ブラウザーのURL処理におけるいくつか共通の奇癖を回避するために、CSSはフラグメント専用URLのための特別な挙動を持つ。
url()の値は、U+0023 NUMBER SIGN(#
)文字で開始する場合、URLに通常通り値を解析するが、url()のローカルURLフラグを追加で設定する。
設定されるローカルURLフラグとurl()をマッチする場合、URLのフラグメント以外のすべてを無視し、相対URLが解決される現在の文書に対してその断片を解決する。この参照は、(横断文書よりむしろ)同一文書として常に扱われなければならない。
設定されるローカルURLフラグとともにurl()をシリアル化する場合、その断片のみとしてシリアル化しなければならない。
“ブラウザーの奇癖”とは何か?
理論的にブラウザーは、フラグメント専用のURLを含む、文書のベースURLが変更するたびに(たとえば、base
要素の変異を通じてまたはpushState()
の呼び出しなど)、任意の相対URLを再解決すべきである。しかし、多くの場合にURLが解決せず、かつ特別な処理なし解決し、断片のみのURLは(以前のベースURLを指す)突如として横断文書参照となり、参照が使用される多くの場所で破る。
断片のみのURLは、その現在のURLが何であるかに関係なく、現在の文書を参照したいものの明確なセマンティックを表現するので、このハックは、少なくともこれらの場合に期待される動作を維持する。
3.4.2 空URL
算出値はurl("")であり、そのようにシリアル化しなければならない。
注:これは、ウェブプラットフォームの他の場所で埋め込まれたリソースに対する空URLの動作と一致し、かつ、url()が現れるものは何でも無効なリソースであることがほぼ確実である、url()値を空のままにする製作中のミスによるスタイルシートまたはホスト文書を再要求する過剰なトラフィックを回避する。ウェブプラットフォーム上でのリンクは空のURLを許可し、よってCSSはハイパーリンクを制御するためのいくつかの機能を獲得する場合、この制限はこれらのコンテキストで緩和することができる。
3.4.3. URL修飾子
url()関数は、URLの意味または解釈を変更する、追加の
注:
4. 数値データ型
数値データ型は、数量、指標、位置、およびその他のそのような値を表すために使用される。与えられた数値で量(数値的側面)を表現する際に多くの構文上のバリエーションが存在する可能性があるが、指定および算出値はこれらのバリエーションを区別しない。これらは、構文表現ではなく、値の抽象的な量を表す。
数値データ型には、
注:ここでは汎用の次元が定義されているが、他のモジュールの中には用法がよりローカライズされた追加のデータ型を定義するものもある(たとえば、[css-grid-1]はfr単位を導入する)。
4.1. 範囲制限および範囲定義の表記
プロパティは数値をある範囲に制限することができる。値が許容範囲外にある場合、特に指定のない限り、宣言は無効であり、無視しなければならない。範囲制限は、CSSの角括弧で囲まれた範囲表記—
—を用いて、数値型表記で注釈を付けることができる。これは、山括弧内で、識別キーワードの後に、minとmaxの間の閉区間を示す。たとえば、
注:CSS値では一般に開区間は許可されない。したがって、角括弧表記のみが使用される。
理論的には、CSSはすべての値型の無限精度および無限大範囲をサポートしているが、現実の実装では有限のキャパシティを持つ。ユーザーエージェントは、合理的で有用な範囲および精度をサポートすべきである。理想的には無制限である範囲の極値は、必要に応じて∞または−∞を用いて示される。たとえば、
角括弧で囲まれた範囲表記を用いるか、プロパティの説明でのいずれかで範囲が指定されない場合、
が仮定される。
−∞または∞の値は、たとえ値の型で単位が使用されているとしても、単位なしで記述しなければならない。たとえ値の型が「単位のないゼロ」(など)を許可しないとしても、0の値を単位なしで書き込むことができる。
注:これを書いている時点では、角括弧で囲まれた範囲表記は新しいものである。よって、ほとんどのCSS仕様において、任意の範囲制限は本文でのみ説明されている(たとえば、「負の値は許可されない」または「負の値は無効である」は、
の範囲を示す)。これは、拘束力を低下させるものではない。
4.2. 整数: 型
整数値は
リテラルに記述される場合、整数は、1つ以上の10進数0から9であり、かつCSS Syntax Moduleにおける
4.3. 実数: 型
数値は、
リテラルに記述する場合、 実数は、 整数、または0個以上の10進数の後にドット(.)が続き、その後に1個以上の10進数が続くものである。オプションで、文字"e"または"E"の後に指数表記の10を底とする指数を示す整数が続くことで終了できる。これは、CSS Syntax Module [CSS-SYNTAX-3]における
4.4. 単位をもつ数字:次元値
一般的な用語次元は、数に付随する単位とその数を指し、
リテラルに記述される場合、次元は、識別子である、実数の直後に単位識別子が続くものである。これは、CSS Syntax Module [CSS-SYNTAX-3]における
CSSは、長さ(
4.4.1. 互換性のある単位
算出値をシリアル化する場合[CSSOM]、互換性のある単位(pxとin間の96:1の係数、またはemとpx間の計算されたfont-size係数のような、静的な倍数因子によって関連するもの)は、単一の規準的な単位に変換される。互換性のある単位の各グループは、単位間がシリアル化のために使用される規準的な単位であるものを定義する。
使用値である解決値をシリアル化する場合、長さを表すすべての値型(パーセンテージ、数、キーワードなど)は、長さとの互換性が考慮される。同様に、使用値を返す任意の将来のAPIは、距離/所要時間/周波数などを表す任意の値を関連する次元のクラスと互換性があるものと見なさなければならず、適切な方法で正規化しなければならない。
4.5. パーセンテージ: 型
パーセント値は、
リテラルに記述される場合、パーセントは、実数の直後のパーセント記号%から構成される。これは、CSS Syntax Module [CSS-SYNTAX-3]における
パーセント値は、たとえば長さなど、常に他の量に対する相対値となる。パーセント値を許可する各プロパティはまた、パーセンテージが参照する量を定義する。この量は、同じ要素の別のプロパティ、祖先要素に対するプロパティの値、整形文脈の測定物(たとえば、包含ブロックの幅)、または何か他のものとすることができる。
4.6. パーセンテージと次元の混合
一方、hsl()関数の第二および第三引数は、
注:仕様は互換性がある限り、仕様は文法で次元の代わりに
注:将来、必要に応じて<type-percentage>生成物を追加できる。
5. 長さの単位: 型
長さは距離の大きさを参照し、プロパティ定義で
0長さに対する単位識別子は任意である(すなわち、構文的に
プロパティは、ある範囲に長さを制限してもよい。値が許容範囲外にある場合、宣言は無効であり、無視しなければならない。
一部のプロパティは負の長さの値を許可する一方で、整形を複雑にしてもよく、実装特有の限界があってもよい。負の長さの値をサポートできない場合、値をサポート可能な最も近い値に変換しなければならない。
使用される長さがサポートできない場合、ユーザーエージェントは実効値で近似しなければならない。
5.1. 相対長さ
相対長さの単位は別の長さに対して相対的な長さを指定する。相対単位を使用するスタイルシートは、より簡単に1つの出力環境から別のものに拡張できる。
相対単位は以下のものがある:
単位 | 何と相対か |
---|---|
em | 要素のフォントサイズ |
ex | 要素のフォントのx-height |
ch | 要素のフォントにおける“0”(0、U+0030)グリフの事前測定 |
rem | ルート要素のフォントサイズ |
vw | ビューポートの幅の1% |
vh | ビューポートの高さの1% |
vmin | ビューポートの小さい方の幅の1% |
vmax | ビューポートの大きい方の幅の1% |
子要素は特定の親の相対値を継承しない。算出値を継承するのである。
5.1.1. フォント相対長さ:em、ex、ch、rem単位
フォント相対長さは、それらが使用されている要素のフォントメトリック、またはremの場合はルート要素のメトリックを参照する。
- em
- この単位が使用される要素のfont-sizeプロパティの算出値に等しい。
- rem
- ルート要素のemの算出値に等しい。
- ex単位
- 最初に使用可能なフォントの使用されるx-heightに等しい。[CSS3-FONTS]x-heightは、小文字の"x"の高さに等しくなることが多いことからこう呼ばれる。しかし、exは"x"を含まないフォントに対しても定義される。フォントのx-heightは、別の方法で見つけることができる。一部のフォントは、x-heightの信頼できる測定基準を含む。信頼できるフォントメトリックが利用できない場合、ユーザーエージェントは小文字グリフの高さからx-heightを決定してもよい。実行可能なヒューリスティックの1つは、小文字の"o"のグリフを下ベースラインまで広げ、境界ボックスの上ベースラインから値を減算し、その長さを調べることである。x-heightを測定することが不可能または非現実的な場合、0.5emの値を仮定しなければならない。
- ch単位
-
ヨーロッパの英数字の典型的な事前測定を表し、それをレンダリングするために使用される「0」(ZERO, U+0030)グリフの使用される事前測定として測定される。(グリフの事前測定は、要素のインライン軸であるいずれか、その事前の幅または高さである。)
注:この測定は、単一の狭いグリフの事前測定の概算(および等幅フォントで、正確な測定値)であり、よって予想されるグリフも合計数に基づいて測定できる。
注:グリフの事前測定は表記方向およびテキストの向きだけでなく、フォント設定、テキスト変換、およびグリフの選択や向きに影響を与える他の特性に依存する。
“0”グリフを測定することが不可能または非現実的な場合、この単位は1em高さで0.5emであると仮定しなければならない。したがって、ch単位は、一般的な場合において0.5emに後退し、直立に活字を組む(すなわち、writing-modeがvertical-rlまたはvertical-lrおよびtext-orientationがuprightである)場合に1emに後退する。
要素のコンテキスト外で(たとえばメディアクエリーなどで)使用される場合、これらの単位は、fontプロパティの初期値に対応する計算されたフォントメトリックを参照する。これらが参照する要素のfont-sizeプロパティの値で使用される場合、これらの単位は、親要素の計算されたフォントメトリック(または、親なしの場合にfontプロパティの初期値に対応する計算されたフォントメトリック)を参照する。
フォント相対長さは、シェーピングがない場合に計算される。
5.1.2. ビューポート割合長さ:vw、vh、vmin、vmax単位
ビューポートのパーセンテージ長さは、 初期包含ブロックの大きさに対する相対的なものである。ブロック自身は、ビューポート(連続メディアの場合)またはページ領域(ページメディアの場合)のいずれかの大きさに基づく。初期包含ブロックの高さまたは幅が変更されたとき、これらはビューポートに応じてスケーリングされる。しかし、スクロールバーは存在しないものとみなされる。
ページメディアについて、ビューポート割合長さの厳密な定義は、[CSS3PAGE]を優先する。
- vw単位
- 初期包含ブロックの幅の1%に等しい。
- vh単位
- 初期包含ブロックの高さの1%に等しい。
- vmin単位
- vwまたはvhの小さい方に等しい。
- vmax単位
- vwまたはvhの大きい方に等しい。
5.2. 絶対長さ:cm、mm、q、in、pt、pc、px単位
絶対長さの単位は、互いに関連して固定されており、物理的な測定に固定されている。これは、主に出力環境が既知の場合に有用である。絶対単位は物理単位(in、cm、mm、pt、pc、q)および視覚角度単位(px)で構成される:
単位 | 名前 | 等値 |
---|---|---|
cm | センチメートル | 1cm = 96px/2.54 |
mm | ミリメートル | 1mm = 1/10cm |
Q | 4分の1ミリメートル | 1Q = 1/40th of 1cm |
in | インチ | 1in = 2.54cm = 96px |
pc | パイカ | 1pc = 1/6 in |
pt | ポイント | 1pt = 1/72nd of 1in |
px | ピクセル | 1px = 1/96 in |
h1{ margin : 0.5 in } /* inches */ h2{ line-height : 3 cm } /* centimeters */ h3{ word-spacing : 4 mm } /* millimeters */ h3{ letter-spacing : 1 Q } /* quarter-millimeters */ h4{ font-size : 12 pt } /* points */ h4{ font-size : 1 pc } /* picas */ p{ font-size : 12 px } /* px */
Note: 出版の文脈での長さは、
のように書かれることがあり、2パイカと3ポイントの長さを示す。これらは、 calc(2pc + 3pt)としてCSSで記述できる(§ 8.1 数学表現:calc())を参照)。
絶対長さ単位のすべては互換性があり、かつpxは規準的な単位である。
CSSデバイスの場合、これらの大きさは次のいずれかに固定される。
典型的な表示距離の印刷媒体の場合、固定単位は物理単位のいずれか(インチ、センチメートルなど)となるべきである。スクリーンメディア(高解像度デバイスを含む)、低解像度のデバイスおよび独自の視聴距離を伴うデバイスの場合、固定単位は代わりにピクセル単位が推奨される。そのようなデバイスの場合、ピクセル単位は、参照ピクセルに最も近いデバイスピクセルの整数を参照することが推奨される。
注:固定単位がピクセル単位である場合、物理単位は物理的な測定結果と一致するとは限らない。あるいは固定単位が物理単位の場合、ピクセル単位は、デバイスピクセルの整数に変換されないことがある。
注:このピクセル単位と物理単位の定義は、CSS1およびCSS2の初期のバージョンとは異なる。特に、ピクセル単位と物理単位が固定比で関連しないとされた以前のCSSバージョンにおいて、ピクセル単位が最も近い基準画素と一致するように変化する一方で、物理単位は常に物理的な測定に結びつけられる。(この不運な変更は、あまりにも多くの既存のコンテンツが96dpiの仮定に依存するために行われた。この前提を壊すことはコンテンツを壊すことになる。)
注:単位は大文字・小文字不区別であり、小文字としてシリアライズする。たとえば、1Qは1qとしてシリアライズする。
参照ピクセルとは、腕の長さのデバイスからの距離と96dpiのデバイスピクセル密度におけるデバイス上の1ピクセルとの視角である。名目の腕の長さが28インチの場合、視角は約0.0213度である。距離をおいて読むために、1pxは約0.26mm(1/96インチ)に対応する。
下の画像は、参照ピクセルの大きさで距離を見ることの効果を示している:71cm(28インチ)の読み取り距離では基準画素が0.26mmで、3.5m(12フィート)では1.3mmの参照画素となる。

次の図は、ピクセル単位でのデバイスの解像度の効果を示している:低解像度のデバイス(たとえば、典型的なコンピュータ画面)では1px平方の領域が単独の画素で覆われてしまうのに対し、高解像度のデバイス(レーザープリンタなど)では1pxの領域に16個もの画素が入ることがわかる。

デバイスピクセルは、全範囲の色を表示する能力があるデバイス出力の領域の最小単位である。典型的なカラー画面では、赤、緑、および青のサブピクセルを含む正方形または少し長方形の領域である。一部の色をより高い解像度で表示することによってなど、この定義を曖昧にする可能性のある従来とは異なる出力が多数存在する。しかし、そのようなデバイスでも、"デバイスピクセル"と同等の概念がいくつか公開される。
6. その他の単位
6.1. 角度: 型およびdeg、grad、rad、turn単位
- deg
- 度。円の1周は360度である。
- grad
- グラディアン。ゴンまたはグラードとしても知られる。円の1周は400グラディアンである。
- rad
- ラジアン。円の1周は2πラジアンである。
- turn
- 回転円の1周は1回転である。
たとえば、直角は90degまたは100gradまたは0.25turnまたは約1.570796326794897radである。
すべての
たとえば、linear-gradient()関数で、グラデーションの方向を決定する
注:レガシーな理由から、
6.2. 時間:型およびs、ms単位
時間の値はで示される次元である。時間の単位識別子は次のとおり:
- s
- 秒。
- ms
- ミリ秒。1秒は1000ミリ秒ある。
プロパティは、ある範囲に時間値を制限してもよい。値が許容範囲外にある場合、宣言は無効であり、無視しなければならない。
6.3. 周波数: 型およびHz、kHz単位
周波数は
- Hz
- ヘルツ。これは1秒あたりの出現回数を表す。
- kHz
- キロヘルツ。1キロヘルツは1000ヘルツである。
たとえば、音の高低を表すときに、200Hzは低音域であり、6kHzは高音域である。
すべての
注:単位は大文字・小文字不区別であり、小文字としてシリアライズする。たとえば、1Hzは1hzとしてシリアライズする。
6.4 解像度単位: 型およびdpi、dpcm、dppx単位
解像度の値は
- dpi
- インチあたりのドット。
- dpcm
- センチメートルあたりのドット。
- dppx
- px単位あたりのドット。
すべての
CSSでのpxとinは、CSSでは1:96の固定比率のため、1dppxは96dpiに等しいことに注意する。これはCSSで表示される画像のデフォルト解像度に対応する。image-resolution参照。
@media ( min-resolution:2 dppx ) { ...}
7. 他の場所で定義されるデータ型
一部のデータ型は、独自のモジュールで定義されている。以下の例は、複数の仕様に渡って使用される最も一般的なデータ型の部について議論する。
7.1. 色: 型
7.2. 画像: 型
7.3. 2次元配置: 型
= [ [ left | center | right | top | bottom |] |[ left | center | right] &&[ top | center | bottom] |[ left | center | right |] [ top | center | bottom |] |[ [ left | right] ] &&[ [ top | bottom] ] ]
注:background-positionプロパティはまた、3値構文も受け入れる。これは、プロパティ値で他の長さまたはパーセントのコンポーネントと組み合わされる場合に構文解析のあいまいさを引き起こすため、一般的には許可されていない。
シリアライズ時の基準的な順序は、水平方向のコンポーネントに続いて垂直方向のコンポーネントである。
他のキーワード、
8. 関数表記
関数表記は、より複雑な型を表す、または特別な処理を呼び出すことができる、コンポーネント値の型である。構文は、関数名に始まり、直後に左丸括弧が続き(すなわち
注:rgba()のような一部のレガシー関数表記は、コンマを余計に使用するが、一般にコンマはリストで項目を区切るため、または別の方法で明確にする文法の場所でのみ使用される。コンマが引数を区切るために使用される場合、空白文字はコンマの前後でオプションである。
background : url ( http://www.example.org/image ); color : rgb ( 100 , 200 , 50 ); content : counter ( list-item) ". " ; width : calc ( 50 % -2 em );
8.1. 数学表現:calc()
calc()関数は、数的なCSSコンポーネント値に、加算(+)、減算(-)、乗算(*)、および/または除算(/)を用いて数式として記述するのを可能にする。
calc()式は、その式に含まれる数学計算の結果を表す。これは、標準の演算子の優先順位規則を使用して評価される(*および/は、+および-よりも厳しくバインドされ、それ以外の場合、演算子は左から右に評価される)。
これは
:root{ font-size : calc ( 100 vw /40 ); }
デザインの残りの部分がrem単位を使用して指定される場合、全体のレイアウトはビューポートの幅に合わせて調整される。
.foo{ background : url ( top.png ), url ( bottom.png ); background-repeat : no-repeat; background-position : 50 % 50 % , calc ( 50 % +20 px ) calc ( 50 % +20 px ); }
.foo{ background-image : linear-gradient ( to right, silver, white50 px , whitecalc ( 100 % -50 px ), silver); }
8.1.1. 構文
calc()関数の構文は次のとおり:
<calc () > =calc ( ) = [ [ '+' |'-' ] ] *= [ '*' | '/' ] *= | | | ( ) = [ [ '+' |'-' ] ] *= [ '*' | '/' ] *= | ( )
さらに、空白文字は+と-演算子の両側に要求される。(*および/演算子は周りの空白なしで使用することができる。)
各NUMBER
、DIMENSION
、PERCENTAGE
が項である場合、ユーザーエージェントは、少なくとも20項のcalc()式をサポートしなければならない。calc()式がサポートされる項の数よりも多く含まれる場合、式が無効であったかのように扱わなければならない。
8.1.2. 型のチェック
演算式は、
注:
式が置かれているコンテキストでパーセンテージが受け入れられ、かつパーセンテージが
注:
注:使用値のときに(特にline-heightおよびtab-size)、
演算子は、利得の型がその引数に基づいて、部分式を形成する。式を簡単にするため、演算子は、受け入れる型に制限がある。各演算子で、左右の引数の型は制限が検査される。互換性のある場合、型は以下で説明するように解決される(以下は、簡単にするために演算子の優先順位規則を無視する):
- +または-において、両方が同じ型を持つ、または一方が
であり、他方が であるかを検査する。両方が同じ型の場合、その型に解決する。一方が であり、もう一方が の場合、 に解決する。 - *において、少なくとも一方が
であることを検査する。両方が である場合、 に解決する。そうでなければ、もう一方の型に解決する。 - /において、右項が
であることを検査する。左項が である場合、 に解決する。そうでなければ、左項の型に解決する。
演算子は上記の検査に合格しない場合、式は無効である。また、0による除算は無効である。これは、リテラルに実数0で割るだけでなく、0に評価される任意の数値式(純粋に数値式は、解析時に追加情報なしで評価することができるものとして)の両方を含む。
注:代数による単純化は、calc()式またはその解決型の妥当性に影響を与えない。たとえば、calc(5px - 5px + 10s)およびcalc(0 * 5px + 10s)は、長さに時間を加えようとするためにどちらも無効である。
8.1.3. 算出値
calc()表現の算出値は、算出されたすべてのコンポーネントをもつ表現である。
パーセンテージが算出値に解決されない場合、パーセンテージはcalc()式の中で解決されない。たとえば、calc(100% - 100% + 1em)は、1emでなくcalc(1em)に解決される。値におけるパーセンテージを算出するための特別な規則(たとえばheightプロパティ)が存在する場合、calc()式がパーセンテージを含むならばいつでも、特別な規則が適用される。
このため、background-position計算ではcalc()内のパーセンテージが保持され、一方font-sizeではそのような式を直接長さに計算する。
テーブルセルとテーブル要素において、幅と高さの計算の複雑さを与えることは、自動および固定レイアウトテーブルの両方で、テーブル列、テーブル列グループ、テーブル行、テーブル行グループ、およびテーブルセルに幅と高さのパーセンテージを含む数式はあたかもautoが指定されたかのように扱われてもよい。
8.1.4. 範囲のチェック
値の解析時間範囲チェックはcalc()内で実行されず、したがって範囲外の値は宣言に無効にさせない。しかし、式から得られた値は、対象コンテキストで許可された範囲にとどめなければならない。計算が範囲照合を可能にするために式を十分に単純化できない場合、クランプは、可能な限りの算出値に対して実行され、また使用値についても同様である。(クランプは指定値で実行されない。)
注:これは、許容される値を(開区間でなく)閉区間と定義するために、calc()を受け入れるすべてのコンテキストを必要とする。
width : calc ( 5 px -10 px ); width : calc ( -5 px ); width : 0 px ;
しかし幅に注目すると、width: -5pxはwidth: calc(-5px)と等価ではない!calc()の外の範囲外の値は、構文的に無効であり、宣言全体をドロップさせる。
8.1.5. シリアライゼーション
calc()値のシリアライゼーションは、このレベルにおいて未定義である。
付録 A:IANA 考慮事項
about : invalid
URL スキームの登録
この節は、[RFC6694]で定義された登録手順に従って、
のURLを定義し、登録する。
この登録の公式記録はhttp://www.iana.org/assignments/about-uri-tokens/about-uri-tokens.xhtmlで見ることができる。
登録トークン | invalid
|
---|---|
使用目的 | 一般的なエラー条件をもつ URL参照が存在しない文書。これはURLが必要な場合に使用することができるが、デフォルト値は、文書の任意の型として解決可能であるべきでない。
|
連絡/変更管理者 | CSS WG <[email protected]> (W3Cの代理として) |
仕様 | CSS Values and Units Module Level 3 日本語訳 |
謝辞
Comments and suggestions from Giovanni Campagna, Christoph Päper, Keith Rarick, Alex Mogilevsky, Ian Hickson, David Baron, Edward Welbourne, Boris Zbarsky, Björn Höhrmann and Michael Day improved this module.
変更点
Changes since the 1 December 2022 Candidate Recommenation Snapshot are:
-
Editorial synchronization with CSS Values and Units Module Level 4.
-
Added definition for
notation to the value definition syntax. -
Clarified stacking of multipliers.
Changes since the 6 June 2019 Candidate Recommendation are:
-
Dropped the attr() function, since it was punted to Level 5.
-
Specified serialization of empty urls to be
. (Issue 6447)url ( "" ) -
Clarified that the font-relative lengths are calculated without text shaping. (Issue 5498)
-
Added a definition for device pixel. (Issue 7287)
-
Cleaned up interaction of this specification and [CSS-CASCADE-3] in defining the CSS-wide keywords. (Issue 7439)
-
Removed definition of
, since it is impossible to combine them with calc(). (Issue 2789) -
Fixed definition of numbers to allow decimals in combination with scientific notation, as originally intended and as defined in [CSS-SYNTAX-3]. (Issue 7248)
-
Editorial improvements.
Changes since the 31 January 2019 Candidate Recommendation are:
- Added the new bracketed range notation to the CSS value definition syntax. This has no normative implications on implementations, just allows more routine annotation of ranges in future CSS specifications. (Issue 355)
Changes since the 14 August 2018 Candidate Recommendation are:
- Defined <'property'> syntax to refer to the property without any top-level #-multiplier, to make the notation usable with common list-valued property patterns. (Issue 3146)
-
Clarified that numeric values outside the allowed range
are not ignored if a more specific spec defines other handling.
(Issue 3270)
プロパティは、ある範囲に数値を制限してもよい。If the value is outside the allowed range, unless otherwise specified, the declaration is invalid and must be ignored.
- Fixed some background-position examples to be less confusing. (Issue 3482)
A Disposition of Comments is available.
Changes since the 29 September 2016 Candidate Recommendation are:
- Removed consideration of scrollbars in computing viewport units due to lack of implementations. (Issue 15)
- Inlined the
definition and dropped the three-value syntaxes to allow for unambiguous combination in complex grammars. This effectively removes that syntax from object-position, but allows to be re-used e.g. in [CSS-TRANSFORMS-1] for 3D positions. (See discussion.) - Reverted previous change to allow zero angles to drop their unit; this will instead be special-cased where needed for backwards-compatibility. (See discussion)
- Defined that range checking, and any resulting clamping, of calc() values is performed both at computed time and at used time. (Issue #434)
- Fixed grammar error that disallowed numeric expressions as denominators in calc(). (Issue 12)
- Defined handling of font-relative units outside the context of an element. (Issue 9)
- Defined that 0 parses as
if it’s ambiguous whether it’s a or a . (Issue 489) - Defined empty url()s to refer to an invalid URL, rather than resolving to the URL of the style sheet. (Issue 2211)
- Removed (unused) ability for percentages to be treated as a
type in calc(). (Issue 1463) - Clarified that high-resolution screens should anchor on device pixels, not physical units. (Issue 8)
- Clarified definition of url() to normatively say that it accepts unquoted syntax.
- Defined that fragment-only url() are specially handled to always be page-local links, regardless of base-url shenanigans. (See § 3.4.1.1 Fragment URLs.)
- Defined attr() parsing in terms of the Syntax spec, not CSS2.1 grammar.
A Disposition of Comments is available.
Changes since the 11 June 2015 Candidate Recommendation are:
- Dropped toggle() for lack of implementations.
- Allow zero angles to be represented as 0. (Change due to Web-compatibility constraints in transform and gradient syntaxes.)
- Defined special handling for fragment URLs.
- Defined an empty
resolves to an invalid resource. - Defined compatible units and canonical units for serialization.
- Defined case-sensitivity of url() attribute argument to match attribute selectors.
- Added definition of
notation to definition of identifiers. - Added
as a shorthand for | , along with equivalent productions for angles, numbers, times, and frequencies. - Allowed
s inside calc() to resolve as their own type, if they occur in some (as yet theoretical) context where they are not compatible with any other type. - Various clarifications and editorial improvements.
Changes since the 30 July 2013 Candidate Recommendation are:
- Specified that, in the absence of font information, 1ch equal .5em.
- Added Q unit.
- Relaxed unnecessary restrictions on
. Require specs referencing it to be clear about excluded keywords, because the new rule isn’t as simple. - Clarified relative URL resolution for embedded style sheets.
- Clarified {A} variant of {A,B} notation.
- Added notation for restricting the length of comma-separated lists specified with the # notation.
- Clarified handling of toggle() when used in shorthand declarations.
- Clarified that stringing together reorderable combinations allows interleaving.
- Changed syntax references from the 2.1 grammar to the Syntax spec.
A Disposition of Comments is available.
Changes since the 28 August 2012 Candidate Recommendation are:
- Corrected
wqname
in the attr() syntax toqname
- Made undefined namespace prefixes in attr() invalidate the function.
- Per WG resolution, made viewport-percentage units respect scrollbars on the viewport unless overflow is auto (in which case they ignore the presence of scrollbars).
- Deferred exact definition of viewport-percentage units in paged media to CSS Paged Media.
- Added back the
term as a convenience notation, so that other specs can refer to it.
Changes since the 4 April 2013 Candidate Recommendation are:
- Noted that the list of CSS-wide keywords may be expanded by other specs.
- Clarified definition of ex to refer to the “first available font”.
- Specified that attr() with string or url types doesn’t reparse the attribute contents, just takes the value literally as the value of a
.
セキュリティの考慮事項
この仕様は、新しいセキュリティの考慮事項を示すことはない。
この仕様では、url()関数(
プライバシーの考慮事項
この仕様では、ユーザーの画面サイズ(ビューポートのパーセンテージ長さ)、デフォルトのフォントサイズ、およびユーザーのシステムで使用できるフォントに関する情報(フォント相対的な長さ)を暴露する単位が導入されている。
この仕様では、url()関数(