CSS テキスト装飾モジュール レベル 4

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2022/WD-css-text-decor-4-20220504/
最新版公開バージョン:
https://www.w3.org/TR/css-text-decor-4/
編集者ドラフト:
https://drafts.csswg.org/css-text-decor-4/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/css-text-decor-4
フィードバック:
CSSWG イシューレポジトリ
トラッカー
仕様内でインライン
編集者:
Elika J. Etemad / fantasai (招待専門家)
(Google)
この仕様への編集提案:
GitHub エディター

要約

このモジュールは、下線、テキストシャドウ、強調記号など、テキスト装飾に関連するCSSの機能を含みます。

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

この文書の位置付け

このセクションは、公開時点でのこの文書の位置付けについて説明します。現在のW3C出版物の一覧や、本技術レポートの最新版は、W3C技術レポート索引 https://www.w3.org/TR/で確認できます。

この文書はCSS作業グループによって勧告トラックを使用し、作業草案として公開されました。作業草案としての公開は、W3Cおよびそのメンバーによる承認を意味しません。

この文書は草案であり、今後随時、更新、差し替え、または他の文書によって廃止される可能性があります。この文書は進行中の作業以外のものとして引用すべきではありません。

フィードバックはGitHubでイシューを提出(推奨)し、「css-text-decor」という仕様コードをタイトルに含めてください。例: “[css-text-decor] …コメントの要約…”。すべてのイシューとコメントはアーカイブされています。または、(アーカイブ有り) 公開メーリングリストwww-style@w3.org宛てに送信できます。

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

この文書は、W3C特許ポリシーの下で活動するグループによって作成されました。W3Cは、グループの成果物に関連してなされた公開された特許開示リストを維持しています。そのページには特許開示の方法も記載されています。特許が必須クレームを含むと信じる場合、その情報はW3C特許ポリシー第6節に従って開示しなければなりません。

1. 序文

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

このモジュールは、テキスト装飾、すなわちフォントや組版規則に従って組版された後のテキストのグリフを装飾する機能について説明します。 ([CSS-TEXT-3] および [CSS-FONTS-3] を参照。) これらの機能は、単なる装飾目的だけでなく、強調や敬称、挿入や削除、綴り間違いなど編集上の変更を示すためにも使用されます。

CSSレベル1および2では、西洋の組版の伝統に適した基本的な線による装飾(下線、上線、取り消し線)のみが定義されていました。 このモジュールのレベル3では、これらの装飾の色やスタイル、位置、連続性を変更する機能が追加され、 強調記号(東アジアの組版で伝統的に用いられる)や シャドウ(レベル2で提案されたが延期された)も導入されました。 レベル4では、これらの装飾に対するさらなる制御が導入されています。

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

このモジュールは、[CSS-TEXT-DECOR-3]で定義されているテキスト装飾機能を置き換え、拡張します。

本モジュールのすべてのプロパティは、 ::first-line::first-letter 疑似要素に適用できます。

1.2. 値の定義

この仕様は、CSSプロパティ定義の規約[CSS2])に従い、値定義構文[CSS-VALUES-3])を使用しています。 本仕様で定義されていない値型は、CSS Values & Units [CSS-VALUES-3] で定義されています。 他のCSSモジュールとの組み合わせにより、これらの値型の定義が拡張される場合があります。

プロパティ固有の値に加え、 本仕様で定義されているすべてのプロパティは CSS全体のキーワードもプロパティ値として受け入れます。 可読性のため、明示的には繰り返していません。

1.3. 用語

この仕様で用いられる 書字素単位character)、書記素単位letter)、 および 内容言語 は、[CSS-TEXT-3] で定義されています。 その他の用語や概念は [CSS2] および [CSS-WRITING-MODES-4] で定義されています。

2. 行の装飾:下線、上線、取り消し線

以下のプロパティは、要素の内容に追加される線の装飾について説明します。 インラインボックス(inline box)に指定または伝播された場合、 そのボックスはその装飾のための 装飾ボックスとなり、 その装飾をすべてのボックス断片に適用します。 装飾はさらに、インラインを分割するインフローブロックレベルボックスにも伝播されます (CSS2.1 セクション9.2.1.1 参照)。 ブロックコンテナで インライン整形コンテキスト(inline formatting context)を確立するものに指定または伝播された場合、 装飾は匿名インラインボックスに伝播され、 そのブロックコンテナの全てのインフロー インラインレベル子要素をラップします。 ルビコンテナに指定または伝播された場合、 装飾はルビベースのみに伝播されます。 その他のボックスタイプでは、 装飾はすべてのインフロー子要素に伝播されます。

注:テキスト装飾はアウトオブフローの子孫や、インラインブロックやインラインテーブルなどのアトミックインラインレベルの子孫の内容には伝播されません。 また、インラインボックスのインライン子要素にも伝播されませんが、装飾はそのようなボックスに適用されます。

下線、上線、取り消し線は、置換されない インラインボックスにのみ描画されます。 すべてのテキスト(空白、文字間隔、単語間隔を含む)に渡って描画されますが、行頭・行末の空白(空白・文字間隔・単語間隔)は除きます。 アトミックインライン(画像やインラインブロックなど)は装飾されません。 装飾ボックスのマージン、ボーダー、パディングは常にスキップされますが、子孫の インラインボックスのマージン、ボーダー、パディングはスキップされません。

注:CSS 2.1 ではマージン・ボーダー・パディングは常にスキップする必要がありました。 レベル3以降では、既定で装飾ボックス自身のマージン・ボーダー・パディングのみがスキップされます。 将来的にCSS2.1もこの新しい既定に合わせて更新される可能性があります。

相対配置された子孫は、そのテキストに適用されたすべてのテキスト装飾も一緒に移動しますが、その行の装飾の初期位置の計算には影響しません。 visibilityプロパティやtext-shadow、 フィルタやその他のグラフィック変換も、 同様にそのボックスに適用されているすべてのテキスト装飾 (祖先ボックスから伝播された装飾も含む)に影響しますが、その初期位置や太さの計算には影響しません。 (アトミックインライン(atomic inline)上や 置換されないインラインボックスのマージン・ボーダー・パディング上に描画される場合は、 それらは装飾ボックス(decorating box)ではなく、該当するアトミックインライン/置換されないインラインボックスに関連付けられます。)

次のスタイルシートと文書断片では:
blockquote { text-decoration: underline; color: blue; }
em { display: block; }
cite { color: fuchsia; }
<blockquote>
 <p>
  <span>
   Help, help!
   <em> I am under a hat! </em>

   <cite> —GwieF </cite>
  </span>
 </p>
</blockquote>

...blockquote要素の下線はspan要素を囲む匿名インラインボックスに伝播され、 "Help, help!" というテキストが青色で、その下に匿名インライン要素の青い下線が現れ、 色はblockquote要素から取得されます。<em>text</em>のemブロック内のテキストも下線が引かれています。これはインフローブロックにも下線が伝播されるためです。最後の行のテキストはフクシア色ですが、その下線は依然として匿名インライン要素からの青い下線です。 上記下線例のサンプルレンダリング この図は上記例で関与しているボックスを示しています。 丸いアクア色の線はp要素のインライン内容をラップする匿名インライン要素を、 丸い青線はspan要素を、オレンジ色の線はブロックを表します。

注: 線の装飾はボックスツリーを通して伝播され、継承によって伝播するわけではありません。 したがって、display: contentsの要素で指定しても、子孫には効果がありません。

2.1. テキスト装飾線:text-decoration-lineプロパティ

名前: text-decoration-line
値: none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error
初期値: none
適用対象: すべての要素
継承: いいえ(ただし上記本文を参照)
パーセンテージ: 該当なし
算出値: 指定されたキーワード
標準順序: 文法順
アニメーション型: 離散

このプロパティは、 text-decorationショートハンドの サブプロパティであり、 要素に追加される線の装飾の種類を指定します。 text-decoration-line以外の値は、要素が指定されたテキスト装飾を発生させ、 上記のように適用および伝播します。

注: 線の色・スタイル・太さを カスケード内の下位宣言で設定したい場合を除き、 このtext-decoration ショートハンドを使う方が安全です。

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

none
テキスト装飾を生成も抑制もしません。
underline
各行のテキストに下線を引きます。
overline
各行のテキストの上に線を描きます(下線の反対側)。
line-through
各行の中央に線を引きます。
blink
テキストが点滅します(表示と非表示を交互に切り替える)。 準拠するユーザーエージェントは点滅しなくても構いません。 点滅しないことは WAI-UAAG チェックポイント3.3を満たす1つの方法です。 この値は、Animations [CSS3-ANIMATIONS]を推奨し、非推奨です。
spelling-error
ユーザーエージェントがスペルミスを強調表示するために使用するテキスト装飾の種類を示します。 表示はUA依存で、プラットフォームによって異なる場合があります。多くの場合、赤い波線下線として表示されます。
grammar-error
ユーザーエージェントが文法ミスを強調表示するために使用するテキスト装飾の種類を示します。 表示はUA依存で、プラットフォームによって異なる場合があります。多くの場合、緑色の波線下線として表示されます。

注: 縦書きモードでは、text-underline-positionによって下線と上線の位置が入れ替わることがあります。 これにより、言語固有の好みに合わせて下線の位置を自動的に調整できます。

spelling-errorgrammar-error装飾は完全にUA定義のため、 UAはサブプロパティや、 通常は線の装飾に影響する他のプロパティ (例:text-underline-positioncolorstrokefill など)を無視しても構いません。 ただし、UAのレンダリングにおいて意味があり実用的であれば、 それらのプロパティを既定のスタイル修飾として適用すべきです。

2.2. テキスト装飾スタイル:text-decoration-styleプロパティ

名前: text-decoration-style
値: solid | double | dotted | dashed | wavy
初期値: solid
適用対象: すべての要素
継承: いいえ
パーセンテージ: 該当なし
算出値: 指定されたキーワード
標準順序: 文法順
アニメーション型: 離散

このプロパティは、 text-decorationショートハンドのサブプロパティであり、 text-decoration-lineで指定された下線・上線・取り消し線の 線の描画スタイルを設定します。 このプロパティは、たとえ子孫ボックスで異なるスタイルが指定されていても、当該要素から発生するすべての装飾に影響します。

値の意味は border-style プロパティ [CSS-BACKGROUNDS-3] と同じです。 wavyは波線を示します。

2.3. テキスト装飾色:text-decoration-colorプロパティ

名前: text-decoration-color
値: <color>
初期値: currentcolor
適用対象: すべての要素
継承: いいえ
パーセンテージ: 該当なし
算出値: 算出された色
標準順序: 文法順
アニメーション型: 算出値型による

このプロパティは、 text-decorationショートハンドのサブプロパティであり、 text-decoration-lineで指定された下線・上線・取り消し線の 色を設定します。 このプロパティは、たとえ子孫ボックスで異なる色が指定されていても、当該要素から発生するすべての装飾に影響します。

2.4. テキスト装飾線の太さ:text-decoration-thicknessプロパティ

名前: text-decoration-thickness
値: auto | from-font | <length> | <percentage>
初期値: auto
適用対象: すべての要素
継承: いいえ
パーセンテージ: 該当なし
算出値: 指定されたキーワードまたは絶対長さ
標準順序: 文法順
アニメーション型: 算出値による

このプロパティは、 text-decorationショートハンドのサブプロパティであり、 text-decoration-lineで指定された下線・上線・取り消し線の 線の太さ(ストローク幅)を設定します。 このプロパティは、たとえ子孫ボックスで異なる太さが指定されていても、当該要素から発生するすべての装飾に影響します。

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

auto
ユーザーエージェントがテキスト装飾線に適切な太さを選択します(詳細は下記参照)。
from-font
最初に利用可能なフォントが 推奨される下線幅のメトリクスを持つ場合はその幅を使用し、 そうでなければ auto と同様に扱います。
<length>
テキスト装飾線の太さを固定長で指定します。 ユーザーエージェントは実際の値を最低1デバイスピクセルに切り下げる必要があります。

注: 長さは固定値として継承され、フォントのサイズ変更ではスケールしません。

<percentage>

テキスト装飾線の太さを 1em のパーセンテージで指定します。 ユーザーエージェントは実際の値を最低1デバイスピクセルに切り下げる必要があります。

注: パーセンテージは相対値として継承されるため、継承時のフォントサイズ変更に応じてスケールします。

2.4.1. テキスト装飾線の自動太さ

一部のフォント形式(OpenTypeなど)は、線の装飾に適した太さの情報を提供できます。 ユーザーエージェントは、autoの線の太さを選択する際に そのようなフォントベースの情報を適宜使用するべきです。

2.5. 線装飾の位置と太さの決定

このセクションはText Decoration Level 3の初期草案からコピーされたものです。 現在もレビュー中であり、text-underline-offsettext-decoration-thickness との統合が必要です。

線による装飾は、フォントサイズや縦方向の揃えが異なる要素をまたぐ場合があるため、 線装飾の最適な位置は decorating box で決定される理想的な位置とは限りません。 代わりに、その行内で decorating box によって装飾されたすべてのテキスト、 すなわち considered text から、 行ごとに計算されます。 ただし、decorating box の子孫で text-decoration-skip によりスキップされるものや、 text-decoration-skip: ink が指定された子孫インライン、 さらに decorating box のインライン整形コンテキストに参加しない子孫は considered text の集合から除外されます。

その後、線装飾の位置は 各行ごとに次のように計算されます (over 側の下線は over 線、 under 側の上線は under 線として扱います):

over
over EMボックスの上端に considered text を揃えて線装飾を配置します。
アルファベット下線
アルファベット下線の位置は、各 considered text ランごとに理想的なオフセット(アルファベットベースラインから)を取り、 それらの平均を計算し、実際には最も低いアルファベットベースラインを用いて線を配置します。 (アルファベットベースラインは、支配的ベースラインが非アルファベットの場合、baseline 揃えのボックス間で異なることがあります。) 上付き文字や下付き文字による位置ずれを防ぐため、 計算値 vertical-align が初期値でないインラインは 親の理想下線位置を持つものとして扱います。
非アルファベット under
under EMボックスの下端に considered text を揃えて線装飾を配置します。
取り消し線
取り消し線は本質的にアルファベット下線と同様の平均化を使いますが、 子孫で異なる計算値 font-size を跨ぐ場合はその都度位置を再計算します。 (これにより、フォントサイズが変わってもテキストが一貫して打ち消しされます。) 同じ font-size を持つ considered text の各ランごとに フォントメトリクスから導いた理想位置の平均を計算します。 上付き文字や下付き文字による位置ずれを防ぐため、 計算値 vertical-align が初期値でないインラインは 親の理想下線位置を持つものとして扱います。 各装飾断片にわたり、その位置に線を描画します。

単純化のため、取り消し線は各要素ごとにその要素の推奨/平均位置で描画すべきです。 これにより一部で跳ねるような描画になる場合がありますが、 すべてのケースで正しい方法は現状存在せず、どの試みも複雑化を招きます。 フォントサイズが異なり considered text が存在しない要素上では 取り消し線はどの位置を採用すべきでしょうか?

CSSは線装飾の太さを定義しません。 テキスト装飾線の太さを決定する際、ユーザーエージェントは子孫のフォントサイズ、書体、ウェイトなどを考慮して 適切に平均化した太さを与えても構いません。

次の図は下線の平均化例を示します:

下線付きテキスト「1st a」の最初は「st」が上付きで小さいフォント、次は「a」が大きいフォント、最後は両方大きいフォントで描画される

3つの下線付きテキスト断片では、大きなテキストの比率が増すにつれて下線は順に下がり太くなっています。

同じ例を用いると、2番目の断片では取り消し線はフォントサイズを平均化せず、2つのセグメントに分割されます:

いずれの場合も、上付き文字はvertical-alignによるシフトのため、線の位置に影響しません。

2.6. テキスト装飾ショートハンド:text-decoration プロパティ

名前: text-decoration
値: <'text-decoration-line'> || <'text-decoration-thickness'> || <'text-decoration-style'> || <'text-decoration-color'>
初期値: 個々のプロパティを参照
適用対象: 個々のプロパティを参照
継承: 個々のプロパティを参照
パーセンテージ: 個々のプロパティを参照
算出値: 個々のプロパティを参照
アニメーション型: 個々のプロパティを参照
標準順序: 文法順

このプロパティは、text-decoration-linetext-decoration-thicknesstext-decoration-styletext-decoration-color を一度に設定するショートハンドです。 省略された値は初期値となります。

次の例は未訪問リンクをCSS1/CSS2 UAでは青い実線下線、 CSS3 UAではネイビーの点線下線で装飾します。
:link {
  color: blue;
  text-decoration: underline;
  text-decoration: navy dotted underline; /* CSS1/CSS2 UAでは無視 */
}

注: このショートハンドは意図的に text-underline-position プロパティを含みません。 これは言語や書記体系依存の設定であり、内容に基づいて自動的に決定されるため、 (継承しない)text-decorationショートハンドの スタイリスティックな設定とは独立してカスケード・継承できるようにするためです。

2.7. 下線位置:text-underline-positionプロパティ

名前: text-underline-position
値: auto | [ from-font | under ] || [ left | right ]
初期値: auto
適用対象: すべての要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定されたキーワード
標準順序: 文法順
アニメーション型: 離散

このプロパティは text-decorationショートハンドの サブプロパティではありません。 下線のテキストに対する位置を設定し、 ゼロ位置 を定義して、text-underline-offset による調整基準とします。 このプロパティは、たとえ子孫ボックスで異なる位置が指定されていても、当該要素から発生するすべての装飾に影響します。 祖先で指定された下線には影響しません。

次の例は現代中国語・日本語・韓国語テキストを横書き・縦書きの両方で適切な下線位置にします:
:root:lang(ja), [lang|=ja], :root:lang(ko), [lang|=ko] { text-underline-position: under right; }
:root:lang(zh), [lang|=zh] { text-underline-position: under left; }

leftright が単独で指定された場合、auto も暗黙に適用されます。 値の意味は以下の通りです:

auto
ユーザーエージェントは任意のアルゴリズムで下線位置を決定してよいですが、必ずアルファベットベースライン上または下に配置しなければなりません。

注: 既定の下線位置はアルファベットベースラインの近くにするのが推奨されますが、 下付き(または下げられた)テキストと重なったり、 アルファベット下線が高すぎる漢字やチベット文字のようなアジア系グリフと重なる場合は、 下線をより下にずらすか under で述べるようにemボックス端に揃える方が適切です。

典型的なラテンフォントでは下線はアルファベットベースライン直下で、ほとんどのラテン文字の下端との間に隙間ができるが、pなどのディセンダーは貫通する。

典型的な「アルファベット下線」はアルファベットベースライン直下に配置される

from-font
最初に利用可能なフォントが 推奨される下線オフセットのメトリクスを持つ場合はその値を使用し、 そうでなければ auto と同様に扱います。
under
下線を要素のテキスト内容のに配置します。 この場合、下線は通常ディセンダーを横切りません(会計下線とも呼ばれます)。 この値は、縦書きtypographic modesで特定側を指定したい場合、leftright と組み合わせ可能です。
text-underline-positionは継承され、text-decorationショートハンドではリセットされないため、次の例は文書全体で under 下線を使用します。これは複雑なディセンダーの多い書記体系や多くの下付き文字を使う数式・化学式に有用です。
:root { text-underline-position: under; }

注: under 値でも 下線がグリフと重ならない保証はありません。フォントによってはディセンダーやダイアクリティカルマークがフォントのdescentより下に突き出す場合があります。

left
縦書きtypographic modesでは、下線を under と同様に揃えますが、常にテキストの左端に配置します。 これにより下線が「over」側になる場合は、上線も側を変え「under」側に描画されます。
right
縦書きtypographic modesでは、下線を under と同様に揃えますが、常にテキストの右端に配置します。 これにより下線が「over」側になる場合は、上線も側を変え「under」側に描画されます。
日本語とラテン文字混在縦書きで left 指定時、下線がテキスト左側に配置される 日本語とラテン文字混在縦書きで right 指定時、下線がテキスト右側に配置される
left right

縦書きtypographic modesでは、text-underline-positionleft および right により下線を任意の側に配置できます(横書きtypographic modesでは両値とも autoとして扱われます)。

2.8. 下線オフセット:text-underline-offsetプロパティ

名前: text-underline-offset
値: auto | <length> | <percentage>
初期値: auto
適用対象: すべての要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定されたキーワードまたは絶対長さ
標準順序: 文法順
アニメーション型: 算出値による

このプロパティは text-decorationショートハンドのサブプロパティではありません。 下線をゼロ位置からどれだけずらすかを設定します。 正の値はテキストから外側への距離、負の値は内側への距離を表します。 このプロパティは、たとえ子孫ボックスで異なる位置が指定されていても、当該要素から発生するすべての装飾に影響します。 祖先で指定された下線には影響しません。

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

auto

UAが適切な下線オフセットを選択します。

ただし、text-underline-position の算出値が from-font であり、UAがフォントから適切なメトリクスを取得できた場合は、 このオフセットは0でなければなりません。

<length>

下線のオフセットを固定長で指定します。

注: 長さは固定値として継承され、フォントのサイズ変更ではスケールしません。

<percentage>

下線のオフセットを 1em のパーセンテージで指定します。

注: パーセンテージは相対値として継承されるため、継承時のフォントサイズ変更に応じてスケールします。

text-decoration-line プロパティの値が spelling-error または grammar-error の場合、UAは text-underline-position の値を無視しても構いません。

2.8.1. 下線オフセットの基準点(ゼロ位置)

ゼロ位置(zero position)は、 下線の位置がtext-underline-positionの値によって異なります(下記参照)。

text-underline-positiontext-underline-offset の相互作用
text-underline-position ゼロ位置 正の方向
auto アルファベットベースライン under
from-font フォントメトリクスで指定された位置、なければアルファベットベースライン under
under テキスト下端 under
left テキスト下端(左側) under
right テキスト上端(右側) over

下線は指定された位置の外側に揃えられ(太さは正の方向にのみ広がります)。

子孫コンテンツに対応するための自動調整が行われている場合、それは維持されます。 text-underline-offset の値はそれに加算されます。

2.8.2. フォントメトリクスによる自動位置決め

一部のフォント形式(OpenTypeなど)は、線装飾に適切な位置情報を提供できます。 ユーザーエージェントは auto オフセットを選択する際に そのようなフォント情報を適切に使用するべきであり、 from-fonttext-underline-position に指定されている場合は 必ず使用しなければなりません。

注: 通常OpenTypeフォントのメトリクスは alphabetic下線の位置を示しますが、CJKフォントなどでは under left 下線の位置を示す場合があります。 (この場合、フォントの下線メトリクスはemボックス下端に接します。) ユーザーエージェントはフォントメトリクスの誤りを補正しても良いですが、必須ではありません。

2.9. テキスト装飾線の一貫性

線装飾の正確な位置と太さは text-underline-positiontext-underline-offsettext-decoration-thickness の値と、その他はUA定義によって決まります。 ただし、下線・上線については UAは1つのdecorating boxから派生する装飾について 各行ごとに単一の太さ・位置を使わなければなりません。

様々なフォントサイズ・縦位置でも下線は1本でなければならない vs. 装飾テキストごとに複数の線を描くのは正しくない

正しいレンダリングと誤ったレンダリング例: <u>A<sup>B</sup><big>C</big>D</u>

注記:線装飾はフォントサイズや縦揃えが異なる要素をまたぐ場合があるため、 線装飾の最適な位置はdecorating boxで決まる理想位置とは限りません。 例えば、小さいフォントに上線を配置した場合、 要素内に大きく異なるフォントサイズのテキストが含まれると実質的に取り消し線のようになってしまうことがあります。 下線でも、テキストがアルファベットベースラインに揃っていない場合 (例えば縦組みスタイルではデフォルトで中央ベースラインに揃う [CSS-WRITING-MODES-4])、 下線が大きなフォントサイズの子孫テキストを横切ることになります。 UAが子孫コンテンツを考慮することで、より良い組版になります。

縦組みテキストの中央ベースライン揃えのため、 小さい縦組みテキストの左下線が大きなフォントサイズの子要素のテキストを横切ってしまいます。 下線は分断してはならず、 位置をさらに左に調整することで 全体の下線テキストを正しく収めることができます。

UAはdecorating boxvertical-alignbaseline以外にシフトされた場合や font-variant-position(上付き・下付き)によってシフトされた場合は 装飾線の位置を一致させなければなりませんが、 そのようにスタイルされたdecorating boxの子孫については 装飾線の位置や太さを調整してはなりません (ただし、前述のように単にフォントサイズが異なる子孫などについては調整しても構いません)。 これにより、上付き・下付き文字自体には正しく(下線・取り消し線などの)装飾が適用され、 祖先側の装飾位置が歪んだり分断されたりすることを防ぎます。

上付き「st」のみに下線を引いた場合はその直下、全体に下線を引く場合はフルサイズテキストに合わせる

上付きテキストへの下線と、上付き要素を含むテキストへの下線の例

2.10. テキスト装飾線の連続性:text-decoration-skipショートハンドとそのサブプロパティ

CSSWGは、スキップ機能を text-decoration-skip-inkのような 個別プロパティに分割することでカスケード挙動を改善することを決議しました。 議論および決議を参照。 このセクションはラフドラフトでCSSWGによる精査は未了です。

名前: text-decoration-skip
値: none | auto
初期値: サブプロパティを参照
適用対象: すべての要素
継承: はい
パーセンテージ: 該当なし
算出値: サブプロパティを参照
標準順序: 文法順
アニメーション型: 離散

text-decoration-skip およびそのサブプロパティ (text-decoration-skip-selftext-decoration-skip-boxtext-decoration-skip-insettext-decoration-skip-spacestext-decoration-skip-ink) は、要素または祖先がdecorating boxである場合の 線装飾の中断を制御します。 none は すべてのサブプロパティを none にし、 auto は すべてのサブプロパティを初期値にします。

この none の定義はWeb互換性があるか? Web互換のためにink値も追加すべきか?

これらのプロパティは継承され、子孫は異なる設定を持つことができます。

HTMLの既定UAスタイルシートに次が追加されます:

ins, del { text-decoration-skip: none; }

text-decoration-line の値が spelling-error または grammar-error の場合、 UAはこれらのプロパティを一部または全て無視しても構いません。

2.10.1. スペースのスキップ:text-decoration-skip-selfプロパティ

名前: text-decoration-skip-self
値: none | objects
初期値: objects
適用対象: すべての要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定されたキーワード
標準順序: 文法順
アニメーション型: 離散

CSSWGは text-decoration-skip をサブプロパティに分割することを決議しましたが、 この値セットはまだCSSWGによる精査が済んでいません。

このプロパティは、祖先によって描画されるテキスト装飾線が この要素に伝播または横断されるかどうかを指定します。 値の意味は次の通りです:

none
何もスキップしません:祖先のdecorating boxesからの線装飾は、このボックスに適宜伝播または横断されます。
objects
この要素がアトミックインライン(画像やinline-blockなど)であれば、その要素(マージンボックス全体)をスキップします。

2.10.2. スペースのスキップ:text-decoration-skip-boxプロパティ

名前: text-decoration-skip-box
値: none | all
初期値: none
適用対象: すべての要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定されたキーワード
標準順序: 文法順
アニメーション型: 離散

CSSWGは text-decoration-skip をサブプロパティに分割することを決議しましたが、 この値セットはまだCSSWGによる精査が済んでいません。

このプロパティは、要素に影響を与えるテキスト装飾線が 要素のボックス領域のどの部分をスキップすべきかを指定します。 これは祖先によって描画されるテキスト装飾線のみを制御します。 値の意味は次の通りです:

none
何もスキップしません:祖先のdecorating boxesからの線装飾は、マージン端からマージン端まで描画されます。
all
祖先のdecorating boxに適用されたテキスト装飾線を描画する際は、 そのボックス自身のマージン・ボーダー・パディング領域をスキップし、 コンテンツ領域内のみに線装飾を描画します。

この値は祖先による装飾にのみ効果があり、 decorating box自身は 自身のボックス装飾上に線を描画することはありません。

2.10.3. インセットエッジ:text-decoration-skip-insetプロパティ

名前: text-decoration-skip-inset
値: none | auto
初期値: none
適用対象: すべての要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定されたキーワード
標準順序: 文法順
アニメーション型: 離散

CSSWGは text-decoration-skip をサブプロパティに分割することを決議しましたが、 この値セットはまだCSSWGで精査されていません。

このプロパティは、要素に影響するテキスト装飾が要素のボックス領域のどの部分をスキップすべきかを指定します。 これは要素自身が描画するすべてのテキスト装飾線を制御しますが、祖先が描画するテキスト装飾線には影響しません。 値の意味は次の通りです:

none
何もスキップしません:テキスト装飾はボックス端から端まで描画されます。
auto
UAは、decorating box のコンテンツエッジから少し内側に線の開始および終了位置を配置しなければなりません。 例えば、2つの下線付き要素が隣り合っているときに、1本の下線に見えないようにします。 インセットの大きさはユーザーエージェントの裁量ですが(例:線の太さの半分など)ゼロであってはなりません。 (これは中国語において、下線が句読点の一種として使われるため重要です。)

中国語の文字列の下に下線があり、隣接する下線付き要素の間に隙間ができている

text-decoration-skip-inset: auto<u>石井</u><u>艾俐俐</u>

このプロパティは text-decoration-skip の一部ではなく独立したプロパティとした方がよいかもしれません。 線の長さを明示的に制御する件については Issue 4557 も参照してください。

2.10.4. スペースのスキップ:text-decoration-skip-spacesプロパティ

名前: text-decoration-skip-spaces
値: none | all | [ start || end ]
初期値: start end
適用対象: すべての要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定されたキーワード
標準順序: 文法順
アニメーション型: 離散

初期値はWeb互換のため none の方が良いか? そうでなければ、少なくともINSとDELはUA既定スタイルでnoneが割り当てられるべきです。 Issue 4653 も参照。

このプロパティはテキスト装飾がスペースをスキップするかどうかを指定します。 要素自身が描画するすべてのテキスト装飾線、および祖先が描画するテキスト装飾線も制御します。 値の意味は次の通りです:

none
スペーサーはスキップされません。他の文字と同じように装飾されます。
all
すべてのスペーサーと、 隣接するletter-spacing または word-spacing もスキップします。
start
行頭にあるスペーサーと 隣接するletter-spacing または word-spacingをスキップします。
end
行末にあるスペーサーと 隣接するletter-spacing または word-spacingをスキップします。

このプロパティの目的において、スペーサーは、 Unicode White_Spaceプロパティを持つ書字素単位(U+202F NARROW NO-BREAK SPACEは除く)および 単語区切りです。

2.10.5. グリフのスキップ:text-decoration-skip-inkプロパティ

名前: text-decoration-skip-ink
値: auto | none | all
初期値: auto
適用対象: すべての要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定されたキーワード
標準順序: 文法順
アニメーション型: 離散

このプロパティは、下線や上線がグリフをまたぐ場合の描画方法を制御します。 これはたとえ子孫ボックスで異なるスタイルが指定されていても、当該要素から発生するすべての装飾に影響します。

有効な場合、装飾線はグリフが描画される部分をスキップします。 つまり、装飾線がグリフを横切る部分で線を中断し、文字形状が見えるようにします。 ユーザーエージェントはグリフ輪郭の両側にも少し間隔を空けてスキップしなければなりません。

ミャンマー文字列に対するアルファベット下線がディセンダや結合文字の縦棒の下をスキップしている

グリフインクのスキップ

表意文字系スクリプトではauto時にスキップを望まないケースがあります。 この挙動をどのように定義すべきか?他にスキップを望まないスクリプトがあるか?autoの動作について規範的な記述が必要です。 telcon minutesalreq#86csswg#1288 を参照。

このプロパティは下線と上線にのみ適用されます。取り消し線は常に連続した線です。

auto
UAは、装飾線がグリフインクやその輪郭の両側にかかる場合、 下線や上線を中断してもよいです。 適用範囲を決定する際、テキストのスクリプト(下記注記参照)を考慮すべきです。
all
UAは、装飾線がグリフインクやその輪郭の両側にかかる場合、 必ず下線や上線を中断しなければなりません
none
UAはグリフをまたいでも下線や上線を中断せず、必ず連続した線を描画しなければなりません
注記:実装経験から、下線付きテキストに表意文字(CJKなど)が含まれる場合、 インクスキップ挙動は望ましくない結果を生むことが多いです。 下線位置が(フォントやUAによって)ほとんどすべてのグリフと衝突するため、 線の断片しか残らないことが多いです。

原則として、著者はtext-underline-position: undertext-underline-offsetを使って 下線位置をグリフと衝突しないよう下げることで回避できますが、 UAがこれらをサポートしていて著者が意図を理解している場合以外、常に現実的とは限りません。 特にユーザー生成コンテンツを含むページでは、デザイン担当者がCJKコンテンツの有無を知り得ないことがあります。 混在スクリプトの場合、CJKに合わせた下線位置は非CJKテキストでは見栄えが悪くなることもあります。

そのためautoが有効な場合、 インクスキップを実装するUAはCJKコンテキストではスキップを行うべきではありません。 (CJKにもインクスキップを適用したい場合は、always値を使って明示的に指定できます。)

主にこれは、Unicode Script propertyが Han、Hiragana、Katakana、Bopomofo、Hangulのいずれか、またはScript propertyがInherited/Commonで ScriptExtensions propertyに CJKスクリプトを含む文字にはインクスキップを適用しないことを意味します。

また、Unicode script propertyがCommonやInherited(主に句読点や記号)であっても、 CJKスクリプト連続区間の一部として使われる場合があるため、 同一スクリプト区間内のテキストを一貫して扱うことが望ましいです。 したがって、UAは“Implementation Notes” ([UAX24])の5.1・5.2節に記載のスクリプト解析手法などで テキストをスクリプト区間に分割し、 CJKと判定された全範囲ではインクスキップを無効にすべきです。

他に(非CJK)スクリプトで auto時に インクスキップをデフォルトでオフにすべきものがあるか?イー文字やアラビア文字など?Issue 1288 も参照。

2.10.6. 形状による中断

UAが下線や上線をグリフ境界で中断する場合、 その境界での線の形状はグリフの形状に従うべきです。

注記:本仕様は「グリフの形状に従う」手法を特定の方式に限定しません。 これはUAが見た目やパフォーマンスを考慮して適切な方法を選択できるようにするためです。 例えば、UAはパフォーマンス上の理由で一定サイズ未満は角ばった終端を仮定したり、 特に細い装飾線の場合は台形状で曲線を近似したりできます。 美的観点では、グリフ境界が線の一部だけを横切る場合や水平方向に近い斜めの場合に、 曲線にぴったり合わせると非常に細長い線片が生じてしまうなど配慮も必要です。 グリフの囲まれた領域内に線を表示するかどうかも考慮点の一つです。
たとえば「goal」の下線がgのループ内を横切る場合、下線位置や太さによってg内で下線が全部見える場合と一部だけ見える場合がある。図は2位置の下線を示す。

下線がボウル内に現れないようにすると文字がより美しく見えます。 外側で曲線終端にすることで、文字を貫通する下線の連続性も示唆できます。

3. 強調記号の追加制御

東アジア文書では、テキストの一連に強調を示すため、各グリフの横や上に小さな記号を付加するのが伝統的です。例:

日本語テキストの上に青色(説明用)の強調記号が付されている

日本語テキストに適用されたアクセント強調記号(説明のため青色で表示)

text-emphasisショートハンドと、 そのtext-emphasis-styletext-emphasis-colorロングハンドで、 このような記号をテキストに付加できます。 text-emphasis-positionプロパティは独立して継承し、 記号のテキストに対する配置を制御できます。

サイズや位置の連続性については 関連issueも参照。

3.1. 強調記号スタイル:text-emphasis-styleプロパティ

名前: text-emphasis-style
値: none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>
初期値: none
適用対象: text
継承: はい
パーセンテージ: 該当なし
算出値: キーワードnone、図形と塗りのキーワードの組、または文字列
標準順序: 文法順
アニメーション型: 離散

このプロパティは要素のテキストに強調記号を付加します。 値の意味は以下の通りです:

none
強調記号を付加しません。
filled
図形を塗りつぶした色で表示します。
open
図形は中空(塗りなし)で表示します。
dot
小さな円(ドット)を記号として表示します。 filledはU+2022 '•'、openはU+25E6 '◦'です。
circle
大きな円を記号として表示します。 filledはU+25CF '●'、openはU+25CB '○'です。
double-circle
二重丸を記号として表示します。 filledはU+25C9 '◉'、openはU+25CE '◎'です。
triangle
三角形を記号として表示します。 filledはU+25B2 '▲'、openはU+25B3 '△'です。
sesame
ゴマ(セサミ)を記号として表示します。 filledはU+FE45 '﹅'、openはU+FE46 '﹆'です。
<string>
指定した文字列を記号として表示します。 著者は<string>に1文字のみ指定すべきです。 UAは複数の書記素クラスタからなる文字列を切り詰めたり無視することがあります。

図形キーワードが指定され、filledまたはopenが指定されていない場合、filledが指定されたとみなします。 filledまたはopenのみ指定した場合、図形キーワードは横書きtypographic modesではcircleに、 縦書きtypographic modesではsesameになります。

記号は要素のフォント設定を使い、ruby特性を加え、サイズを50%に縮小して描画されるべきです。 ただし全てのフォントがこれらのグリフを持つわけではなく、記号用コードポイントのサイズが不適切なフォントもあるため、 UAは強調記号に適したフォントを使ったり、UAが記号自体を合成しても構いません。 記号は縦書きtypographic modesでは常に正立(回転しません)。 横書きtypographic modesの縦書きwriting modesでの記号の向きは本レベルでは未定義です(今後明確なユースケースが出れば定義される場合があります)。

注: 強調記号に適したフォントの例としてAdobeのオープンソースKenten Generic OpenType Fontがあります。

強調記号は各書字素単位ごとに1回描画されます。 ただし、以下の場合は描画されません

注: どの文字に記号を付けるかの制御はLevel 4で追加予定です。 (句読点リストは特に非CJK用に精査される可能性があります。)

3.2. 強調記号色:text-emphasis-colorプロパティ

名前: text-emphasis-color
値: <color>
初期値: currentcolor
適用対象: text
継承: はい
パーセンテージ: 該当なし
算出値: 算出された色
標準順序: 文法順
アニメーション型: 算出値型による

このプロパティは強調記号の前景色を指定します。

注: currentcolorキーワードは自分自身に算出され、継承後にcolor値に解決されます。 つまり、text-emphasis-color はデフォルトでテキストcolorと一致し、colorが要素ごとに変わっても追従します。

3.3. 強調記号ショートハンド:text-emphasis プロパティ

名前: text-emphasis
値: <'text-emphasis-style'> || <'text-emphasis-color'>
初期値: 個々のプロパティを参照
適用対象: 個々のプロパティを参照
継承: 個々のプロパティを参照
パーセンテージ: 個々のプロパティを参照
算出値: 個々のプロパティを参照
アニメーション型: 個々のプロパティを参照
標準順序: 文法順

このプロパティはtext-emphasis-styletext-emphasis-colorを一度に設定するショートハンドです。 省略された値は初期値になります。

注:text-emphasis-positionはこのショートハンドでリセットされません。通常、記号の形や色は変わっても、位置は言語ごとに文書全体で一貫しているため、位置は独立して継承されるべきです。

3.4. 強調記号位置:text-emphasis-positionプロパティ

名前: text-emphasis-position
値: [ over | under ] && [ right | left ]?
初期値: over right
適用対象: text
継承: はい
パーセンテージ: 該当なし
算出値: 指定されたキーワード
標準順序: 文法順
アニメーション型: 離散

このプロパティは強調記号の描画位置を指定します。 [ right | left ] を省略した場合、デフォルトはrightです。 値の意味は以下の通りです:

over
横書きtypographic modesでテキストの上に記号を描画します。
under
横書きtypographic modesでテキストの下に記号を描画します。
right
縦書きtypographic modesでテキストの右側に記号を描画します。
left
縦書きtypographic modesでテキストの左側に記号を描画します。

強調記号は、各文字にルビ注記(ruby)がtext-emphasis-positionで与えたルビ位置・中央揃えで割り当てられたかのように描画されます。 この位置が下線や上線と衝突する場合は調整されることがあります。

強調記号が行の高さに与える影響はルビテキストと同じです。

注記:強調記号の推奨位置は言語によって異なります。例えば日本語ではover rightが推奨位置ですが、中国語ではunder rightです。 下記の表は中国語・日本語の推奨位置をまとめたものです:
中国語・日本語の推奨強調記号・ルビ位置
言語 推奨位置 イラスト
横書き 縦書き
日本語 over right 横書き日本語テキストの各文字の上に強調記号が付く 縦書き日本語テキストの各文字の右側に強調記号が付く
韓国語
モンゴル語
中国語 under right 横書き中国語テキストの各文字の下に強調記号が付く

強調記号が、同じ位置にルビが描画される文字に適用された場合、記号はルビの外側に配置されます。 これは自動非表示や空のルビ注記も含みます。

4文字に強調記号を付し、そのうち2文字にルビがある例。素の文字にはルビ位置に記号、ルビ付きにはルビの上に記号。

ルビ付き文字を含む4文字への強調記号例

一部の編集者は、ルビと強調記号が競合する場合に強調記号を非表示にしたいと考えます。 HTMLでは次のスタイルルールで実現できます:
ruby { text-emphasis: none; }

他の編集者は、逆に強調記号と競合する場合にルビを非表示にしたい場合もあります。 HTMLでは次のようなパターンで実現できます:

em { text-emphasis: dot; } /* <em>要素に強調記号を付加 */
em rt { display: none; }   /* <em>内のルビを非表示 */

3.5. 強調マークスキップ: text-emphasis-skip プロパティ

このセクションはブレーンストーミング中です。 また、このプロパティが本当に必要かどうかも、出版物ごとの望ましい動作の違いにもかかわらず、まだ明確ではありません。

名前: text-emphasis-skip
値: spaces || punctuation || symbols || narrow
初期値: spaces punctuation
適用対象: text
継承: yes
百分率: N/A
算出値: 指定されたキーワード
正規の順序: 文法による
アニメーション型: discrete

このプロパティは、どの文字にマークを描画するかを記述します。 各値の意味は次の通りです:

spaces
単語区切りやその他の Unicode区切りカテゴリ(Z*)に属する文字をスキップします。 (ただし、結合文字と組み合わさるスペースには強調マークが描画される点に注意してください。)
punctuation
句読点をスキップします。 この定義の句読点は、下記「記号」として定義されていないUnicode P*カテゴリに属する文字を含みます。
symbols
記号をスキップします。 この定義の記号には、 Unicode S* 一般カテゴリに属する全ての書字単位、およびUnicode Poカテゴリに属し NFKD同値な下記文字が含まれます:
# U+0023 NUMBER SIGN
% U+0025 PERCENT SIGN
U+2030 PER MILLE SIGN
U+2031 PER TEN THOUSAND SIGN
٪ U+066A ARABIC PERCENT SIGN
؉ U+0609 ARABIC-INDIC PER MILLE SIGN
؊ U+060A ARABIC-INDIC PER TEN THOUSAND SIGN
& U+0026 AMPERSAND
U+204A TIRONIAN SIGN E[[
@ U+0040 COMMERCIAL AT
§ U+00A7 SECTION SIGN
U+00B6 PILCROW SIGN
U+204B REVERSED PILCROW SIGN
U+2053 SWUNG DASH
〽️ U+303D PART ALTERNATION MARK
narrow
Unicodeデータベース East_Asian_Width プロパティ [UAX11] [UAX44] が F(全角)またはW(ワイド)でない文字をスキップします。

Unicodeの制御コードや未割り当て文字(Cc, Cf, Cn)クラスに属する文字は、このプロパティの値にかかわらず常にスキップされます。

この構文はスペースにもマーク描画を要求します。 そのような用途はあるでしょうか? もしなければ、スペースへのマーク描画を許可しないよう構文を修正すべきでしょうか?

初期値についての議論も参照

4. テキストシャドウ: text-shadow プロパティ

名前: text-shadow
値: none | <shadow>#
初期値: none
適用対象: text
継承: yes
百分率: n/a
算出値: キーワードnoneまたは 各項目が4つの絶対長さ+算出された色(さらに任意でinsetキーワード)を伴うリスト
正規の順序: 文法による
アニメーション型: シャドウリストとして

このプロパティは、要素のテキストに適用されるカンマ区切りのシャドウ効果リストを受け付けます。 値の解釈は box-shadow [CSS-BACKGROUNDS-3] と同様です。 各レイヤーは要素のテキストおよびすべてのテキストデコレーション(合成後)にシャドウを付けます。 シャドウ効果は前面から背面の順に適用されます。 最初のシャドウが一番上にきます。 そのため、シャドウ同士が重なることがあります。

box-shadow と異なり、 spread distance は常にグリフ輪郭のあらゆる点からの外側距離として厳密に解釈されます。 そのため、ぼかし半径と同様に、角は鋭角ではなく丸くなります。 spread値が負の場合は無効です。

角の形状を未定義のままとするか? [Issue #7250]

外側テキストシャドウinset キーワードなしで指定)は、 テキスト—およびすべてのテキストストローク [FILL-STROKE-3]をまるで周囲のキャンバス上に切り抜かれて持ち上がっているかのように影を付けます。 box-shadow と異なり、外側テキストシャドウは影付けされた形状にクリップされず、 テキストが半透明の場合、下に透けて見える場合があります。

内側テキストシャドウinset キーワード付きで指定)は、 テキスト—およびすべてのテキストストローク [FILL-STROKE-3]が周囲のキャンバスの下に切り落とされたかのように影を付けます。 したがって影はストロークの内縁内のみに描画されます。

外側テキストシャドウ は、要素の境界線・背景(存在する場合)とテキスト・テキストデコレーションの間のスタックレベルで描画されなければなりません。 内側テキストシャドウはテキストおよびデコレーションの上に描画される必要があります。 UAは、同じスタックレベルやスタッキングコンテキストに属する隣接要素上のテキストにシャドウを重ねて描画することを避けるべきです。 (影の正確なスタックレベルは、要素に枠線や背景があるかに依存するため、UA定義となる場合があります。)

ストロークとの重なり順は? [Issue #7251]

box-shadow と同様に、テキストシャドウはレイアウトに影響せず、 スクロールを発生させたり スクロール可能なオーバーフロー領域のサイズを増やしたりしません。

text-shadow プロパティは ::first-line および ::first-letter 疑似要素の両方に適用されます。

5. テキストデコレーションの描画

5.1. テキストデコレーションの描画順序

[CSS2]と同様に、テキストデコレーションは装飾するテキストの直上/直下に描画され、 次の順序で(最も下が最初)描画されます:

線の装飾がボックス装飾やアトミックインライン上を横切る場合、 それらは非配置コンテンツの上、かつ配置された子孫の直下(CSS2.1 Appendix Eのレイヤ#8の直下)に描画されます。

5.2. テキストデコレーションのオーバーフロー

ボックスの外にはみ出すテキストデコレーションは、インクオーバーフローとみなされます。 それらは スクロール可能なオーバーフロー領域を拡張しません。[css-overflow-3]

付録A: 謝辞

この仕様の策定には、以下の方々の協力が不可欠でした: Ayman Aldahleh, Bert Bos, Tantek Çelik, Stephen Deach, John Daggett, Martin Dürst, Laurie Anna Edlund, Ben Errez, Yaniv Feinberg, Arye Gittelman, Ian Hickson, Martin Heijdra, Richard Ishida, Masayasu Ishikawa, Michael Jochimsen, Eric LeVine, Ambrose Li, Håkon Wium Lie, Chris Lilley, Ken Lunde, Nat McCully, Shinyu Murakami, Paul Nelson, Chris Pratley, Marcin Sawicki, Arnold Schrijver, Rahul Sonnad, Michel Suignard, Takao Suzuki, Frank Tang, Chris Thrasher, Etan Wexler, Chris Wilson, Masafumi Yabe and Steve Zilles.

付録B: デフォルトUAスタイルシート

この付録は情報提供目的であり、 UA開発者がデフォルトスタイルシートを実装する際の助けとなるものですが、 必ずしも従う必要はありません。

/* typical styling of HTML */
blink {
  text-decoration-line: blink;
}
s, strike, del {
  text-decoration: line-through;
}
u, ins, :link, :visited {
  text-decoration: underline;
}
abbr[title], acronym[title] {
  text-decoration: dotted underline;
}

/* disable inheritance of text-emphasis marks to ruby text:
  emphasis marks should only apply to base text */
rt { text-emphasis: none; }

/* set language-appropriate default emphasis mark position */
:root:lang(zh), [lang|=zh] { text-emphasis-position: under right; }
[lang|=ja], [lang|=ko]     { text-emphasis-position: over right; }

/* set language-appropriate default underline position */
:root:lang(ja), [lang|=ja],
:root:lang(mn), [lang|=mn],
:root:lang(ko), [lang|=ko] { text-underline-position: right; }
:root:lang(zh), [lang|=zh] { text-underline-position: left;  }
/* auto is chosen (implied) above instead of under
   due to content-compatibility concerns */

問題や追加すべき提案、修正があれば www-style@w3.org 宛に 件名に [css-text-decor] を入れて送信してください。

text-decoration-line: blink は他の既存プロパティだけでは完全な再現はできませんが、 作者は以下のCSSで非常によく似た効果を実現できます:
@keyframes blink {
  0% {
    visibility: hidden;
    animation-timing-function: step-end;
  }
  25%, 100% {
    visibility: visible;
  }
}
blink {
  animation: blink 1s infinite;
}

付録C: 変更点

2020年5月6日ワーキングドラフト以降の主な変更点

2020年5月6日ワーキングドラフト以降の主な変更点:

Level 3 以降の追加点

以下の機能が Level 3 以降で追加されました:

6. プライバシーとセキュリティ上の考慮事項

この仕様は新たなプライバシーやセキュリティ上の考慮事項を導入しません。

適合性

ドキュメントの規約

適合性要件は、説明的な主張とRFC 2119の用語の組み合わせで表現されています。キーワード「MUST」, 「MUST NOT」,「REQUIRED」,「SHALL」,「SHALL NOT」,「SHOULD」,「SHOULD NOT」, 「RECOMMENDED」,「MAY」,「OPTIONAL」は、RFC 2119で説明されている通りに解釈されます。 ただし、可読性を考慮し、この仕様ではこれらの語はすべて大文字で表記されているわけではありません。

この仕様の本文は、非規範的と明示されたセクションや例、注記を除き、すべて規範的です。[RFC2119]

この仕様の例は「例えば」で導入されるか、または下記のように class="example" で通常の本文と区別されます:

これは情報提供的な例です。

情報提供的な注記は「Note」で始まり、下記のように class="note" で本文と区別されます:

Note: これは情報提供的な注記です。

アドバイスは規範的な節で特別な注意を喚起するため、下記のように <strong class="advisement"> で本文と区別されます: UAはアクセシブルな代替手段を必ず提供する必要があります。

適合クラス

この仕様への適合は、次の3つの適合クラスで定義されます:

スタイルシート
CSS スタイルシート
レンダラー
UA(ユーザーエージェント)で、スタイルシートの意味を解釈し、 それを用いた文書をレンダリングするもの。
オーサリングツール
UA で、スタイルシートを書き出すもの。

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

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

オーサリングツールは、一般的なCSS文法および本モジュール内の各機能の個別文法に従って構文的に正しいスタイルシートを書き出し、 本モジュールで説明されるスタイルシートのその他の適合要件も満たす場合、本仕様に適合します。

部分実装

作者が将来互換性のあるパース規則を活用しフォールバック値を指定できるように、 CSSレンダラーは、サポートできるレベルにない at-rule、プロパティ、プロパティ値、キーワード、 及びその他の構文構造を全て無効(および適切に無視)として扱う必要があります。 特に、ユーザーエージェントはサポートされない値だけを選択的に無視し、 1つのマルチ値プロパティ宣言内でサポートされている値のみを適用してはなりません。 いずれかの値が無効(サポートされない値は必ず無効)と判断された場合、CSSは宣言全体を無視することを要求します。

不安定機能・独自拡張の実装

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

非実験的実装

仕様がCandidate Recommendation段階に達した場合、 非実験的な実装が可能となり、実装者は正しく仕様通りに実装できたCRレベルの機能については ベンダープレフィックスなしでリリースすべきです。

CSSの相互運用性を確立・維持するため、 CSSワーキンググループは非実験的CSSレンダラーに対し、 実装レポート(および必要に応じてそのレポートに用いたテストケース)を W3Cに提出するよう要請しています。W3Cへ提出されたテストケースは CSSワーキンググループによりレビュー・修正される場合があります。

テストケースや実装レポートの提出方法など詳細は CSSワーキンググループのWebサイト https://www.w3.org/Style/CSS/Test/ を参照してください。 問い合わせは public-css-testsuite@w3.org メーリングリストまで。

索引

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

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

参考文献

規範的参照

[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2021年7月26日. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4. 2018年12月18日. WD. 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日. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley; Lea Verou. CSS Color Module Level 4. 2021年12月15日. WD. URL: https://www.w3.org/TR/css-color-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2021年9月3日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-FONTS-3]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 3. 2018年9月20日. REC. URL: https://www.w3.org/TR/css-fonts-3/
[CSS-FONTS-4]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 4. 2021年12月21日. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-INLINE-3]
Dave Cramer; Elika Etemad; Steve Zilles. CSS Inline Layout Module Level 3. 2020年8月27日. WD. URL: https://www.w3.org/TR/css-inline-3/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2021年12月23日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. 2021年12月16日. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2020年12月31日. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-RUBY-1]
Elika Etemad; 他. CSS Ruby Annotation Layout Module Level 1. 2021年12月2日. WD. URL: https://www.w3.org/TR/css-ruby-1/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS Syntax Module Level 3. 2021年12月24日. CR. URL: https://www.w3.org/TR/css-syntax-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS Text Module Level 3. 2021年4月22日. CR. URL: https://www.w3.org/TR/css-text-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2019年6月6日. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2021年12月16日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2019年7月30日. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[FILL-STROKE-3]
Elika Etemad; Tab Atkins Jr.. CSS Fill and Stroke Module Level 3. 2017年4月13日. WD. URL: https://www.w3.org/TR/fill-stroke-3/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2018年11月21日. WD. URL: https://www.w3.org/TR/selectors-4/
[UAX11]
Ken Lunde 小林劍󠄁. East Asian Width. 2021年8月23日. Unicode Standard Annex #11. URL: https://www.unicode.org/reports/tr11/tr11-39.html
[UAX15]
Ken Whistler. Unicode Normalization Forms. 2021年8月27日. Unicode Standard Annex #15. URL: https://www.unicode.org/reports/tr15/tr15-51.html
[UAX24]
Ken Whistler. Unicode Script Property. 2021年8月27日. Unicode Standard Annex #24. URL: https://www.unicode.org/reports/tr24/tr24-32.html
[UAX44]
Ken Whistler; Laurențiu Iancu. Unicode Character Database. 2021年8月30日. Unicode Standard Annex #44. URL: https://www.unicode.org/reports/tr44/tr44-28.html

参考情報

[CSS-CASCADE-6]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 6. 2021年12月21日. WD. URL: https://www.w3.org/TR/css-cascade-6/
[CSS-TEXT-DECOR-3]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 3. 2019年8月13日. CR. URL: https://www.w3.org/TR/css-text-decor-3/
[CSS3-ANIMATIONS]
Dean Jackson; 他. CSS Animations Level 1. 2018年10月11日. WD. URL: https://www.w3.org/TR/css-animations-1/

プロパティ索引

名前 初期値 適用対象 継承 %ages アニメーション型 正規の順序 算出値
text-decoration <'text-decoration-line'> || <'text-decoration-thickness'> || <'text-decoration-style'> || <'text-decoration-color'> 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 文法による 個別プロパティ参照
text-decoration-color <color> currentcolor 全要素 no n/a 算出値型による 文法による 算出色
text-decoration-line none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error none 全要素 no(前述の記述参照) n/a discrete 文法による 指定キーワード
text-decoration-skip none | auto 個別プロパティ参照 全要素 yes N/A discrete 文法による 個別プロパティ参照
text-decoration-skip-box none | all none 全要素 yes N/A discrete 文法による 指定キーワード
text-decoration-skip-ink auto | none | all auto 全要素 yes N/A discrete 文法による 指定キーワード
text-decoration-skip-inset none | auto none 全要素 yes N/A discrete 文法による 指定キーワード
text-decoration-skip-self none | objects objects 全要素 yes N/A discrete 文法による 指定キーワード
text-decoration-skip-spaces none | all | [ start || end ] start end 全要素 yes N/A discrete 文法による 指定キーワード
text-decoration-style solid | double | dotted | dashed | wavy solid 全要素 no n/a discrete 文法による 指定キーワード
text-decoration-thickness auto | from-font | <length> | <percentage> auto 全要素 no N/A 算出値による 文法による 指定キーワードまたは絶対長さ
text-emphasis <'text-emphasis-style'> || <'text-emphasis-color'> 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 文法による 個別プロパティ参照
text-emphasis-color <color> currentcolor text yes n/a 算出値型による 文法による 算出色
text-emphasis-position [ over | under ] && [ right | left ]? over right text yes n/a discrete 文法による 指定キーワード
text-emphasis-skip spaces || punctuation || symbols || narrow spaces punctuation text yes N/A discrete 文法による 指定キーワード
text-emphasis-style none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string> none text yes n/a discrete 文法による noneキーワード、形状と塗りのキーワードペア、または文字列
text-shadow none | <shadow># none text yes n/a シャドウリストとして 文法による noneキーワードまたは 各項目が4つの絶対長さ+算出された色(さらに任意でinsetキーワード)を持つリスト
text-underline-offset auto | <length> | <percentage> auto 全要素 yes N/A 算出値による 文法による 指定キーワードまたは絶対長さ
text-underline-position auto | [ from-font | under ] || [ left | right ] auto 全要素 yes n/a discrete 文法による 指定キーワード

課題索引

このセクションはText Decoration Level 3の初期ドラフトからコピーされています。 現在も審査中であり、text-underline-offsettext-decoration-thicknessとの統合が必要です。
単純化のため、line-throughは各要素のその要素の推奨または平均位置で描画すべきです。 これにより好ましくないジャンプが発生することがありますが、全ての場合に正しい方法で回避する手段はないようで、 すべての試みは煩雑になりがちです。 異なるfont-sizeを持つがconsidered textを持たない要素上では、line-throughはどの位置に描画すべきでしょうか?
CSSWGは、text-decoration-skip-inkのような個別プロパティへスキップ機能を分割し、 カスケード動作を改善することを決議しました。 議論決議も参照してください。 このセクションはラフなドラフトであり、まだCSSWGで精査されていません。
このnoneの定義はWeb互換でしょうか? Web互換のためにink値も追加する必要があるでしょうか?
CSSWGはtext-decoration-skipをサブプロパティに分割することを決議しましたが、 この値セットはまだCSSWGで精査されていません。
CSSWGはtext-decoration-skipをサブプロパティに分割することを決議しましたが、 この値セットはまだCSSWGで精査されていません。
CSSWGはtext-decoration-skipをサブプロパティに分割することを決議しましたが、 この値セットはまだCSSWGで精査されていません。
これはtext-decoration-skipセットの一部ではなく独立したプロパティとすべきかもしれません。 行の長さを明示的に制御するIssue 4557も参照。
初期値はWeb互換のためnoneであるべきでしょうか? そうでない場合、少なくともINSやDELにはUAデフォルトスタイルシートでnoneを割り当てるべきです。 Issue 4653も参照。
表意文字スクリプトではauto時にスキップしないことが望ましいです。 この動作をどう定義すべきでしょうか? 他にもスキップしないことを望むスクリプトはあるでしょうか? autoの動作を記述する規範的テキストが必要です。 電話会議議事録alreq#86csswg#1288も参照。
他に(非CJKの)スクリプトで、デフォルトでインクスキップを無効化する方が望ましいものはあるでしょうか (autoが有効な場合)? 例えばイ文字?アラビア文字? (Issue 1288での議論も参照。)
サイズ/位置の連続性に関する課題も参照。
このセクションはブレーンストーミング中です。 また、出版物ごとに望まれる動作の違いがあるにもかかわらず、このプロパティが本当に必要かどうかもまだ明確ではありません。
この構文はスペースにもマーク描画を要求します。 そのような用途はあるでしょうか? もしなければ、スペースへのマーク描画を許可しないよう構文を修正すべきでしょうか?
初期値についての議論も参照。
角の形状を未定義のままとするか?[Issue #7250]
ストロークとの重なり順は?[Issue #7251]
問題や追加すべき提案、修正があれば www-style@w3.org 宛に 件名に[css-text-decor]を入れて送信してください。