CSS 背景と枠線モジュール Level 3

W3C 候補勧告草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2024/CRD-css-backgrounds-3-20240311/
最新の公開バージョン:
https://www.w3.org/TR/css-backgrounds-3/
編集者草稿:
https://drafts.csswg.org/css-backgrounds/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/css-backgrounds-3/
実装報告:
https://test.csswg.org/harness/results/css-backgrounds-3_dev/grouped/
テストスイート:
http://test.csswg.org/suites/css3-background/nightly-unstable/
フィードバック:
CSSWG イシューレポジトリ
編集者:
Elika J. Etemad / fantasai (Apple)
(招待専門家)
前編集者:
(W3C)
この仕様への編集提案:
GitHub エディター

概要

この草案は、CSSの枠線および背景に関する機能を含んでいます。レベル2と比較した主な拡張点は、画像による枠線、複数の背景を持つボックス、角が丸いボックス、影付きボックスです。

CSSは、構造化文書(HTMLやXMLなど)のレンダリング方法を画面や印刷などで記述するための言語です。

この文書のステータス

このセクションは、本書の公開時点でのステータスを記載しています。 現行のW3C出版物の一覧や、この技術レポートの最新改訂版は W3C技術レポートインデックス https://www.w3.org/TR/ で確認できます。

この文書は CSS作業グループによって、候補勧告草案として勧告トラックを用いて公開されました。 候補勧告として公開されたことは、W3Cおよびそのメンバーによる支持を意味するものではありません。 候補勧告草案は、以前の候補勧告から作業グループが次の候補勧告スナップショットに含める予定の変更点を統合しています。

この文書はドラフトであり、 今後更新・置換・廃止される可能性があります。 進行中の作業以外のものとしてこの文書を引用することは適切ではありません。

フィードバックは GitHubでissueを提出(推奨)してください。 タイトルには仕様コード「css-backgrounds」を含め、以下のように記載してください: “[css-backgrounds] …コメントの概要…”。 すべてのissueやコメントはアーカイブされています。 または、(アーカイブあり) 公開メーリングリスト www-style@w3.org でも受け付けています。

この文書は 2023年11月3日 W3Cプロセス文書 に従って管理されています。

この文書は W3C特許ポリシー の下で運用されるグループによって作成されました。 W3Cは、グループの成果物に関連して提出された公開特許開示リストを管理しています。 そのページには特許開示方法の案内も掲載されています。 個人が特許について実際の知識を有し、その特許が必須クレームを含むと考える場合は、 W3C特許ポリシー第6節に従って情報を開示する必要があります。

以下の機能は「リスクあり」とされており、CR期間中に削除される可能性があります:

「リスクあり」はW3Cプロセスの専門用語であり、必ずしも機能が削除や遅延の危険にあることを意味するものではありません。 作業グループが、機能の相互運用可能な実装が迅速に実現されるか疑わしいと考えた場合にこのようにマークするものであり、移行時に新たな候補勧告を発行することなく機能を削除できるようにするための措置です。

1. 導入

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

要素がCSSボックスモデル [CSS-BOX-3]に従ってレンダリングされる際、 各要素は全く表示されないか、 1つ以上の矩形ボックスとして整形されます。 各ボックスには矩形の内容領域があり、 内容の周囲にはパディングの帯があり、 パディングの周囲には枠線があり、 枠線の外側にはマージンがあります。 (マージンは負の値も可能ですが、マージンは背景や枠線には影響しません。)

内容、パディング、枠線、マージン領域を示す典型的なボックスの図
典型的なボックスのさまざまな領域とエッジ。 (この図はCSSボックスモデルモジュール [CSS-BOX-3]で説明されています。)

このモジュールのプロパティは、枠線領域の装飾や、 内容パディング、および枠線領域の背景に関係します。 さらに、ボックスにはbox-shadowプロパティで「ドロップシャドウ」効果を与えることができます。

要素が複数のボックス断片に分割された場合、box-decoration-break [CSS-BREAK-3]は さまざまな断片間で枠線や背景がどのように分割されるかを定義します。 (要素は行の終わり、列の終わり、またはページの終わりで分割され、 次の行、列、またはページで継続される場合、複数の断片になることがあります。)

背景・枠線・シャドウの相対的な重ね順はこのモジュールで定義されています。 これらのレイヤーが他のレンダリングコンテンツとどのように相互作用するかについては、 付録E「積み重ねコンテキストの詳細な説明」を [CSS2] 参照。

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

このモジュールは、[CSS2]のセクション8.5および14.2で定義された背景と枠線の機能を置き換え、拡張します。

このモジュールのすべてのプロパティは、::first-letter 疑似要素に適用されます。 背景プロパティborder-radiusプロパティ::first-line 疑似要素にも適用されます。 UAは(必須ではありませんが) border-imagebox-shadowプロパティを::first-lineに適用しても構いません。 UAは border-color/style/widthプロパティ::first-lineに適用してはなりません。[CSS2]

1.2. 値の定義

この仕様は、CSSプロパティ定義規則[CSS2]から継承し、値定義構文[CSS-VALUES-3]から使用します。 この仕様で定義されていない値型はCSS Values & Units [CSS-VALUES-3]で定義されています。 他のCSSモジュールとの組み合わせにより、これらの値型の定義が拡張される場合があります。 例えば、CSS Imagesとの組み合わせにより、 CSSグラデーションをbackground-imageborder-image値として使用できます。[CSS-IMAGES-3]

各プロパティ定義に記載されている値以外にも、 この仕様で定義されたすべてのプロパティは、 CSS全体キーワードをプロパティ値として受け入れます。 可読性のため、ここでは明記していません。

2. 背景

各ボックスには、完全に透明(デフォルト)または色や1つ以上の画像で塗りつぶされた背景レイヤーがあります。 背景プロパティは、どの色(background-color) および画像(background-image)を使用するか、 それらがどのようなサイズ・位置・タイルになるかなどを指定します。

背景プロパティは継承されませんが、 親ボックスの背景はデフォルトで透過されているため、 初期値のtransparent値によって親の背景が透けて見えます。

2.1. 複数背景画像のレイヤー化

ボックスの背景は複数の背景画像レイヤーを持つことができます。 レイヤー数はbackground-imageプロパティの、 カンマ区切り値の数によって決まります。 noneという値でもレイヤーは生成されることに注意してください。

背景画像は、 その他の背景プロパティの対応する値に従ってサイズ・位置・タイル化されます。 リストは先頭から順に対応付けされ、 余分な値は無視されます。 プロパティの値がレイヤー数に足りない場合は、 UAは リストの値を繰り返して十分な数になるように使用値を計算する必要があります。

例えば、次の宣言セットは:
background-image: url(flower.png), url(ball.png), url(grass.png);
background-position: center center, 20% 80%, top left, bottom right;
background-origin: border-box, content-box;
background-repeat: no-repeat;

次のセットと全く同じ効果を持ちます。 余分なpositionは削除され、 background-originおよび background-repeatの不足値が(強調表示)補われます:

background-image: url(flower.png), url(ball.png), url(grass.png);
background-position: center center, 20% 80%, top left;
background-origin: border-box, content-box, border-box;
background-repeat: no-repeat, no-repeat, no-repeat;

リストの最初の画像がユーザーに最も近いレイヤーとなり、 次の画像がその背後に描画されます。 背景色が指定されていれば、 他の全てのレイヤーの下に描画されます。

注: border-imageプロパティでも背景画像を指定できますが、 それが存在する場合、背景プロパティで作成される背景レイヤーの上に描画されます。

2.2. ベースカラー: background-color プロパティ

Name: background-color
値: <color>
初期値: transparent
適用対象: 全要素
継承: しない
パーセンテージ: N/A
算出値: 算出済み色
標準順序: 文法通り
アニメーション型: 算出値による

このプロパティは、ボックスの背景色を設定します。 この色は、背景画像の背後に描画されます。

例:
h1 { background-color: #F00 } /* 背景を赤に設定 */

背景色は、 最も下位のbackground-clip値によって 背景画像レイヤーに合わせてクリップされます。

2.3. 画像ソース: background-image プロパティ

Name: background-image
値: <bg-image>#
初期値: none
適用対象: 全要素
継承: しない
パーセンテージ: N/A
算出値: リスト。各項目は<image>またはキーワードnone
標準順序: 文法通り
アニメーション型: 離散値

このプロパティは、要素の背景画像を指定します。 画像は最初に指定したものが最前面(ユーザーに最も近い)に描画され、 2番目以降はその背後に描画されます。 プロパティ値はカンマ区切りの <bg-image>値のリストとして与えます。

<bg-image> = <image> | none

noneという値は背景画像レイヤーとしてカウントされますが、何も描画しません。 幅や高さがゼロの画像、ダウンロードに失敗した画像、表示できない画像(サポート外の形式など)も同様にレイヤーとしてカウントされますが描画されません。

§ 2.1 複数背景画像のレイヤー化を参照してください。background-imageが他のカンマ区切り背景プロパティとどのように連携して 各背景画像レイヤーを形成するかを説明しています。

背景画像を設定する際は、 画像が利用できない場合にテキストとのコントラストを確保するため、 background-colorも指定しましょう。

アクセシビリティの観点から、 背景画像だけで重要な情報を伝えないようにしてください。 Web Content Accessibility Guideline F3 [WCAG20]をご参照ください。 画像は非グラフィカルな表示ではアクセスできず、 特に背景画像は高コントラスト表示モードなどで無効化される場合があります。

注: スタイリッシュな前景画像はCSSの content プロパティで指定できます。 意味的に重要な前景画像は文書マークアップ(例:HTMLの<img>タグ)で提供してください。

注: Media fragmentsで画像の一部のみを表示できます。 CSS Imagesモジュールでは 画像形式のフォールバック構文や表示制御が追加される予定です。

背景画像指定例:
html { background-image: url("marble.svg") }
p { background-image: none }
div { background-image: url(tl.png), url(tr.png) }
main { background-image: radial-gradient(at bottom right, transparent, white); }

実装においては、表示されない(例:他の完全不透明画像の背後など)画像をダウンロード・描画しないなど最適化しても構いません。

2.4. 画像のタイル化: background-repeat プロパティ

Name: background-repeat
値: <repeat-style>#
初期値: repeat
適用対象: 全要素
継承: しない
パーセンテージ: N/A
算出値: リスト。各項目はキーワードのペア(各軸ごとに1つ)
標準順序: 文法通り
アニメーション型: 離散値

このプロパティは背景画像サイズ指定配置された後、どのようにタイル化されるかを指定します。 プロパティ値はカンマ区切りの <repeat-style>値のリストです。

<repeat-style> = repeat-x | repeat-y | [repeat | space | round | no-repeat]{1,2}

<repeat-style>の単一値は以下の意味になります:

repeat-x
repeat no-repeatに算出されます。
repeat-y
no-repeat repeatに算出されます。
repeat
repeat repeatに算出されます。
space
space spaceに算出されます。
round
round roundに算出されます。
no-repeat
no-repeat no-repeatに算出されます。

<repeat-style>値が2つのキーワードからなる場合、 1つ目は水平方向に、 2つ目は垂直方向に適用されます:

repeat
画像は、 背景描画領域を覆うために必要なだけ繰り返されます。
space
画像は、 背景配置領域にクリップされずに収まるだけ繰り返され、 画像間が均等にスペースされて領域を埋めます。 最初と最後の画像は領域の端に接します。 背景描画領域背景配置領域より大きい場合、 パターンは背景描画領域全体を覆うまで繰り返されます。 この方向で画像が2つ収まらない場合のみ background-positionが使われます。
round
画像背景配置領域にちょうど収まるように繰り返されます。もし整数回収まらなければ、画像がリサイズされて収まるようになります。 background-sizeの式を参照。背景描画領域が配置領域より大きい場合、パターンは背景描画領域全体を覆うまで繰り返されます。
no-repeat
画像は1回だけ配置され、この方向に繰り返されません。

2つのキーワードのいずれかがno-repeatでない限り、 背景描画領域全体がタイル化されます。 つまり、単なる縦または横ストリップだけでなく全体が覆われます。

body {
  background: white url("pendant.png");
  background-repeat: repeat-y;
  background-position: center;
}
中央に背景画像があり、その画像がボーダー・パディング・内容領域の上下方向に繰り返される様子。
repeat-yの効果: 背景画像のコピーが中央に配置され、 他のコピーがその上下に並び、 要素の背後に垂直帯を形成します。
body {
  background-image: url(dot.png) white;
  background-repeat: space
}
点が等間隔で並ぶ背景画像を持つ要素の図
spaceの効果: 点の画像が背景全体を覆うようにタイル化され、各画像が等間隔で配置されます。

§ 2.1 複数背景画像のレイヤー化を参照してください。background-repeatが他のカンマ区切り背景プロパティとどのように連携して 各背景画像レイヤーを形成するかを説明しています。

2.5. 画像の固定: background-attachment プロパティ

Name: background-attachment
値: <attachment>#
初期値: scroll
適用対象: 全要素
継承: しない
パーセンテージ: N/A
算出値: リスト。各項目は指定されたキーワード
標準順序: 文法通り
アニメーション型: 離散値

背景画像が指定されている場合、 このプロパティはそれらが ビューポートfixed)に固定されるか、 ボックス(scroll)に合わせてスクロールするか、 または内容(local)に合わせてスクロールするかを指定します。 プロパティ値はカンマ区切りの<attachment>キーワードのリストです。

<attachment> = scroll | fixed | local
fixed
背景はビューポートに固定されます。 ページメディアのようにビューポートがない場合、 fixed背景は ページボックスに固定されるため、すべてのページで繰り返されます。

注: ビューごとにビューポートは1つだけです。 ボックスがスクロールコンテナであっても、 fixed背景はボックスと一緒に動きません。

local
背景はボックス内容に固定されます。 ボックスがスクロール機構を持つ場合、 背景はボックス内容と一緒にスクロールし、 背景描画領域背景配置領域スクロール可能なオーバーフロー領域に対して相対的になります。 スクロール可能なオーバーフロー領域には 枠線領域は含まれないため、 スクロールコンテナでは border-box値は padding-boxと同じように扱ってもかまいません。
scroll
背景はボックス自体に固定され、内容と一緒にスクロールしません。 (事実上ボックスの枠線に付随します。)

画像が固定されていても、 背景描画領域内やクリップされない場合にしか表示されません。 (§ 2.11 特殊要素の背景で背景画像がクリップされない場合について記載があります。) したがって、画像がタイル化されていなければ、表示されない場合もあります。

この例では、スクロールしてもビューポートに「貼り付いた」状態の無限縦帯を作成します。
body {
  background: red url("pendant.gif");
  background-repeat: repeat-y;
  background-attachment: fixed;
}

注: fixed背景に対応しないユーザーエージェント (例えばハードウェア制限などによるもの)は、キーワードfixedを含む宣言を無視します。 例:

body {
  /* 全UA用: */
  background: white url(paper.png) scroll;
  /* fixed背景対応UA用: */
  background: white url(ledger.png) fixed;
}
h1 {
  /* 全UA用: */
  background: silver;
  /* fixed背景対応UA用: */
  background: url(stripe.png) fixed, white url(ledger.png) fixed;
}

§ 2.1 複数背景画像のレイヤー化を参照してください。background-attachmentが他のカンマ区切り背景プロパティとどのように連携して 各背景画像レイヤーを形成するかを説明しています。

2.6. 画像の配置: background-position プロパティ

Name: background-position
値: <bg-position>#
初期値: 0% 0%
適用対象: 全要素
継承: しない
パーセンテージ: background positioning areaのサイズから背景画像のサイズを引いた値に対する割合
算出値: リスト。各項目は左上原点からの水平方向・垂直方向のオフセットのペアで、 各々算出済み<length-percentage>
標準順序: 文法通り
アニメーション型: 繰り返しリスト

背景画像が指定されている場合、 このプロパティはそれぞれのbackground positioning area内で (リサイズ後)の初期位置を指定します。

プロパティ値はカンマ区切りの <bg-position>値のリストです。

<bg-position> = [
  [ left | center | right | top | bottom | <length-percentage> ]
|
  [ left | center | right | <length-percentage> ]
  [ top | center | bottom | <length-percentage> ]
|
  [ center | [ left | right ] <length-percentage>? ] &&
  [ center | [ top | bottom ] <length-percentage>? ]
]

値が1つだけ指定された場合、2つ目の値はcenterとみなされます。 2つ値が指定された場合、 1つ目が<length-percentage>なら水平方向(またはオフセット)、 2つ目が<length-percentage>なら垂直方向(またはオフセット)です。 <length-percentage>値は、 背景画像の左上隅がbackground positioning areaの左上隅からどれだけオフセットされるかを表します。

注: キーワードのペアは順序を入れ替えてもよいですが、 キーワードと長さ・パーセンテージの組み合わせは順番を変えられません。 したがってcenter leftは有効ですが50% leftは無効です。

値が3つまたは4つ指定された場合、 各<length-percentage>はオフセットを表し、 その直前のキーワードでどの端からのオフセットかを指定します。 例えば、background-position: bottom 10px right 20pxは、 下端から10px上、右端から20px左へのオフセットを表します。 3値の場合、足りないオフセットは0とみなされます。

正の値はbackground positioning areaの端から内側へのオフセット、 負の値はbackground positioning areaの端から外側へのオフセットです。

次の宣言は左上隅から指定した(水平, 垂直)オフセットを与えます:
background-position: left 10px top 15px;   /* 10px, 15px */
background-position: left      top     ;   /*  0px,  0px */
background-position:      10px     15px;   /* 10px, 15px */
background-position: left          15px;   /*  0px, 15px */
background-position:      10px top     ;   /* 10px,  0px */
background-position: left      top 15px;   /*  0px, 15px */
background-position: left 10px top     ;   /* 10px,  0px */
<percentage>
水平方向のパーセンテージは (background positioning areaの幅 - 背景画像の幅)に対する割合です。 垂直方向のパーセンテージは (background positioning areaの高さ - 背景画像の高さ)に対する割合です。 画像のサイズはbackground-sizeで指定された値です。
例えば、値ペアが0% 0%なら、 画像の左上隅が通常ボックスのpadding edgeの左上隅に揃います。 100% 100%なら画像の右下隅が領域の右下隅に揃います。 75% 50%なら画像の75%横・50%縦の点が領域の75%横・50%縦の点に配置されます。
要素内で画像が配置される位置の図
background-position: 75% 50%の意味の図です。
<length>
長さ値は固定長オフセットを指定します。 例えば2cm 1cmなら画像の左上隅が background positioning areaの左上隅から右へ2cm・下へ1cmの位置に配置されます。
top
1つまたは2つ値の場合は垂直方向の位置に0%として算出されます。 それ以外の場合は次のオフセットの基準となる上端を指定します。
right
1つまたは2つ値の場合は水平方向の位置に100%として算出されます。 それ以外の場合は次のオフセットの基準となる右端を指定します。
bottom
1つまたは2つ値の場合は垂直方向の位置に100%として算出されます。 それ以外の場合は次のオフセットの基準となる下端を指定します。
left
1つまたは2つ値の場合は水平方向の位置に0%として算出されます。 それ以外の場合は次のオフセットの基準となる左端を指定します。
center
水平方向が指定されていない場合は50%left 50%)として算出され、 垂直方向が指定されていない場合は50%top 50%)として算出されます。
次のbackgroundショートハンド宣言はキーワードを使って background-positionを所定のパーセンテージ値に設定します。
body { background: url("banner.jpeg") right top }    /* 100%   0% */
body { background: url("banner.jpeg") top center }   /*  50%   0% */
body { background: url("banner.jpeg") center }       /*  50%  50% */
body { background: url("banner.jpeg") bottom }       /*  50% 100% */
次の例では、(単一の)画像がビューポートの右下隅に配置されます。
body {
  background-image: url("logo.png");
  background-attachment: fixed;
  background-position: 100% 100%;
  background-repeat: no-repeat;
}
背景画像の位置は左上以外の隅に対しても相対指定できます。 例えば、次の宣言は背景画像を下から10px、右から3emの位置に配置します:
background-position: right 3em bottom 10px

§ 2.1 複数背景画像のレイヤー化を参照してください。background-positionが他のカンマ区切り背景プロパティとどのように連携して 各背景画像レイヤーを形成するかを説明しています。

2.6.1. background-position値のシリアライズ

specified valuecomputed value<bg-position>型では [CSS-VALUES-4]で定義されている通りにシリアライズされます(<position>)。 3値の生成式(<position>では無効)は、 specified valueのシリアライズは等価な4値構文と同じですが、 省略されたオフセットは省略されたままになります。

2.7. 描画領域: background-clip プロパティ

Name: background-clip
値: <visual-box>#
初期値: border-box
適用対象: 全要素
継承: しない
パーセンテージ: N/A
算出値: リスト。各項目は指定されたキーワード
標準順序: 文法通り
アニメーション型: 繰り返しリスト

背景描画領域を決定します。 これは背景が描画される範囲を決定します。 値の意味は以下の通りです:

border-box
背景はborder box内(クリップ)で描画されます。
padding-box
背景はpadding box内(クリップ)で描画されます。
content-box
背景はcontent box内(クリップ)で描画されます。

注: ルート要素は異なる背景描画領域を持つため、 background-clipプロパティは ルート要素に指定しても効果はありません。 § 2.11 特殊要素の背景を参照してください。

注: 背景は常に枠線(border)の背後に描画されます。 [CSS2]付録E「積み重ねコンテキストの詳細な説明」を参照してください。

§ 4.2 角の形状border-radius背景描画領域の形状にどのように影響するかを説明しています。

§ 2.1 複数背景画像のレイヤー化background-clipが他のカンマ区切り背景プロパティとどのように連携して 各背景画像レイヤーを形成するかを説明しています。

2.8. 配置領域: background-origin プロパティ

Name: background-origin
値: <visual-box>#
初期値: padding-box
適用対象: 全要素
継承: しない
パーセンテージ: N/A
算出値: リスト。各項目は指定されたキーワード
標準順序: 文法通り
アニメーション型: 繰り返しリスト

このプロパティは背景配置領域を決定します。 これは背景画像が配置される領域です。 複数のボックス断片(例:複数行のインラインボックス、複数ページのボックス)として描画される要素については、 box-decoration-break [CSS-BREAK-3]が どのボックスを対象にして背景配置領域を決定するかを指定します。

padding-box
配置はpadding boxに対して行われます。 (単一ボックスの場合、0 0はpadding edgeの左上隅、100% 100%は右下隅です。)
border-box
配置はborder boxに対して行われます。
content-box
配置はcontent boxに対して行われます。

このlayerbackground-attachment値が fixedである場合、 このプロパティは効果がありません。 この場合、背景配置領域初期包含ブロックです。

注: background-clippadding-boxbackground-originborder-boxbackground-positiontop left (初期値)で、 要素がゼロでない枠線(border)を持つ場合、 背景画像の上端・左端がクリップされることになります。

§ 2.1 複数背景画像のレイヤー化background-originが他のカンマ区切り背景プロパティとどのように連携して 各背景画像レイヤーを形成するかを説明しています。

2.9. 画像サイズ指定: background-size プロパティ

Name: background-size
値: <bg-size>#
初期値: auto
適用対象: 全要素
継承: しない
パーセンテージ: 本文参照
算出値: リスト。各項目は軸ごとのサイズのペアで、 キーワードまたは算出済み<length-percentage>
標準順序: 文法通り
アニメーション型: 繰り返しリスト

このプロパティは各背景画像のサイズを指定します。 プロパティ値はカンマ区切りの <bg-size>値のリストです。

<bg-size> = [ <length-percentage [0,∞]> | auto ]{1,2} | cover | contain

値の意味は以下の通りです:

contain
画像の自然なアスペクト比(あれば)を保ったまま、 幅・高さの両方が背景配置領域内に収まる最大サイズに拡大・縮小します。
cover
画像の自然なアスペクト比(あれば)を保ったまま、 幅・高さの両方が背景配置領域を完全に覆う最小サイズに拡大・縮小します。
[ <length-percentage [0,∞]> | auto ]{1,2}
1つ目の値は画像の幅、 2つ目の値は高さを指定します。 1値のみの場合、2つ目はautoとみなされます。

<percentage>背景配置領域に対する割合です。

一方の軸がautoの場合、 他方の軸のサイズと画像の自然なアスペクト比に基づいて解決されます。 それがなければ画像の自然サイズを用い、 それもなければ100%として扱います。

両方ともautoの場合は、 画像の自然な幅高さ を(あれば)使い、 欠けている方は上記の通りautoとして扱います。 画像に自然サイズがない場合は、 containと同様に決定されます。

負の値は無効です。

例をいくつか示します。 最初の例は背景画像を両軸独立に引き伸ばし、 内容領域全体を覆うようにします:
div {
  background-image: url(plasma.png);
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-origin: content-box }

2番目の例は画像を横方向にちょうど2つ収まるように引き伸ばします。 アスペクト比は保持されます:

p {
  background-image: url(tubes.png);
  background-size: 50% auto;
  background-origin: border-box }

この例は背景画像を15x15ピクセルに強制します:

p {
  background-size: 15px 15px;
  background-image: url(tile.png)}

この例は画像の自然サイズを使います。 この挙動はCSSレベル1および2では唯一です。

body {
background-size: auto;            /* default */
background-image: url(flower.png) }

次の例では、画像の高さが33.3%に切り上げられます(指定値は30%)。 30%では画像3つは完全に収まりますが4つ目は部分的しか収まりません。 切り上げ後は画像3つがぴったり収まります。 幅は背景配置領域幅の20%で切り上げはありません。

p {
  background-image: url(chain.png);
  background-repeat: no-repeat round;
  background-size: 20% 30% }

background-repeatが一方または両方の軸でroundの場合、 2段階目があります。 UAはその軸(または両軸)で画像を拡大・縮小し、 背景配置領域にちょうど整数回収まるようにします。 幅の場合(高さも同様):

X ≠ 0 が1段階目後の画像幅、 Wが背景配置領域幅とすると、 切り上げ幅X' = W / round(W / X) (round()は最も近い自然数(ゼロより大きい整数)を返す関数)。

background-repeatが一方のみroundbackground-sizeが他方でautoの場合、 3段階目があります: 他方の軸は元のアスペクト比を維持するように拡大・縮小されます。

この例では背景画像は自然サイズで表示されます:
div {
  background-image: url(image1.png);
  background-repeat: repeat;         /* default */
  background-size: auto }            /* default */

次の例では、背景は幅3em、高さは元のアスペクト比を維持して拡大・縮小されます:

div {
  background-image: url(image2.png);
  background-repeat: repeat;         /* default */
  background-size: 3em }             /* = '3em auto' */

次の例では、背景は幅約3emで、 背景幅にぴったり収まるように拡大・縮小されます。 高さは元のアスペクト比を維持して拡大・縮小されます:

div {
  background-image: url(image3.png);
  background-repeat: round repeat;
  background-size: 3em auto }

次の例では背景画像は幅3em・高さは元のアスペクト比で計算されるかそれよりやや小さくなります:

div {
  background-image: url(image4.png);
  background-repeat: repeat round;
  background-size: 3em auto }

次の例では背景画像は高さ約4emで、 背景高さにぴったり収まるように拡大・縮小されます。 幅は高さ4emに対応する元のアスペクト比で計算され、 背景幅にぴったり収まるように拡大・縮小されます:

div {
  background-image: url(image5.png);
  background-repeat: round;
  background-size: auto 4em }

背景画像の幅または高さがゼロになる場合、 画像は表示されません。 (効果は透明画像と同じです。)

§ 2.1 複数背景画像のレイヤー化background-sizeが他のカンマ区切り背景プロパティとどのように連携して 各背景画像レイヤーを形成するかを説明しています。

2.10. 背景ショートハンド: background プロパティ

Name: background
値: <bg-layer>#? , <final-bg-layer>
初期値: 各プロパティ参照
適用対象: 全要素
継承: しない
パーセンテージ: 各プロパティ参照
算出値: 各プロパティ参照
標準順序: 文法通り
アニメーション型: 各プロパティ参照

backgroundプロパティは、ほとんどの背景プロパティをスタイルシートの同じ場所で設定できるショートハンドプロパティです。 カンマ区切りの項目数が背景画像レイヤー数を定義します。 有効な宣言の場合、各レイヤーごとに ショートハンドはまずbackground-imagebackground-positionbackground-sizebackground-repeatbackground-originbackground-clipbackground-attachmentの各プロパティを その初期値に設定し、 宣言でこのレイヤーに明示的に指定された値だけを上書きします。 最後にbackground-colorは指定された色に、なければ初期値に設定されます。

このプロパティ値はカンマ区切りの値のリストです:

<bg-layer> = <bg-image> || <bg-position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <visual-box> || <visual-box>
<final-bg-layer> =  <bg-image> || <bg-position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <visual-box> || <visual-box> || <'background-color'>

注: 色は<final-bg-layer>で許可されますが、<bg-layer>では許可されません。

1つの<visual-box>値がある場合、 background-originおよびbackground-clipの両方をその値に設定します。 2つ値があれば、 1つ目がbackground-origin、 2つ目がbackground-clipを設定します。

次の例の1つ目のルールでは、background-color値のみ指定されており、 他の個別プロパティは初期値に設定されます。2つ目のルールでは多くの個別プロパティが指定されています。
body { background: red }
p { background: url("chess.png") 40% / 10em gray
                round fixed border-box; }

1つ目のルールは以下と同等です:

body {
    background-color: red;
    background-position: 0% 0%;
    background-size: auto;
    background-repeat: repeat;
    background-clip: border-box;
    background-origin: padding-box;
    background-attachment: scroll;
    background-image: none }

2つ目は以下と同等です:

p {
    background-color: gray;
    background-position: 40% 50%;
    background-size: 10em auto;
    background-repeat: round;
    background-clip: border-box;
    background-origin: border-box;
    background-attachment: fixed;
    background-image: url(chess.png) }
次の例は背景色(#CCC)と背景画像(url(metal.jpg))の両方を設定する方法を示しています。 画像は要素の幅全体にリサイズされます:
E { background: #CCC url("metal.jpg") top left / 100% auto no-repeat}
別の例では同等性を示しています:
div { background: padding-box url(paper.jpg) white center }
div {
    background-color: white;
    background-image: url(paper.jpg);
    background-repeat: repeat;
    background-attachment: scroll;
    background-position: center;
    background-clip: padding-box;
    background-origin: padding-box;
    background-size: auto auto }
次の宣言は複数のカンマ区切り値を持っています:
background: url(a.png) top left no-repeat,
            url(b.png) center / 100% 100% no-repeat,
            url(c.png) white;

これは以下と同等です:

background-image:      url(a.png),  url(b.png),          url(c.png);
background-position:   top left,    center,              top left;
background-repeat:     no-repeat,   no-repeat,           repeat;
background-clip:       border-box,  border-box,          border-box;
background-origin:     padding-box, padding-box,         padding-box;
background-size:       auto auto,   100% 100%,           auto auto;
background-attachment: scroll,      scroll,              scroll;
background-color:      white;

2.11. 特殊要素の背景

文書キャンバスは文書がレンダリングされる無限の面です。[CSS2] 要素はキャンバスに対応しないため、 キャンバスのスタイリングを可能にするために CSSはルート要素(HTMLの場合は<body>要素)の背景を以下のように伝播します。 ただし、キャンバス用の背景となる要素がdisplay: noneの場合、 キャンバス背景は透明になります。

キャンバス背景が不透明でない場合、 下のキャンバス面が透けて見えます。 キャンバス面のテクスチャはUA依存ですが、 (通常は不透明な白です)。

2.11.1. キャンバス背景とルート要素

ルート要素の背景はキャンバス背景となり、その背景描画領域は キャンバス全体を覆います。 ただし画像はルート要素のボックスに対してサイズ指定・配置され、 その要素だけに描画されるかのように扱われます。 (つまり背景配置領域はルート要素基準で決まります。) ルート要素はこの背景を再度描画しません。 つまり、背景の使用値transparentです。

2.11.2. キャンバス背景とHTML <body> 要素

ルート要素がHTML HTML要素 またはXHTML html要素[HTML]の場合: computed valuebackground-imageルート要素に対しnonebackground-colortransparentのとき、 ユーザーエージェントはその要素の最初の HTML BODYまたはXHTML body子要素から 背景プロパティのcomputed valuesを伝播しなければなりません。 そのBODY要素の背景プロパティの使用値初期値であり、 伝播された値はルート要素に指定されたかのように扱われます。 HTML文書の著者はキャンバス背景をBODY要素で指定することが推奨されます。 HTML要素よりも。

注: containmentを使うと HTML body 要素のこの特別な扱いは無効化されます。 詳しくはCSS Containment 1 § 2 強力なcontainment: containプロパティ参照。

これらの規則により、次のHTML文書のキャンバスは「marble」背景になります:
<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.0//EN'
  >
<html>
  <head>
    <title>Setting the canvas background</title>
    <style type="text/css">
       body { background: url("http://example.org/marble.png") }
    </style>
  </head>
  <body>
    <p>My background is marble.</p>
  </body>
</html>

2.11.3. ::first-line疑似要素の背景

::first-line疑似要素は 背景に関してインラインレベル要素として扱われます ([CSS2] §5.12.1参照)。 つまり、例えば左揃えの1行目では、 背景が必ず右端まで伸びるとは限りません。

3. 枠線

borderは、定義済みスタイル (実線、二重線、点線、疑似3D枠線など)または画像のいずれかで表現できます。 前者の場合は、さまざまなプロパティで スタイル(border-style)、 色(border-color)、 太さ(border-width) を指定します。

3.1. 線の色:border-color プロパティ

Name: border-top-color, border-right-color, border-bottom-color, border-left-color
値: <color>
初期値: currentColor
適用対象: 全要素(ただしルビベースコンテナルビ注釈コンテナは除く)
継承: しない
パーセンテージ: N/A
算出値: 算出済み色
標準順序: 文法通り
アニメーション型: 算出値による
論理プロパティグループ: border-color
Name: border-color
値: <color>{1,4}
初期値: (各プロパティ参照)
適用対象: 全要素(ただしルビベースコンテナルビ注釈コンテナは除く)
継承: しない
パーセンテージ: N/A
算出値: 各プロパティ参照
標準順序: 文法通り
アニメーション型: 各プロパティ参照

これらのプロパティは、borderの前景border-styleプロパティで指定された枠線に設定します。

border-colorプロパティは、ショートハンドプロパティであり、border-top-colorborder-right-colorborder-bottom-colorborder-left-colorを1つの宣言で設定します。

値が1つだけの場合は全辺に適用されます。 2つの場合は上・下に1つ目、右・左に2つ目が適用されます。 3つの場合は上に1つ目、右・左に2つ目、下に3つ目が適用されます。 4つの場合はそれぞれ上、右、下、左に適用されます。

3.2. 線パターン:border-style プロパティ

Name: border-top-style, border-right-style, border-bottom-style, border-left-style
値: <line-style>
初期値: none
適用対象: 全要素(ただしルビベースコンテナルビ注釈コンテナは除く)
継承: しない
パーセンテージ: N/A
算出値: 指定キーワード
標準順序: 文法通り
アニメーション型: 離散値
論理プロパティグループ: border-style
Name: border-style
値: <line-style>{1,4}
初期値: (各プロパティ参照)
適用対象: 全要素(ただしルビベースコンテナルビ注釈コンテナは除く)
継承: しない
パーセンテージ: N/A
算出値: 各プロパティ参照
標準順序: 文法通り
アニメーション型: 各プロパティ参照

これらのプロパティは、borderを表示するかどうか、 そして表示する場合はどのスタイルで描画するか(border imageで上書きされない限り)を制御します。

border-styleプロパティは、ショートハンドプロパティであり、border-top-styleborder-right-styleborder-bottom-styleborder-left-styleを1つの宣言で設定します。

値が1つだけの場合は全辺に適用されます。 2つの場合は上・下に1つ目、右・左に2つ目が適用されます。 3つの場合は上に1つ目、右・左に2つ目、下に3つ目が適用されます。 4つの場合はそれぞれ上、右、下、左に適用されます。

スタイルは<line-style>キーワードで指定されます:

<line-style> = none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset

値の意味は以下の通りです:

none
枠線なし。 色・太さは無視されます(枠線の太さは0)。 border-image-widthの初期値も0になります。
hidden
noneと同じですが、 border-collapsedテーブルの衝突解決ルールで挙動が異なります [CSS2]
dotted
丸い点の連続。
dashed
角のある破線の連続。
solid
一本線。
double
平行な実線2本、間にスペースあり。 (線の太さは指定されませんが、2本の線とスペースの合計がborder-widthと同じになります。)
groove
キャンバスに彫り込まれたような見た目。 (通常、指定したborder-colorより少し明るい・暗い2色で「影」を作ることで実現されます。)
ridge
キャンバスから盛り上がったような見た目。
inset
枠線内側の内容がキャンバスに沈み込んだような見た目。 ridgeと同様に、枠線の折りたたみモデルでは扱われます。[CSS2]
outset
枠線内側の内容がキャンバスから浮き上がったような見た目。 grooveと同様に、枠線の折りたたみモデルでは扱われます。[CSS2]

枠線は要素の背景の手前、内容の背後(重なっている場合)に描画されます。

定義済み枠線スタイルの例
定義済み枠線スタイルの描画例。

注: 枠線色が黒や白に近い場合、3D効果 (grooveridgeinsetoutset)の色計算は中間色と異なる場合があります。

注: 点線や破線の間隔や破線の長さは制御できません。 実装では角が対称になるような間隔を選ぶことが推奨されます。

注: 異なるスタイルの枠線の角をどのように接合するかは本仕様では定義しません。 また、角丸ではパディングが角の半径より小さい場合、角や内容が重なることがあります。

3.3. 線の太さ:border-width プロパティ

Name: border-top-width, border-right-width, border-bottom-width, border-left-width
値: <line-width>
初期値: medium
適用対象: 全要素(ただしルビベースコンテナルビ注釈コンテナは除く)
継承: しない
パーセンテージ: N/A
算出値: 絶対長さ、枠線幅としてスナップされた値;枠線スタイルがnoneまたはhiddenならゼロ
標準順序: 文法通り
アニメーション型: 算出値による
論理プロパティグループ: border-width
Name: border-width
値: <line-width>{1,4}
初期値: (各プロパティ参照)
適用対象: 全要素(ただしルビベースコンテナルビ注釈コンテナは除く)
継承: しない
パーセンテージ: 各プロパティ参照
算出値: 各プロパティ参照
標準順序: 文法通り
アニメーション型: 各プロパティ参照

これらのプロパティはborderの太さ、すなわち枠線幅を指定します。ここで

<line-width> = <length [0,∞]> | thin | medium | thick

負の値は無効です。 thinmediumthickキーワードは、 それぞれ1px3px5pxに相当します。

border-widthプロパティは、ショートハンドプロパティであり、border-top-widthborder-right-widthborder-bottom-widthborder-left-widthを1つの宣言で設定します。

値が1つだけの場合は全辺に適用されます。 2つの場合は上・下に1つ目、右・左に2つ目が適用されます。 3つの場合は上に1つ目、右・左に2つ目、下に3つ目が適用されます。 4つの場合はそれぞれ上、右、下、左に適用されます。

注: 初期幅はmediumですが、 初期スタイルはnoneです。 したがって、使用初期幅は0となります。

3.4. 枠線ショートハンドプロパティ

Name: border-top, border-right, border-bottom, border-left
値: <line-width> || <line-style> || <color>
初期値: 各プロパティ参照
適用対象: 全要素(ただしルビベースコンテナルビ注釈コンテナは除く)
継承: しない
パーセンテージ: N/A
算出値: 各プロパティ参照
標準順序: 文法通り
アニメーション型: 各プロパティ参照

これらのショートハンドプロパティは、 ボックスの上・右・下・左border-widthborder-colorborder-styleを設定します。 省略された値は初期値となります。

Name: border
値: <line-width> || <line-style> || <color>
初期値: 各プロパティ参照
適用対象: 全要素(ただしルビベースコンテナルビ注釈コンテナは除く)
継承: しない
パーセンテージ: N/A
算出値: 各プロパティ参照
標準順序: 文法通り
アニメーション型: 各プロパティ参照

borderプロパティは、ボックスの全枠線のborder-widthborder-colorborder-styleを一括設定するショートハンドプロパティです。 marginpaddingのショートハンドプロパティと異なり、 borderプロパティでは四辺で異なる値は設定できません。 それには他のborderプロパティを使う必要があります。

borderショートハンドはborder-imageも初期値にリセットします。 そのため、著者はborderショートハンドを使い、 他のショートハンドや個別プロパティよりも先に枠線設定を上書きすることが推奨されます。 これによりborder-imageもリセットされ、 新しいスタイルが確実に適用されます。

注: CSS作業グループはborderショートハンドが将来的に全てのborderプロパティもリセットすることを意図しています。 例えば今後border-charactersプロパティが追加されて枠線にグリフを使えるようになった場合も、 borderショートハンドでリセットされます。 borderショートハンドで枠線をリセットすることで、 将来どんなプロパティが追加されても「ブランクキャンバス」が保証されます。

例えば、下記の最初の規則は後に示す5つの規則と同等です:
p { border: solid red }
p {
  border-top: solid red;
  border-right: solid red;
  border-bottom: solid red;
  border-left: solid red;
  border-image: none;
}

これらのプロパティは機能が重複する部分があるため、 規則の記述順が重要です。

次の例を考えてみましょう:
blockquote {
  border-color: red;
  border-left: double;
  color: black
}

この例では、 左枠線の色は黒、他の枠線は赤になります。 これはborder-leftが幅・スタイル・色を設定するためです。 border-leftプロパティで色が指定されなければ、 color プロパティで決まります。 colorプロパティがborder-leftより後に設定されていても関係ありません。

4. 角丸

4.1. 曲線半径:border-radius プロパティ

Name: border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius
値: <length-percentage [0,∞]>{1,2}
初期値: 0
適用対象: 全要素(詳細は本文参照)
継承: しない
パーセンテージ: 対応するborder boxの寸法を参照
算出値: 算出済み<length-percentage>値のペア
標準順序: 文法通り
アニメーション型: 算出値による
論理プロパティグループ: border-radius
Name: border-radius
値: <length-percentage [0,∞]>{1,4} [ / <length-percentage [0,∞]>{1,4} ]?
初期値: 各プロパティ参照
適用対象: 全要素(詳細は本文参照)
継承: しない
パーセンテージ: 対応するborder boxの寸法を参照
算出値: 各プロパティ参照
標準順序: 文法通り
アニメーション型: 各プロパティ参照

<length-percentage>値2つはborder-*-radiusプロパティの値であり、 外側border edgeの角の形状を定義する四分円楕円の半径を表します(下図参照)。 1つ目は水平方向の半径、2つ目は垂直方向の半径です。 2つ目が省略された場合は1つ目の値が使われます。 どちらかがゼロなら角は丸くならず、四角になります。 水平方向のパーセンテージ指定はborder boxの幅を、 垂直方向はborder boxの高さを基準にします。 負の値は無効です。

内接楕円の図
border-top-left-radius: 55pt 25ptの2つの値が角の曲率を定義します。
この例は15em幅・10em高の楕円を描画します:
DIV.standout {
    width: 13em;
    height: 8em;
    border: solid black 1em;
    border-radius: 7.5em 5em }

border-radiusショートハンドは4つのborder-*-radiusプロパティを一括設定します。 スラッシュの前後で値がある場合は、前が水平方向、後ろが垂直方向の半径を設定します。 スラッシュがなければ両軸とも同じ値です。 4つの値は順に左上・右上・右下・左下です。 左下省略時は右上、右下省略時は左上、右上省略時は左上と同じ値になります。

border-radius: 4em;

これは次と同等です:

border-top-left-radius:     4em;
border-top-right-radius:    4em;
border-bottom-right-radius: 4em;
border-bottom-left-radius:  4em;

さらに

border-radius: 2em 1em 4em / 0.5em 3em;

これは次と同等です:

border-top-left-radius:     2em 0.5em;
border-top-right-radius:    1em 3em;
border-bottom-right-radius: 4em 0.5em;
border-bottom-left-radius:  1em 3em;

4.2. 角の形状

padding edge(内側枠線)の半径は 外側枠線半径から対応する枠線の太さを差し引いた値です。 これが負の場合は内側半径はゼロになります。 (この場合枠線内側曲線の中心と外側曲線の中心が一致しないことがあります。) 同様にcontent edgeの半径は padding edgeの半径から対応するpaddingを引いた値(負ならゼロ)です。 曲線領域における枠線・パディングの太さは隣接辺から補間され、 隣接する2辺の太さが異なる場合、角は太い方から細い方への滑らかな遷移を見せます。

すべての枠線スタイル(soliddottedinsetなど) は枠線の曲線に沿って描画されます。

異なる太さの枠線での角丸効果
角丸が接続する2つの枠線の太さが異なる場合(左)、 角丸が枠線の半径より太い枠線に適用された場合(右)の効果。

注: 角の外側曲線中心が反対側のpadding edge(反対側のborder area)を超える場合、 内側曲線は完全な四分円楕円にはなりません。

p { width: 70px; height: 70px; border: solid 30px;
border-color: orange orange silver silver;
border-top-right-radius: 100%; }
曲線の角は左上から右上、右下へ弧を描くが、反対側に枠線太さがあるためpadding edgeの曲線は外側弧の端点より内側から始まる。
border-radiusの曲線が反対側の枠線領域に食い込む場合、 padding edgeの弧は90°未満になる。

margin edgeborder edgeの外側に位置するため、 各枠線半径に対応するマージンの厚みを加算して半径を計算します。 ただし、枠線半径が小さく鋭い角を作る場合(丸角と鋭角の連続性を保つため)、 枠線半径がマージンより小さい場合は、 コーナー半径の計算でマージンを比率 1 + (r-1)3rは枠線半径/マージン)で乗算します。

4.3. 角のクリッピング

border imagesborder-radiusの影響を受けませんが、 塗りやイベントハンドリングをborderpaddingcontentエッジにクリップする他の効果は、 それぞれの曲線にクリップしなければなりません。 例えば、 背景はbackground-clipで指定された曲線、 overflowvisible以外の値なら 曲線状のpadding edge(両軸のoverflowvisibleでないとき)、 置換要素の内容は曲線状のcontent edge、 ポインターイベントは曲線状のborder edgeなどにクリップされます。

注: border-radiusが要素のインタラクティブ領域を減らすため、 著者は残されたインタラクティブ領域がターゲットプラットフォームの推奨最小値を満たしていることを確認してください。 特に、推奨される最小タッチターゲットサイズに準拠するには border-radius使用時に幅・高さを大きくする必要がある場合があります。

この例では適切なパディングを追加し、 内容が角からはみ出さないようにしています。 枠線はありませんが、背景は角丸になります。
DIV {
    background: black;
    color: white;
    border-radius: 1em;
    padding: 1em }

4.4. 色・スタイルの遷移

色やスタイルの遷移は、 枠線半径2つと内側曲線中心(枠線半径がborder widthより小さい場合はpadding edgeの角を表す点)を含む 最小矩形と交差する枠線区間内に収めなければなりません。

隣接する枠線のいずれかがゼロ幅の場合、 もう一方の枠線が遷移領域全体を占有します。 それ以外の場合、 隣接枠線間の色・スタイル遷移の中心は枠線幅比の連続単調関数となる曲線上の1点です。 ただしこの遷移の見た目や比から曲線上の点へのマッピング関数は定義されていません。

曲線角での遷移領域イラスト
これらの角形状では、色とスタイルの遷移は緑色領域内に収める必要があります。 Dのケースでは、枠線半径で定義される矩形が内側曲線中心(鋭角)を含まないため、遷移領域はその角も含むよう拡張されます。 遷移は遷移領域全体を使っても使わなくてもよく、 例えば2つの実線枠線間のグラデーション遷移は 外側・内側半径の端を結ぶ暗緑色領域(Dの例)だけを使う場合もあります。

4.5. 曲線の重なり

角丸曲線は重なってはなりません。 隣接する枠線半径の合計がborder boxのサイズを超える場合、 UAは全ての枠線半径の使用値を重なりがなくなるまで比例的に縮小しなければなりません。 半径縮小のアルゴリズムは次の通りです:

f = min(Li/Si) (i ∈ {top, right, bottom, left}、Siは辺i上の隣接角の半径合計、 Ltop = Lbottom = ボックスの幅、 Lleft = Lright = ボックスの高さ)。 f < 1なら全角半径をf倍して縮小します。

注: この式は四分円は四分円のまま、 大きい半径は小さい半径より大きく保ちますが、 すでに十分小さい角も減らす場合があり、 近接要素の枠線が同じ見た目になるはずが異なって見えることがあります。

曲線がスクロールバーなどのUI要素に干渉する場合、 UAは影響を受ける枠線半径のみ必要なだけ(それ以上は不可)さらに縮小してもかまいません。

例えば、下記のA枠線は下図の
box-sizing: border-box;
width: 6em;
height: 2.5em;
border-radius: 0.5em 2em 0.5em 2em

高さ(2.5em)は指定された半径(0.5em+2.0em)に十分です。 ただし高さが2emの場合、

box-sizing: border-box;
width: 6em;
height: 2em;
border-radius: 0.5em 2em 0.5em 2em

全角を0.8倍に縮小する必要があります。 使用される枠線半径は 0.4em(0.5em→)と1.6em(2em→)になります。 B枠線は下図参照。

[画像:2つの小さい角丸と2つの大きい角丸が対角線上に並ぶ矩形]
これらの角丸は 'width: 6em; height: 2.5em; border-radius: 0.5em 2em 0.5em 2em' のA、2emにした場合はBです。

4.6. テーブルへの影響

border-radiusプロパティは tableinline-tabletable-cellボックスに分離枠線モード(border-collapse: separate)で適用されます。 border-collapsecollapseの場合は効果がありません。

5. 枠線画像

著者は枠線スタイルの代わりに画像を指定できます。 この場合、枠線のデザインはborder-image-sourceで指定された画像の辺や角から取得され、 そのピースは枠線画像領域のサイズに合わせてスライス・スケール・引き伸ばしされます。 border-imageプロパティはレイアウトに影響しません。 ボックスやその内容、周囲の内容のレイアウトは border-widthおよびborder-styleプロパティのみで決まります。

この例は、 上下の枠線がオレンジ色の菱形の整数個で構成され、 左右は引き伸ばした菱形1つとなります。 角は色違いの菱形です。 タイル画像は以下です。菱形以外は透明です:

枠線用タイル

画像は81×81ピクセルで9つに等分する必要があります。 スタイル規則は次のようになります:

DIV {
  border: double orange 1em;
  border-image: url("border.png") 27 round stretch;
 }

12×5emのDIVに適用すると、結果は次のようになります:

菱形枠線の要素

これはより複雑な例で、 枠線画像がフォールバックの枠線スタイルと対応し、枠線領域を超えて拡張できることを示します。 枠線画像は角で拡張効果のある波状の緑枠線です:
図:枠線画像は角で波が強調され、切り離された緑円で終端される。4つの124pxの切れ目で9分割。
border-image-source画像、 124px位置でのborder-image-slice分割。

他の枠線プロパティは以下のようにタイル配置に作用します:

図:画像なし時は緑二重枠線。画像ありは波状緑枠線、角で波が伸びる。角タイルは124px正方形、辺タイルは整数回繰り返し。角効果でパディング領域に深く食い込む。枠線画像全体は31pxアウトセット。
全border-imageプロパティの相互作用と画像有無の描画例。

ここではborder-widthは12pxですが、 border-image-widthは124pxになります。 枠線画像領域border boxから31pxアウトセットし margin areaまで広がります。 枠線画像のロードに失敗した場合(またはUAがサポートしない場合)、 フォールバック描画は緑の二重枠線になります。

borderショートハンドはborder-imageをリセットします。 これにより全枠線効果を簡単にオフ/リセットできます:
.notebox {
  border: double orange;
  /* 先に'border'ショートハンドを設定すること。そうしないと'border-image'が消される */
  border-image: url("border.png") 30 round;
  /* 他の'border'プロパティは後から設定可能 */
  border-width: thin thick;
}
...
.sidebar .notebox {
  box-shadow: 0 0 5px gray;
  border-radius: 5px;
  border: none; /* 全枠線オフ */
  /* 'border'ショートハンドは'border-image'もリセット */
}

5.1. 画像ソース:border-image-sourceプロパティ

Name: border-image-source
値: none | <image>
初期値: none
適用対象: 全要素(ただしborder-collapsecollapseの内部テーブル要素は除く)
継承: しない
パーセンテージ: N/A
算出値: キーワードnoneまたは算出済み<image>
標準順序: 文法通り
アニメーション型: 離散値

枠線描画をborder-styleプロパティによる描画の代わりに 画像で行うことを指定します。 fillキーワードがborder-image-sliceで指定された場合、 追加の画像背景としても使われます。 値がnone、画像が表示できない、またはプロパティが適用されない場合は枠線スタイルが使われます。 そうでなければ、要素のborder-style枠線は描画されず、 この枠線画像が 以下のセクションに従って描画されます。

5.2. 画像のスライス:border-image-slice プロパティ

Name: border-image-slice
値: [<number [0,∞]> | <percentage [0,∞]>]{1,4} && fill?
初期値: 100%
適用対象: 全要素(ただしborder-collapsecollapseの内部テーブル要素は除く)
継承: しない
パーセンテージ: 画像サイズに対する割合
算出値: 4値(数値またはパーセンテージ)、指定時はfillキーワード付き
標準順序: 文法通り
アニメーション型: 算出値による

このプロパティは画像の上・右・下・左端から内側へのオフセットを指定し、 画像を9分割します(4つの角・4つの辺・中央)。 中央画像部分は(fillキーワードがなければ)破棄され(完全透明扱い)、 キーワード指定時のみ保持されて背景上に描画されます。 (詳細は枠線画像の描画参照。)

値が1つだけの場合は全辺に適用されます。 2つの場合は上・下に1つ目、右・左に2つ目が適用されます。 3つの場合は上に1つ目、右・左に2つ目、下に3つ目が適用されます。 4つの場合はそれぞれ上、右、下、左に適用されます。

<percentage [0,∞]>
パーセンテージは画像サイズ基準です: 水平方向は画像の幅、垂直方向は高さ。
<number [0,∞]>
数値は(ラスター画像の場合)画像のピクセル数、 ベクター画像の場合はベクトル座標を表します。
fill
fillキーワード指定時は枠線画像中央部分も保持されます。 (デフォルトは破棄、空扱い。)

負の値は無効です。 算出値が画像サイズより大きい場合は100%として扱います。

border-image-slice値で指定された領域は重なっても構いません。 ただし右幅と左幅の合計が画像幅以上なら 上下辺・中央部分の画像は空となり、透明画像の場合と同じ効果になります。 上下値も同様です。

スライス決定に画像のサイズ指定が必要な場合 (例:自然寸法のないSVG画像など)は、 デフォルトサイズアルゴリズムで サイズ指定なし・枠線画像領域デフォルトオブジェクトサイズとしてサイズ決定します。

図:画像を水平・垂直に2本ずつ切る
25% 30% 12% 20%に対応する切れ目の図。

5.3. 描画領域:border-image-width プロパティ

Name: border-image-width
値: [ <length-percentage [0,∞]> | <number [0,∞]> | auto ]{1,4}
初期値: 1
適用対象: 全要素(ただしborder-collapsecollapseの内部テーブル要素は除く)
継承: しない
パーセンテージ: border image areaの幅・高さ基準
算出値: 4値(数値、キーワードauto、または算出済み<length-percentage>値)
標準順序: 文法通り
アニメーション型: 算出値による

枠線画像枠線画像領域という領域内に描画されます。 この領域の境界はデフォルトでborder boxに一致します。 詳しくはborder-image-outset参照。

border-image-widthの4値は、 枠線画像領域を9つの領域に分割するオフセットです。 オフセットは、領域の上・右・下・左からの内側距離をそれぞれ表します。

値が1つだけの場合は全辺に適用されます。 2つの場合は上・下に1つ目、右・左に2つ目が適用されます。 3つの場合は上に1つ目、右・左に2つ目、下に3つ目が適用されます。 4つの場合はそれぞれ上、右、下、左に適用されます。

値の意味:

<length-percentage [0,∞]>
パーセンテージは枠線画像領域基準: 水平方向は幅、垂直方向は高さ。
<number [0,∞]>
数値は対応する算出済みborder-widthの倍数を表します。
auto
auto指定時は使用されるborder-image-widthは 対応する画像スライスの自然な幅または高さ(該当する方)です(border-image-slice参照)。 画像に必要な自然寸法がない場合は対応する算出済みborder-widthが使われます。

負の値はborder-image-width値として無効です。

対向するborder-image-widthオフセットが重なるほど大きい場合、 全border-image-widthオフセットの使用値は比例的に縮小されます。 数式: Lwidth枠線画像領域の幅)、Lheight(高さ)、 Wside(各辺のborder-image-widthオフセット)。 f = min(Lwidth/(Wleft+Wright), Lheight/(Wtop+Wbottom)). f < 1の場合、全Wf倍に縮小します。

5.4. 枠線のはみ出し:border-image-outsetプロパティ

Name: border-image-outset
値: [ <length [0,∞]> | <number [0,∞]> ]{1,4}
初期値: 0
適用対象: 全要素(ただしborder-collapsecollapseの内部テーブル要素は除く)
継承: しない
パーセンテージ: N/A
算出値: 4値(数値または絶対長さ)
標準順序: 文法通り
アニメーション型: 算出値による

値は枠線画像領域border boxよりどれだけ外側に広がるかを指定します。

値が1つだけの場合は全辺に適用されます。 2つの場合は上・下に1つ目、右・左に2つ目が適用されます。 3つの場合は上に1つ目、右・左に2つ目、下に3つ目が適用されます。 4つの場合はそれぞれ上、右、下、左に適用されます。

<length [0,∞]>
指定された長さ分はみ出します。
<number [0,∞]>
対応する算出済みborder-widthの倍数分はみ出します。

負の値は無効です。

枠線画像のうちborder box外に描画された部分は スクロールをトリガーしません。 またマウスイベントに対して不可視であり、 要素に代わってイベントをキャプチャしません。

注: スクロール機構は引き起こしませんが、 はみ出し画像は祖先やビューポートでクリップされることがあります。

5.5. 画像タイル化:border-image-repeat プロパティ

Name: border-image-repeat
値: [ stretch | repeat | round | space ]{1,2}
初期値: stretch
適用対象: 全要素(ただしborder-collapsecollapseの内部テーブル要素は除く)
継承: しない
パーセンテージ: N/A
算出値: 2キーワード(各軸ごとに1つ)
標準順序: 文法通り
アニメーション型: 離散値

このプロパティは枠線画像の各辺・中央部分の画像がどのように拡大・タイル化されるかを指定します。 1つ目のキーワードは上・中央・下部分の水平方向の拡大・タイル化、 2つ目は左・中央・右部分の垂直方向の拡大・タイル化に適用されます。 (2つ目が省略された場合は1つ目と同じとみなします。) 意味は以下の通り:

stretch
画像を対応する領域いっぱいに引き伸ばします。
repeat
画像を対応する領域に繰り返し配置します。
round
画像を対応する領域に繰り返し配置します。 領域にぴったり整数回収まらない場合は、画像サイズが調整されて収まるようになります。
space
画像を対応する領域に繰り返し配置します。 領域にぴったり整数回収まらない場合は、余ったスペースがタイル間に分散されます。

枠線画像パーツの拡大・タイル化の正確な処理は次セクション参照。

5.6. 枠線画像の描画

border imageborder-image-sourceで指定され、border-image-slice値でスライスされた後、 得られた9つの画像は、4つのステップでそれぞれのborder image regionに 拡大・配置・タイル化されます:

  1. border-image-widthに合わせて拡大。
    • 上・下辺の2画像は、それぞれのborder image regionの高さに合わせて拡大され、 幅は比例的にスケールされます。
    • 左・右辺の画像は、それぞれのborder image regionの幅に合わせて拡大され、 高さは比例的にスケールされます。
    • 角画像は対応するborder image regionの幅・高さに合わせて拡大されます。
    • 中央画像の幅は上画像と同じ倍率で拡大されます(倍率が0や無限大の場合は下画像の倍率、さらに駄目なら拡大なし)。 高さは左画像と同じ倍率で拡大されます(倍率が0や無限大の場合は右画像の倍率、さらに駄目なら拡大なし)。
  2. border-image-repeatに合わせて拡大。
    • 1つ目のキーワードがstretchの場合、 上・中央・下画像はborder image areaの中央領域の幅に合わせてさらに拡大されます。 高さはこれ以上変更されません。
    • 1つ目のキーワードがroundの場合、 上・中央・下画像は幅が調整され、中央領域にちょうど整数回収まるようにリサイズされます。 (background-repeatroundと同様。)
    • 1つ目のキーワードがrepeatまたはspaceの場合、 上・中央・下画像はさらに変更されません。
    • 2つ目のキーワードに対するstretchroundrepeatspaceの効果は同様で、 左・中央・右画像の高さに適用されます。
  3. 最初のタイルの配置。
    • 1つ目のキーワードがrepeatの場合、 上・中央・下画像はそれぞれの領域で左右中央に配置されます。 それ以外の場合はそれぞれのborder image areaの左端に配置されます。
    • 2つ目のキーワードがrepeatの場合、 左・中央・右画像はそれぞれの領域で上下中央に配置されます。 それ以外の場合はそれぞれのborder image areaの上端に配置されます。
  4. タイル化と描画。
    • 画像はそれぞれの領域を埋めるようにタイル化されます。
    • spaceの場合、部分タイルは破棄され、余ったスペースは タイルの前・後・間に分散されます。 (最初のタイル前、最後のタイル後、タイル間の隙間が均等化されます。)これにより枠線画像の辺領域が空になることがあります。
    • 画像は通常の枠線と同じ積み重ねレベル(背景レイヤーの直前)で描画されます。
    • fillborder-image-sourceで指定されていなければ 中央画像は描画されません。

5.7. 枠線画像ショートハンド:border-image プロパティ

Name: border-image
値: <'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>
初期値: 各プロパティ参照
適用対象: 各プロパティ参照
継承: しない
パーセンテージ: N/A
算出値: 各プロパティ参照
標準順序: 文法通り
アニメーション型: 各プロパティ参照

これはborder-image-sourceborder-image-sliceborder-image-widthborder-image-outsetborder-image-repeatをまとめて設定するショートハンドプロパティです。 省略された値は初期値になります。

5.8. テーブルへの影響

border-imageプロパティは border-collapsecollapseに設定された テーブル・インラインテーブルの枠線にも適用されます。 ただし本仕様ではその画像枠線の描画方法は定義していません。 特に、画像枠線がセル・行・行グループの枠線とテーブル端でどう相互作用するかは定義されていません (border conflict resolution参照)。

今後の仕様で描画方法が定義される予定です。 それまではUAはcollapsed borderのテーブルにborder-imageを適用しないことが推奨されます。

6. その他の効果

注: box-decoration-breakプロパティは、 背景や枠線がフラグメント化されたボックスにどう適用されるかを定義するもので、 CSS Fragmentation Moduleへ移動されました。 [CSS-BREAK-3]

6.1. ドロップシャドウ:box-shadowプロパティ

Name: box-shadow
値: none | <shadow>#
初期値: none
適用対象: 全要素
継承: しない
パーセンテージ: N/A
算出値: noneまたはリスト。 各項目は絶対長さ4つ+算出色+必要に応じてinsetキーワード
標準順序: 文法通り
アニメーション型: 算出値ごとに。 noneは0個リストとして扱い、 空のシャドウ(transparent 0 0 0 0)+対応するinsetキーワードを追加して 長いリストに合わせる(短いリストが互換の場合のみ)

box-shadowプロパティはボックスに1つ以上のドロップシャドウを付加します。 値は noneでシャドウなし、 またはカンマ区切りのシャドウリスト(前面から背面順)です。

各シャドウは<shadow>で指定し、 長さ2~4つ、色(省略可)、insetキーワード(省略可)で構成されます。 長さ省略時は0、色省略時はcurrentColor。

<shadow> = <color>? && [<length>{2} <length [0,∞]>? <length>?] && inset?

<shadow>の構成要素の解釈は下記:

1つ目の<length>
シャドウの水平オフセット。 正の値で右、負で左にシャドウ。
2つ目の<length>
シャドウの垂直オフセット。 正で下、負で上にシャドウ。
3つ目の<length [0,∞]>
シャドウのぼかし半径。 負は無効。 0ならシャドウ端はシャープ、 大きいほど端がぼやける。 詳細は下記「シャドウのぼかし」参照。
4つ目の<length>
拡張距離。 正で全方向に拡張、負で縮小。 詳細は下記「シャドウ形状」参照。

内側シャドウの場合、拡張=輪郭の縮小を意味します。

<color>
シャドウの色。省略時はcurrentColor
inset
inset指定時、ドロップシャドウは 外側box-shadow(ボックスがキャンバス上に浮いているような影) から内側box-shadow(ボックスが切り抜かれたようにキャンバスが影を落とす)に変化します。
下記例はシャドウのspreadとblurの効果を示します:
width: 100px; height: 100px;
border: 12px solid blue; background-color: orange;
border-top-left-radius: 60px 90px;
border-bottom-right-radius: 60px 90px;
box-shadow: 64px 64px 12px 40px rgba(0,0,0,0.4),
            12px 12px 0px 8px rgba(0,0,0,0.4) inset;
このサンプルコードは100px×100pxのオレンジボックス+12px青枠線、
			          右上/左下は鋭角、左上/右下は楕円曲線。
			          シャドウ2つ:内側はoffsetとspreadで左上に20px幅の濃いオレンジバンド(角丸形状に合わせて曲線)、
			          外側は204px×204pxの灰色影(ボックスの左上から24px下右にoffset)。
			          12pxぼかしで外側シャドウ端は24px幅で透明に近づくグラデーション。

6.1.1. シャドウ形状・拡張・ノックアウト

外側box-shadowは、 要素のborder-boxが不透明として影を落とします。 spread距離0の場合、輪郭はborder boxと同じ形状・サイズ。 シャドウは枠線の外側のみ描画され、要素のborder-box内側はクリップされます。

内側box-shadowは、 padding edgeより外が不透明として影を落とします。 spread距離0なら輪郭はpadding boxと同じ形状・サイズ。 シャドウはpadding edge内側のみ描画され、要素のpadding box外側はクリップされます。

spread距離定義時、 上記輪郭を 外側box-shadowなら外側へ、 内側box-shadowなら内側へ spread距離でアウトセット(インセット)し(幅高さはゼロ以上に切り捨て)ます。

下記は青枠線付きオレンジボックスへのシャドウ例です。
border:5px solid blue;
background-color:orange;
width: 144px;
height: 144px;
border-radius: 20px;
border-radius: 0;
box-shadow:
  rgba(0,0,0,0.4)
  10px 10px;
丸角ボックス。10px右下に灰色シャドウ(border box形状)。 角型ボックス。10px右下に灰色シャドウ(border box形状)。
box-shadow:
  rgba(0,0,0,0.4)
  10px 10px
  inset
丸角ボックス。padding boxの形状逆で左上から10px内側に灰色シャドウ。 角型ボックス。padding boxの形状逆で左上から10px内側に灰色シャドウ。
box-shadow:
  rgba(0,0,0,0.4)
  10px 10px 0
  10px /* spread */
丸角ボックス。ボックスより20px大きい灰色シャドウ(上左端が直接下に配置)。 角型ボックス。ボックスより20px大きい灰色シャドウ(上左端が直接下に配置)。
box-shadow:
  rgba(0,0,0,0.4)
  10px 10px 0
  10px /* spread */
  inset
丸角ボックス。ボックスより20px狭い灰色シャドウ(左上角から20px内側)。 丸角ボックス。ボックスより20px狭い灰色シャドウ(左上角から20px内側)。

spreadを適用した時にボックス形状を保つため、 シャドウの角半径もborder-box(内側はpadding-box)の半径にspread距離を加算(内側は減算、ゼロ以上)します。 ただし角半径が小さい場合は鋭角を維持するため、 border radiusspread距離未満(内側シャドウは負spread距離の絶対値未満)なら、 spread距離は比率 1 + (r-1)3rは角半径/spread距離)を掛けて調整します。 例えば角半径10px・spread距離20px(r=0.5)なら シャドウ形状の角半径は10px+20px×(1+(.5-1)3)=27.5px(本来は30px)です。 この調整は各次元独立で適用されます。

border-imageはbox-shadow形状に影響しません。

6.1.2. シャドウ端のぼかし

非ゼロのぼかし半径指定時、 生成されるシャドウはガウスフィルタなどでぼかされます。 厳密なアルゴリズムは未定義ですが、結果のシャドウは (各ピクセルが期待値の±5%以内となるように)、 シャドウにぼかし半径の半分の標準偏差でガウスぼかしを適用した画像に近似しなければなりません。

注: 長い直線的なシャドウ端の場合、 blur半径で端から端まで約2×blur半径幅で色が変化(グラデーション)します。 シャドウ端内側はほぼ完全色、外側端はほぼ透明になります。

6.1.3. レイヤー・レイアウト・その他詳細

シャドウ効果は前面から背面へ適用され、 先頭シャドウが最前面、他は背面に重なります。 シャドウはレイアウトに影響せず、他のボックスやテキスト・そのシャドウと重なる場合があります。 stacking contextや描画順では、 外側box-shadowは要素の背景直下、 内側シャドウは要素の背景直上 (枠線や枠線画像より下)で描画されます。

特に指定がない限り、ドロップシャドウはprincipal boxにのみ適用されます。 影響を受けるボックスが複数フラグメントの場合、 シャドウはbox-decoration-breakで指定通り適用されます。

シャドウはスクロールをトリガーせず、スクロール可能領域のサイズも増やしません。

外側シャドウはcollapsing borderモデルの内部テーブル要素に効果ありません。 テーブルで行ごとに枠線厚みが異なる場合や、 行スパンセルが隣接セルと枠線厚みが異なる場合など、 そのシャドウ位置・描画方法は未定義です。

7. レベル

このセクションは参考情報です。 CSSには複数のレベルがあり、それぞれが他のレベルのサブセットです。 (詳細は [CSS-2017] を参照。) 以下のリストは、この仕様書のどの機能が各レベルに含まれているかを説明しています。

7.1. レベル1

7.2. レベル2

7.3. レベル3

8. 変更点

8.1. 2023年2月14日候補勧告スナップショット以降の変更点

8.2. 2020年12月22日候補勧告スナップショット以降の変更点

8.3. 2017年10月17日候補勧告以降の変更点

8.4. 2014年9月9日候補勧告以降の変更点

この仕様書は2014年9月9日候補勧告以降に 以下の(非自明な)変更が加えられました:

8.5. 2014年2月4日ラストコール草案以降の変更点

この仕様書は2014年2月4日ラストコール草案以降に 以下の(非自明な)変更が加えられました:

全てのコメント対応一覧も利用可能です。

8.6. 2012年7月24日候補勧告以降の変更点

この仕様書は2012年7月24日候補勧告以降に 以下の(非自明な)変更が加えられました:

8.7. 2012年4月17日候補勧告以降の変更点

この仕様書は2012年4月17日候補勧告以降に 以下の(非編集的な)変更が加えられました:

8.8. 2012年2月14日「Last Call」ワーキングドラフト以降の変更点

この仕様書は2012年2月14日「Last Call」ワーキングドラフト以降に 以下の(非編集的な)変更が加えられました:

これらの変更はレビュー期間中に受けたコメントへの対応です。詳細はDisposition of Comments参照。

8.9. 2011年2月15日候補勧告以降の変更点

この仕様書は2011年2月15日候補勧告以降に 以下の変更が加えられました:

8.10. 2009年12月17日候補勧告以降の変更点

この仕様書は2009年12月17日候補勧告以降に 以下の変更が加えられました:

9. 謝辞

Tapas RoyはBorderモジュールの編集者でしたが、 後にBackgroundモジュールと統合されました。

Ben Stuckiには、隣接する2つの枠線の太さが異なる場合や一方がゼロの場合の 角丸挙動の定義に感謝します。 Arjan EisingとAnne van Kesterenにはborder-radius構文への貢献、 Zack Weinbergには角遷移領域の図、 Lea Verou、plinss、dbaronには角半径調整式への貢献 (特にLeaにはライブデモ提供に感謝)を。

枠線画像用プロパティ群はfantasaiが最初に提案しました。 現在の簡略化(一つの画像を9分割)はIan Hicksonによるものです。 (元々のアイデアは匿名のMicrosoftエンジニアによるようです。)

最後に、Brad Kemperにはドラフトの多くの機能に対するフィードバックと提案、 box-shadow例の全図作成、 そして枠線画像プロパティへの 大胆な変更提案(これにより従来定義の多くの問題が解決)に特別な謝意を表します。

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

この仕様は新しいプライバシー考慮事項を導入しません。

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

この仕様は新しいセキュリティ考慮事項を導入しません。

適合性

文書の規約

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

本仕様書の全ての文章は規範文ですが、明示的に非規範と記載されているセクション、例、および注記を除きます。[RFC2119]

本仕様書の例は「例えば」で始まるか、class="example"で規範文から区別されています。例:

これは参考例です。

参考注記は「注」で始まり、class="note"で規範文から区別されます。例:

注:これは参考注記です。

勧告は規範セクションであり、特別な注意を喚起するために <strong class="advisement"> で区別されます。例: UAは必ずアクセシブルな代替手段を提供しなければなりません。

適合クラス

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

スタイルシート
CSSスタイルシート
レンダラー
スタイルシートの意味を解釈し、利用する文書をレンダリングするUA
オーサリングツール
スタイルシートを作成するUA

スタイルシートが本仕様書に適合するためには、 このモジュールで定義された構文を使用するすべての文が、CSS一般文法および各機能の個別文法に従って有効である必要があります。

レンダラーが本仕様書に適合するためには、 スタイルシートを適切な仕様通りに解釈することに加え、 本仕様書で定義されたすべての機能を正しくパースし、 文書をそれに従いレンダリングする必要があります。ただし、UAがデバイスの制約で文書を正しくレンダリングできない場合でも、UAは適合しないとは限りません(例:モノクロモニターで色を描画する必要はありません)。

オーサリングツールが本仕様書に適合するためには、 CSS一般文法および本モジュールの各機能の個別文法に従って、構文的に正しいスタイルシートを書き、 スタイルシートの全てのその他の適合要件を満たす必要があります。

部分実装

将来互換性のあるパース規則を活用しフォールバック値を割り当てられるように、CSSレンダラーは、利用できるレベルのサポートがないat-ルール・プロパティ・プロパティ値・キーワード・その他の構文要素を無効として扱い、適切に無視しなければなりません。特に、ユーザーエージェントは、サポートされていない値を選択的に無視し、サポートされている値のみを複数値プロパティ宣言で適用してはなりません:いずれかの値が無効(サポートされていない値は必ず無効)とされる場合、CSSは宣言全体を無視することを要求します。

不安定・独自機能の実装

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

非実験的実装

仕様が候補勧告段階に達すると、非実験的実装が可能となり、実装者は仕様通り正しく実装できたCRレベルの機能については、プレフィックスなしで公開すべきです。

CSSの実装間で相互運用性を確立・維持するため、CSSワーキンググループは非実験的CSSレンダラーに対し、W3Cに実装報告書(必要に応じて実装報告に使ったテストケースも)を提出することを求めます。W3Cに提出されたテストケースはCSSWGによるレビュー・修正の対象となります。

テストケースや実装報告書の提出方法などの詳細はCSSワーキンググループのWebサイト https://www.w3.org/Style/CSS/Test/ を参照してください。 質問は public-css-testsuite@w3.org 宛てに送ってください。

候補勧告終了基準

この仕様書が提案勧告に進むには、各機能につき少なくとも2つの独立した相互運用可能な実装が必要です。各機能は異なる製品群で実装してもよく、全機能が単一製品で実装される必要はありません。この基準のために以下の用語を定義します:

独立
各実装は異なる当事者が開発し、他の適格実装のコードを共有・再利用・派生してはならない。仕様の実装に関係ないコード部分はこの要件の対象外。
相互運用可能
公式CSSテストスイートの該当テストケースに合格、またはWebブラウザ以外の場合は同等のテストに合格すること。すべての該当テストには同等のテストを作成する必要があり、そのUAで相互運用性を主張する場合は同じ方法で合格できる追加のUAも必要。検証用に同等テストは公開されること。
実装
ユーザーエージェントであり、以下を満たすもの:
  1. 仕様を実装している。
  2. 一般公開されている。製品版や公開版(ベータ版、プレビュー版、「ナイトリービルド」など)でもよい。非製品版は安定性検証のため少なくとも1ヶ月機能を実装していること。
  3. 実験的でない(テストスイート合格専用で今後通常利用されないバージョンではない)。

仕様は少なくとも6ヶ月間、候補勧告段階に留まります。

索引

この仕様で定義されている用語

参照によって定義される用語

参考文献

規範参照

[CSS-2023]
Chris Lilley 他. CSS Snapshot 2023. 2023年12月7日. 注記. URL: https://www.w3.org/TR/css-2023/
[CSS-BOX-3]
Elika Etemad. CSS Box Model Module Level 3. 2023年4月6日. 勧告. URL: https://www.w3.org/TR/css-box-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2022年11月3日. 作業草案. URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4. 2018年12月18日. 作業草案. URL: https://www.w3.org/TR/css-break-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022年1月13日. 候補勧告. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley; Lea Verou. CSS Color Module Level 4. 2022年11月1日. 候補勧告. URL: https://www.w3.org/TR/css-color-4/
[CSS-COLOR-5]
Chris Lilley 他. CSS Color Module Level 5. 2022年6月28日. 作業草案. URL: https://www.w3.org/TR/css-color-5/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 2023年3月30日. 候補勧告. URL: https://www.w3.org/TR/css-display-3/
[CSS-IMAGES-3]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS Images Module Level 3. 2023年12月18日. 候補勧告. URL: https://www.w3.org/TR/css-images-3/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2023年3月29日. 作業草案. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-RUBY-1]
Elika Etemad 他. CSS Ruby Annotation Layout Module Level 1. 2022年12月31日. 作業草案. URL: https://www.w3.org/TR/css-ruby-1/
[CSS-TEXT-DECOR-4]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 4. 2022年5月4日. 作業草案. URL: https://www.w3.org/TR/css-text-decor-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2022年12月1日. 候補勧告. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2023年12月18日. 作業草案. URL: https://www.w3.org/TR/css-values-4/
[CSS2]
Bert Bos 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. 勧告. URL: https://www.w3.org/TR/CSS21/
[CSS22]
Bert Bos. Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification. 2016年4月12日. 作業草案. URL: https://www.w3.org/TR/CSS22/
[FILTER-EFFECTS-1]
Dirk Schulze; Dean Jackson. Filter Effects Module Level 1. 2018年12月18日. 作業草案. URL: https://www.w3.org/TR/filter-effects-1/
[HTML]
Anne van Kesteren 他. HTML標準. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[MEDIAQUERIES-5]
Dean Jackson 他. Media Queries Level 5. 2021年12月18日. 作業草案. URL: https://www.w3.org/TR/mediaqueries-5/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. 現行の最良慣行. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-3]
Tantek Çelik 他. Selectors Level 3. 2018年11月6日. 勧告. URL: https://www.w3.org/TR/selectors-3/
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2022年11月11日. 作業草案. URL: https://www.w3.org/TR/selectors-4/

参考情報

[CSS-2017]
Tab Atkins Jr.; Elika Etemad; Florian Rivoal. CSS Snapshot 2017. 2017年1月31日. 注記. URL: https://www.w3.org/TR/css-2017/
[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3. 2018年12月4日. 候補勧告. URL: https://www.w3.org/TR/css-break-3/
[CSS-CONTAIN-1]
Tab Atkins Jr.; Florian Rivoal. CSS Containment Module Level 1. 2022年10月25日. 勧告. URL: https://www.w3.org/TR/css-contain-1/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS Containment Module Level 2. 2022年9月17日. 作業草案. URL: https://www.w3.org/TR/css-contain-2/
[CSS-CONTENT-3]
Elika Etemad; Dave Cramer. CSS Generated Content Module Level 3. 2019年8月2日. 作業草案. URL: https://www.w3.org/TR/css-content-3/
[CSS-SHAPES]
Rossen Atanassov; Alan Stearns. CSS Shapes Module Level 1. 2022年11月15日. 候補勧告. URL: https://www.w3.org/TR/css-shapes-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2021年12月17日. 作業草案. URL: https://www.w3.org/TR/css-sizing-3/
[WCAG20]
Ben Caldwell 他. Web Content Accessibility Guidelines (WCAG) 2.0. 2008年12月11日. 勧告. URL: https://www.w3.org/TR/WCAG20/

プロパティ索引

名前 初期値 適用対象 継承 パーセンテージ アニメーション型 標準順序 算出値 論理プロパティグループ
background <bg-layer>#? , <final-bg-layer> 各プロパティ参照 全要素 しない 各プロパティ参照 各プロパティ参照 文法通り 各プロパティ参照
background-attachment <attachment># scroll 全要素 しない N/A 離散 文法通り リスト(各項目は指定されたキーワード)
background-clip <visual-box># border-box 全要素 しない N/A 繰返可能リスト 文法通り リスト(各項目は指定されたキーワード)
background-color <color> transparent 全要素 しない N/A 算出値ごと 文法通り 算出された色
background-image <bg-image># none 全要素 しない N/A 離散 文法通り リスト(各項目は<image>またはnoneのキーワード)
background-origin <visual-box># padding-box 全要素 しない N/A 繰返可能リスト 文法通り リスト(各項目は指定されたキーワード)
background-position <bg-position># 0% 0% 全要素 しない 背景配置領域のサイズから背景画像サイズを引いたもの、詳細は本文参照 繰返可能リスト 文法通り リスト(各項目は左上原点からのオフセット値ペア(水平・垂直)、各値は算出済み<length-percentage>)
background-repeat <repeat-style># repeat 全要素 しない N/A 離散 文法通り リスト(各項目はキーワードペア、各次元ごと1つ)
background-size <bg-size># auto 全要素 しない 本文参照 繰返可能リスト 文法通り リスト(各項目はサイズペア(各軸ごと1つ)、値はキーワードまたは算出済み<length-percentage>)
border <line-width> || <line-style> || <color> 各プロパティ参照 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 各プロパティ参照 文法通り 各プロパティ参照
border-bottom <line-width> || <line-style> || <color> 各プロパティ参照 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 各プロパティ参照 文法通り 各プロパティ参照
border-bottom-color <color> currentColor 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 算出値ごと 文法通り 算出された色 border-color
border-bottom-left-radius <length-percentage [0,∞]>{1,2} 0 全要素(ただし本文参照) しない border boxの対応する寸法参照 算出値ごと 文法通り 算出済み<length-percentage>値ペア border-radius
border-bottom-right-radius <length-percentage [0,∞]>{1,2} 0 全要素(ただし本文参照) しない border boxの対応する寸法参照 算出値ごと 文法通り 算出済み<length-percentage>値ペア border-radius
border-bottom-style <line-style> none 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 離散 文法通り 指定キーワード border-style
border-bottom-width <line-width> medium 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 算出値ごと 文法通り 絶対長さ(border-widthとして丸め)、border-styleがnone/hiddenの場合は0 border-width
border-color <color>{1,4} (各プロパティ参照) 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 各プロパティ参照 文法通り 各プロパティ参照
border-image <'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'> 各プロパティ参照 各プロパティ参照 しない N/A 各プロパティ参照 文法通り 各プロパティ参照
border-image-outset [ <length [0,∞]> | <number [0,∞]> ]{1,4} 0 全要素(border-collapseがcollapseの内部テーブル要素除く) しない N/A 算出値ごと 文法通り 4値(各値は数値または絶対長さ)
border-image-repeat [ stretch | repeat | round | space ]{1,2} stretch 全要素(border-collapseがcollapseの内部テーブル要素除く) しない N/A 離散 文法通り 2キーワード(各軸ごと1つ)
border-image-slice [<number [0,∞]> | <percentage [0,∞]>]{1,4} && fill? 100% 全要素(border-collapseがcollapseの内部テーブル要素除く) しない 枠線画像サイズ参照 算出値ごと 文法通り 4値(各値は数値またはパーセンテージ)、fillキーワード指定時はそれも
border-image-source none | <image> none 全要素(border-collapseがcollapseの内部テーブル要素除く) しない N/A 離散 文法通り noneキーワードまたは算出済み<image>
border-image-width [ <length-percentage [0,∞]> | <number [0,∞]> | auto ]{1,4} 1 全要素(border-collapseがcollapseの内部テーブル要素除く) しない 枠線画像領域の幅・高さに対する相対値 算出値ごと 文法通り 4値(各値は数値、autoキーワード、または算出済み<length-percentage>)
border-left <line-width> || <line-style> || <color> 各プロパティ参照 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 各プロパティ参照 文法通り 各プロパティ参照
border-left-color <color> currentColor 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 算出値ごと 文法通り 算出された色 border-color
border-left-style <line-style> none 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 離散 文法通り 指定キーワード border-style
border-left-width <line-width> medium 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 算出値ごと 文法通り 絶対長さ(border-widthとして丸め)、border-styleがnone/hiddenの場合は0 border-width
border-radius <length-percentage [0,∞]>{1,4} [ / <length-percentage [0,∞]>{1,4} ]? 各プロパティ参照 全要素(ただし本文参照) しない border boxの対応する寸法参照 各プロパティ参照 文法通り 各プロパティ参照
border-right <line-width> || <line-style> || <color> 各プロパティ参照 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 各プロパティ参照 文法通り 各プロパティ参照
border-right-color <color> currentColor 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 算出値ごと 文法通り 算出された色 border-color
border-right-style <line-style> none 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 離散 文法通り 指定キーワード border-style
border-right-width <line-width> medium 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 算出値ごと 文法通り 絶対長さ(border-widthとして丸め)、border-styleがnone/hiddenの場合は0 border-width
border-style <line-style>{1,4} (各プロパティ参照) 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 各プロパティ参照 文法通り 各プロパティ参照
border-top <line-width> || <line-style> || <color> 各プロパティ参照 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 各プロパティ参照 文法通り 各プロパティ参照
border-top-color <color> currentColor 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 算出値ごと 文法通り 算出された色 border-color
border-top-left-radius <length-percentage [0,∞]>{1,2} 0 全要素(ただし本文参照) しない border boxの対応する寸法参照 算出値ごと 文法通り 算出済み<length-percentage>値ペア border-radius
border-top-right-radius <length-percentage [0,∞]>{1,2} 0 全要素(ただし本文参照) しない border boxの対応する寸法参照 算出値ごと 文法通り 算出済み<length-percentage>値ペア border-radius
border-top-style <line-style> none 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 離散 文法通り 指定キーワード border-style
border-top-width <line-width> medium 全要素(ただしruby base containerおよびruby annotation containerは除く) しない N/A 算出値ごと 文法通り 絶対長さ(border-widthとして丸め)、border-styleがnone/hiddenの場合は0 border-width
border-width <line-width>{1,4} (各プロパティ参照) 全要素(ただしruby base containerおよびruby annotation containerは除く) しない 各プロパティ参照 各プロパティ参照 文法通り 各プロパティ参照
box-shadow none | <shadow># none 全要素 しない N/A 算出値ごと noneは0個リストとして扱い、 空シャドウ(transparent 0 0 0 0)+insetキーワードを追加し、 長いリストに合わせる(短いリストが互換の場合のみ) 文法通り noneキーワードまたはリスト(各項目は絶対長さ4つ+算出色+insetキーワード(省略可))