CSS テキストモジュール レベル 3

W3C 勧告候補草案,

この文書についての詳細
このバージョン:
https://www.w3.org/TR/2026/CRD-css-text-3-20260608/
最新公開バージョン:
https://www.w3.org/TR/css-text-3/
編集者草案:
https://drafts.csswg.org/css-text-3/
過去のバージョン:
履歴:
https://www.w3.org/standards/history/css-text-3/
実装報告:
https://test.csswg.org/harness/results/css-text-3_dev/grouped/
テストスイート:
http://test.csswg.org/suites/css3-text/nightly-unstable/
https://wpt.fyi/results/css/css-text/
フィードバック:
CSSWG 課題リポジトリ
編集者:
Elika J. Etemad / fantasai (Apple)
(招待専門家)
Florian Rivoal (招待専門家)
この仕様の編集を提案:
GitHub エディター
テストカバレッジ分析:
https://drafts.csswg.org/css-text-3/test-coverage

概要

この CSS モジュールは、テキスト操作のためのプロパティを定義し、それらの処理モデルを規定する。行の 改行、均等割り付けと配置、空白の扱い、およびテキスト変換を対象とする。

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

この文書のステータス

この節は、この文書の公開時点におけるステータスを説明する。 現在の W3C 公開文書の一覧 およびこの技術報告書の最新改訂版は、 W3C 標準および草案インデックスで確認できる。

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

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

フィードバックは、 GitHub で課題を提出する(推奨)ことにより送信してください。 その際、タイトルに仕様コード “css-text” を含め、次のようにしてください: “[css-text] …コメントの要約…”。 すべての課題とコメントはアーカイブされる。 あるいは、フィードバックを(アーカイブ済みの)公開メーリングリスト www-style@w3.orgに送信することもできる。

この文書は、 2025年8月18日版 W3C Process Documentに準拠する。

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

以下の機能はリスクありであり、CR 期間中に削除される可能性がある:

“リスクあり” は W3C Process の専門用語であり、必ずしもその機能が削除または遅延される危険に あることを意味しない。これは、WG がその機能を適時に相互運用可能に実装することが困難である可能性があると 考えていることを意味し、そのように示すことで、Proposed Rec 段階へ移行する際に必要であれば、その機能を含まない 新しい Candidate Rec を先に公開しなくても、WG がその機能を削除できるようにする。

1. はじめに

このモジュールは CSS の組版制御について述べる。 すなわち、ソーステキストを整形済みで行折り返しされたテキストへ変換することを 制御する CSS の機能である。 さまざまな CSS プロパティにより、 大文字・小文字変換空白の折りたたみテキストの折り返し行分割規則 および ハイフネーション配置と均等割り付け間隔、 そして インデントを制御できる。

注記: フォント選択は CSS Fonts Module で扱われる。 [CSS-FONTS-3]

下線、 圏点、 および などの テキスト装飾機能は、 (以前はこのモジュールの一部であったが) CSS Text Decoration Module で扱われる。 [CSS-TEXT-DECOR-3]

双方向および 縦書きテキストは CSS Writing Modes Module で扱われる。 [CSS-WRITING-MODES-4].

世界中のさまざまな言語および表記体系の 組版要件に関する追加情報は、 Internationalization Working GroupLanguage Enablement Indexで確認できる。 [TYPOGRAPHY]

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

このモジュールは、CSS Text Decoration Module とともに、 Cascading Style Sheets Level 2 第 16 章 で定義されたテキストレベルの機能を置き換え、拡張する。 [CSS-TEXT-DECOR-3] [CSS2]

以下で定義される用語に加えて、 この仕様で用いられる他の用語および概念は、 Cascading Style Sheets Level 2 および CSS Writing Modes Module で定義される。 [CSS2] および [CSS-WRITING-MODES-4].

1.2. 値の定義

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

各定義に列挙されたプロパティ固有の値に加えて、 この仕様で定義されるすべてのプロパティは、 そのプロパティ値として CSS 全域キーワードも受け入れる。 読みやすさのため、それらは明示的には繰り返していない。

1.3. 言語と組版

著者は、最良の組版動作を得るために、 コンテンツへ正確に言語タグを付けるべきである。

多くの組版効果は言語的文脈によって異なる。 言語および表記体系の慣習は、 行分割、ハイフネーション、均等割り付け、グリフ選択、 そしてその他多くの組版効果に影響し得る。 CSS では、言語固有の組版調整は 内容言語が既知(宣言済み)である場合にのみ適用される。 したがって、 より高品質な組版には、著者が文書内のテキストの 正しい言語的文脈を UA に伝えることが必要である。

ある要素の 内容言語とは、 文書言語の規則に従って、 その要素が属すると宣言されている(人間の)言語である。 要素の 内容言語が 不明であり得ることに注意すること—​たとえば、タグ付けされていない内容、 または言語タグ付け機能を持たない 文書言語内の内容は、 不明な 内容言語を持つものとみなされる。

注記: 著者は HTML のグローバル lang 属性 または XML の汎用 xml:lang 属性を用いて 内容言語を宣言できる。 HTML における HTML 要素の内容言語を決定する規則 および XML 1.0 における XML 要素の内容言語を決定する規則を参照。 [HTML] [XML10]

ある要素が属すると宣言されている 内容言語は、 その要素で用いられるその言語の特定の書記形式も識別し、 それは 内容表記体系として知られる。 内容言語を識別するための 文書言語の機能に応じて、 この情報は明示的または暗黙的になり得る。 規範的な 付録 F: 内容表記体系の特定を参照。

注記: 一部の言語には複数の表記体系の伝統がある。 また、ある言語が外来の表記体系へ音写される場合もある。 著者はそのような場合をサブタグ付けし、 UA が適切に適応できるようにすべきである。

たとえば、韓国語(ko)は ハングル(-Hang)、 漢字(-Hani)、 またはその組み合わせ(-Kore)で書くことができる。 漢字のみで書かれた歴史的文書では 単語間スペースを用いず、 現代韓国語よりも現代中国語に近い形で組まれる。 言い換えると、組版上は ko-Hanikoko-Kore)よりも zh-Hant に近く振る舞う。

別の例として、日本語(ja)は通常、 ひらがな(-Hira)、 カタカナ(-Kana)、漢字(-Hani)の 組み合わせ(-Japn)で書かれる。 しかし、語学学習用教科書などの特殊な目的のために ラテン文字(-Latn)へ「ローマ字化」されることもあり、 その場合は日本語よりも英語に近い形で組まれるべきである。

第三の例として、現代モンゴル語は二つの文字体系で書かれる: キリル文字(-Cyrl、モンゴル国で公式に使用) とモンゴル文字(-Mong、中国の一部である内モンゴルでより一般的)。 これらは非常に異なる組版要件を持ち、 キリル文字はラテン文字やギリシャ文字に類似して振る舞い、 モンゴル文字はアラビア語および中国語の表記慣習の両方に由来する。

1.4. 文字と字母

組版の基本単位は 文字である。 しかし、表記体系は基本的な英語アルファベットほど単純とは限らないため、 文字が実際に何を意味するかは、 その用語が使われる文脈に依存する。 たとえば、ハングル(韓国語の表記体系)では、 音節の各四角い表現 (例: =Han) を 文字とみなすことができる。 しかし、その四角い記号は実際には、それぞれが音素を表す複数の字母から構成される (例: =h=a=n) ため、それらもそれぞれ 文字とみなし得る。

任意のエンコーディングにおけるコンピュータテキスト符号化の基本単位も 文字と呼ばれ、 エンコーディングによっては、 単一の符号化 文字が 合成済みの音節 文字全体(例: )に対応する場合も、 個々の音素的 文字(例: )に対応する場合も、 あるいは、 基本文字形(例: )や それを変化させる結合記号(例: 気音化を表す余分な筆画)などの より小さな単位に対応する場合もある。

さらに、単一の符号化 文字は、 データストリーム内で 1 つ以上のバイトとして表現され得る。 また、プログラミング環境では 1 バイトも 文字と呼ばれることがある。

したがって、技術的な精密さが要求される場合、 文字という用語はかなり曖昧である。

テキストレイアウトについては、テキストの基本単位として 組版文字単位 を用いる。 テキストレイアウトの領域内でさえ、 関連する 文字単位は 操作によって異なる。 たとえば、行分割および字間調整では、 U+0E33 ำ THAI CHARACTER SARA AM を含むタイ文字列を異なるように分節化することがある。 また、デーヴァナーガリーなどの文字体系における結合子音の挙動は、 使用されるフォントに依存する場合がある。 したがって、組版文字は、特定の組版操作 (行分割、first-letter 効果、トラッキング、均等割り付け、縦方向配置など)に関して 分割不能な、表記体系の単位—​ラテン文字のアルファベット字母(そのダイアクリティカルマークを含む)、 ハングル音節、 中国語表意文字、 ミャンマー語音節クラスタなど—​を表す。

Unicode Standard Annex #29: Text Segmentation は、組版文字に近似する 書記素クラスタ という単位を定義する。 [UAX29] UA は、その 組版文字単位の基礎として、 UAX29 で定義される 拡張書記素クラスタ旧来の書記素クラスタではない)を用いなければならない。 ただし、既定の規則が常に適切または理想的とは限らないため、 UA は組版上の伝統に必要とされるとおり定義を調整すべきであり、 必要に応じて操作ごとに異なる調整を行うことが期待される。

注記: そのような調整の規則は CSS の範囲外である。

以下は、標準的な組版慣行によって必要とされる 組版文字単位の調整例である:

組版字母単位 (またはこの仕様の目的における 字母) は、Letter または Number の 一般 カテゴリのいずれかに属する 組版文字単位である。 組版文字単位の Unicode プロパティを 決定する方法については、付録 E: 文字とプロパティを参照。

要素境界で分割された 組版文字単位のレンダリング特性は未定義である。 理想的には、各構成部分は、 その要素それぞれのプロパティの整形要件に従ってレンダリングされつつ、 組版文字単位全体としての 正しい字形形成と位置決めを維持すべきである。 しかし、その各部分の間の整形差の性質 および使用中のフォント技術の能力によっては、 これは常に可能とは限らない。 したがって、そのような 組版文字単位は 境界のどちらか一方に属するものとしてレンダリングされるか、 または両方に属するものの近似としてレンダリングされることがある。 著者は、書記素クラスタ または合字を 要素境界で分割すると、一貫しない、または望ましくない結果を生じ得ることに注意されたい。

1.5. テキスト処理

CSS は Unicode を基盤としている。 [UNICODE] Unicode をサポートする UA は、 CSS によって明示的に上書きされる場合を除き、 Unicode Core Standard のすべての規範的要件に従わなければならない。 非 Unicode テキストエンコーディングモデルを基盤として実装された UA も、 適切なマッピングおよび類似の挙動を仮定することにより、 同じテキスト処理要件を満たすことが期待される。

テキスト処理 (空白処理、テキスト変換、行分割など) のための隣接性を決定する目的において、 したがって一般にこの仕様の範囲内では、 介在する インラインボックス境界および フロー外 要素は 無視されなければならない。 ただし、テキストの字形形成に関しては、§ 7.3 要素境界をまたぐ字形形成を参照。

2. テキストの変換

2.1. 大文字・小文字変換: text-transform プロパティ

名前: text-transform
値: none | [capitalize | uppercase | lowercase ] || full-width || full-size-kana
初期値: none
適用対象: テキスト
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード
正規順序: n/a
アニメーション型: 離散

このプロパティは、スタイル付けの目的でテキストを変換する。 これは基礎となる内容には影響せず、 プレーンテキストのコピー & ペースト操作の内容に影響してはならない。

著者は意味論上の目的で text-transform に依存してはならない。 そうではなく、正しい大文字・小文字および意味論は ソース文書のテキストとマークアップ内に符号化されるべきである。

値は次の意味を持つ:

none
効果なし。
capitalize
各単語の最初の 組版字母単位が小文字であれば、 タイトルケースにする。 その他の文字は影響を受けない。
uppercase
すべての 字母を大文字にする。
lowercase
すべての 字母を小文字にする。
full-width
すべての 組版文字単位全角形式にする。 文字に対応する 全角形式が存在しない場合、 そのまま残される。 この値は通常、ラテン文字や数字を 表意文字であるかのように組版するために使用される。
full-size-kana
すべての小書き仮名 文字を、対応する通常サイズ仮名に変換する。 この値は通常、ルビ注釈テキストに用いられる。 著者が、ルビで通常使用される小さいフォントサイズでの可読性の問題を補うために、 すべての小書き仮名を大きな仮名として描画したい場合があるためである。
次の例は、日本語テキスト内の略語に用いられる ASCII 文字を全角の異体に変換し、 表意文字のように配置および行分割されるようにする:
abbr:lang(ja) { text-transform: full-width; }

注記: text-transform の目的は、 文書の意味論に影響を与えずに 表示上の大文字・小文字変換を可能にすることである。 特に、text-transform による大文字・小文字操作は不可逆であり、 テキストの意味を歪め得ることに注意すること。 アクセシビリティインターフェイスは、 レンダリングされたテキストの見かけ上の大小文字をユーザーへ伝えたい場合があるが、 変換されたテキストは文書の基礎的な意味を正確に表すものとして 信頼することはできない。

この例では、 テキストの最初の行が視覚効果として大文字化される。
section > p:first-of-type::first-line {
  text-transform: uppercase;
}

この効果はソース文書に書き込むことはできない。 行分割の位置がレイアウトに依存するためである。 さらに、大文字化は意味論上の区別を反映しておらず、 段落の読みを変える意図もない。 したがって、それは表現層に属する。

この例では、 主段落テキストの半分の大きさである ルビ 注釈が、 小書き仮名の代わりに 通常サイズの仮名を用いるよう変換される。
rt { font-size: 50%; text-transform: full-size-kana; }
:is(h1, h2, h3, h4) rt { text-transform: none; /* unset for large text*/ }

これは小さい文字サイズでそのような字母を見やすくする一方で、 変換はテキストを歪めることに注意すること。 読者は、ラテン語の碑文で “U” がすべて “V” のように見えるものを読むのと同じように、 適切な箇所で小書き仮名を 心の中で置き換える必要がある。

たとえば、次のソースに text-transform: full-size-kana が適用された場合、 注釈は正しい読みと意味である annotated “十” の「じゅう」(jū、「ten」を意味する)ではなく、 「じゆう」(jiyū、「liberty」を意味する)と読まれることになる。

<ruby><rt>じゅう</ruby>

2.1.1. マッピング規則

capitalize について、 何が「単語」を構成するかは UA 依存である。 [UAX29] は そのような単語境界を決定するために推奨される (ただし要求されない)。 フロー外ボックスおよびインラインボックス 境界は、 text-transform の単語境界を導入してはならず、 そのような単語境界を決定する際には無視されなければならない。

注記: 著者は capitalize が (英語で冠詞を飛ばすなどの) 言語固有のタイトルケース慣習に従うことに依存できない。

UA は、The Unicode StandardDefault Case Algorithms 節で 定義されるように、 条件付き大文字・小文字規則を含む Unicode 文字の完全なケースマッピングを用いなければならない。 [UNICODE] その要素の 内容 言語が、 文書 言語の規則に従って 既知である場合(かつその場合に限り)、 適切な言語固有の規則も適用されなければならない。 これらには少なくとも、 Unicode の SpecialCasing.txt にある言語固有の規則が含まれるが、これに限定されない。

たとえば、トルコ語には二つの “i” がある。 点付きの “İ” と “i”、そして点なしの “I” と “ı” である。 したがって、“I” と “i” の通常のケースマッピングは、 英語には存在しない、それぞれの点なし/点付きの対応物への 別のマッピング集合に置き換えられる。 このマッピングは、 内容言語が 現代のラテン文字ベースの 表記体系で書かれたトルコ語 (またはトルコ語の大文字・小文字規則を用いる別のテュルク語)である場合にのみ有効にならなければならない。 他の言語では、 “I” と “i” の通常のマッピングが要求される。 この規則はそのため Unicode の SpecialCasing.txt ファイルで条件付きとして定義されている。

全角 および 半角形式の定義は、 Unicode Standard Annex #11: East Asian Widthで確認できる。 [UAX11] 全角形式へのマッピングは、 Unicode Standard Annex #44: Unicode Character DatabaseDecomposition_Mapping<wide> または <narrow> タグを持つ符号位置を取ることによって定義される。 [UAX44] <narrow> タグについては、 マッピングは符号位置から (<narrow> タグを除いた)分解先へ向かう。 <wide> タグについては、 マッピングは (<wide> タグを除いた)分解先から 元の符号位置へ戻る。

小書き仮名から 通常サイズ仮名への マッピングは、付録 G: 小書き仮名のマッピングで定義される。

2.1.2. 操作の順序

複数の値が指定され、 したがって複数の変換を適用する必要がある場合、 それらは次の順序で適用される:

  1. capitalizeuppercase、 および lowercase
  2. full-width
  3. full-size-kana

テキスト変換は、§ 4.1.1 フェーズ I: 折りたたみと変換の後、 ただし § 4.1.2 フェーズ II: トリミングと配置の前に発生する。 これは、full-width保持された 空白内のスペース(U+0020)のみを U+3000 IDEOGRAPHIC SPACE へ変換することを意味する。

注記: 付録 A: テキスト処理の操作順序で定義されるように、 テキストを変換すると行分割およびその他の整形操作に影響する。

3. 空白と折り返し: white-space プロパティ

名前: white-space
値: normal | pre | nowrap | pre-wrap | break-spaces | pre-line
初期値: normal
適用対象: テキスト
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード
正規順序: n/a
アニメーション型: 離散

このプロパティは二つのことを指定する:

値は次の意味を持ち、 空白処理および 行分割規則に従って解釈されなければならない:

normal
この値は、ユーザーエージェントに対し、空白の連続を 単一の文字 (または場合によっては文字なし)へ折りたたむよう指示する。 行は、インライン軸方向のインライン軸オーバーフローを最小化するため、 有効な行分割規則によって決定される、許可された ソフト折り返し 機会折り返すことができる。
pre
この値は、ユーザーエージェントが 空白の連続を 折りたたむことを防ぐ。 改行文字などのセグメント区切りは、 強制 改行として保持される。 行は 強制改行でのみ分割される。 ブロックコンテナ内に収まらない内容はそれをオーバーフローする。
nowrap
normal と同様に、 この値は空白を 折りたたむ。 しかし pre と同様に、 折り返しを許可しない。
pre-wrap
pre と同様に、 この値は空白を 保持する。 しかし normal と同様に、 折り返しを許可する。
break-spaces
挙動は pre-wrap と同一であるが、 次の点を除く:

注記: この値は、 空白によるオーバーフローが決して発生しないことを保証しない。 たとえば、行長が非常に短く、 単一の空白文字でさえ収まらない場合、 オーバーフローは避けられない。

pre-line
normal と同様に、 この値は連続する空白文字を折りたたみ、 折り返しを許可する。 しかし、ソース内のセグメント 区切り強制改行として保持する。

空白処理によって除去または折りたたまれなかった 空白は、 保持された空白と呼ばれる。

注記: 場合によっては、 保持された空白 および その他の空白区切り文字は、 行末にあるときにぶら下がることがある。 これは、それらが内在 サイズに対して測定されるかどうかに影響し得る。

次の参考表は、さまざまな white-space 値の挙動を要約する:

改行 スペースとタブ テキストの折り返し 行末のスペース 行末のその他の空白区切り文字
normal 折りたたむ 折りたたむ 折り返す 除去 ぶら下げ
pre 保持 保持 折り返さない 保持 折り返さない
nowrap 折りたたむ 折りたたむ 折り返さない 除去 ぶら下げ
pre-wrap 保持 保持 折り返す ぶら下げ ぶら下げ
break-spaces 保持 保持 折り返す 折り返す 折り返す
pre-line 保持 折りたたむ 折り返す 除去 ぶら下げ

空白が どのように折りたたまれるかの詳細については、 空白処理規則を参照。

折り返し挙動の詳細については、 行分割を参照。

4. 空白処理 & 制御文字

文書のソーステキストには、最終的なレンダリングには関係しない整形が含まれることがよくある: たとえば、 編集を容易にするためにソースをセグメント (行)に分割したり、 ソースコードをインデントするために 空白文字タブスペースなど)を 追加したりすることである。 CSS の空白処理により、著者はそのような整形の解釈、 すなわち文書をレンダリングするときに保持するか折りたたんでなくすかを 制御できる。 CSS における空白処理 (white-space プロパティで制御される)は、 空白文字をレンダリングのためにのみ解釈する。 基礎となる文書データには影響しない。

注記: 文書言語によっては、 セグメントは特定の改行シーケンス (改行文字や CRLF の組など)で区切られる場合もあれば、 SGML の RECORD-START および RECORD-END トークンなど、 他の仕組みで区切られる場合もある。

CSS 処理では、 文書言語によって定義される各 “segment break” または “newline sequence”—​または何も定義されていない場合は、 テキスト内の各改行文字 (U+000A)—​が セグメント区切りとして扱われ、 その後、white-space プロパティで指定されるとおり、レンダリングのために解釈される。

HTML の場合、 改行は DOM での表現のために 改行文字(U+000A)へ正規化されるため、 HTML 文書が DOM ツリーとして表現されるとき、 各改行文字(U+000A)は セグメント区切りとして扱われる。 [HTML] [DOM]

注記: 最も一般的な CSS 実装では、 HTML は直接スタイル付けされない。 代わりに、HTML は DOM ツリーへ処理され、 その後スタイル付けされる。 HTML とは異なり、 DOM は復帰文字(U+000D)に特別な意味を与えないため、 それらはセグメント 区切りとして扱われない。 HTML パース以外の手段によって復帰文字(U+000D)が DOM に挿入された場合、 それらは以下で定義されるように扱われる。

注記: 文書パーサーは セグメント 区切りを正規化するだけでなく、 他の空白文字を折りたたんだり、 マークアップ規則に従って空白を処理したりすることもある。 CSS 処理はパース段階のに発生するため、 スタイリングのためにこれらの文字を復元することはできない。 したがって、以下で指定される挙動の一部は これらの制限の影響を受ける可能性があり、 ユーザーエージェント依存となる場合がある。

注記: 折りたたみ可能な空白のみで構成される匿名ブロックは、 レンダリングツリーから除去される。 したがって、ブロックレベル要素の周囲にあるそのような 空白は 折りたたまれてなくなる。 CSS 2 § 9.2.2.1 Anonymous inline boxesを参照。 [CSS2]

制御文字(Unicode カテゴリ Cc)—​タブ(U+0009)、 改行文字(U+000A)、 復帰文字(U+000D)、 およびセグメント 区切りを形成するシーケンスを除く—​は、 可視グリフとしてレンダリングされなければならない。 フォント内で見つかったグリフが可視でない場合、UA はそれを合成しなければならず、 それ以外の点では、Other Symbols(So一般カテゴリ および Common スクリプトの 他の文字と同様に扱われなければならない。 UA は、制御文字専用にフォントが提供するグリフを使用してもよく、 Control Pictures ブロック内の対応する記号に提供されたグリフを代用してもよく、 その符号位置値の視覚的表現を生成してもよく、 または適切な可視グリフを提供するために他の方法を用いてもよい。 Unicode により要求されるとおり、 サポートされていない Default_ignorable 文字は テキストレンダリングにおいて無視されなければならない。 [UNICODE]

復帰文字(U+000D)は、あらゆる点でスペース(U+0020)と同一に扱われる。

注記: HTML 文書では、 ソースコード内に存在する復帰文字は パース段階で改行文字へ変換される (HTML § 13.2.3.5 Preprocessing the input stream および normalize newlines の定義(Infra)を参照) ため、CSS には U+000D CARRIAGE RETURN として現れない。 [HTML] [INFRA]) ただし、その文字はエスケープシーケンス (&#x0d;)を用いて符号化された場合には 保持され、上記の規則を観察できる。

4.1. 空白処理規則

別途指定される場合を除き、 CSS の空白処理は 文書空白文字のみに影響する: スペース(U+0020)、タブ(U+0009)、および セグメント区切りである。

注記: 文書空白 (文書内容の一部)と見なされる文字集合と、 構文上の空白 (CSS 構文の一部)と見なされる文字集合は、 必ずしも同一ではない。 ただし、どちらにもスペース(U+0020)、タブ(U+0009)、改行文字(U+000A)が含まれるため、 ほとんどの著者は違いに気付かない。

Unicode は、スペース(U+0020) およびノーブレークスペース(U+00A0)以外にも、 追加の空白区切り文字を多数定義している。 [UNICODE] この仕様では、 Unicode 一般カテゴリ Zs に属するすべての文字のうち、 スペース(U+0020) およびノーブレークスペース(U+00A0)を除くものを総称して その他の空白 区切り文字と呼ぶ。

4.1.1. フェーズ I: 折りたたみと変換

インライン整形コンテキスト内の各インライン (匿名インラインを含む。 CSS 2 § 9.2.2.1 Anonymous inline boxes [CSS2]を参照) について、 空白文字は、 行 分割および双方向 並べ替えに先立って、 双方向 整形文字Bidi_Control プロパティを持つ文字 [UAX9])を、 そこに存在しないかのように無視しながら、次のように処理される:

次の例は、 空白の折りたたみと双方向性の相互作用を示す。 次のマークアップ断片を考える。特にスペース (強調および識別のために背景と境界を変えている)に注目する:
<ltr>A <rtl> B </rtl> C</ltr>

ここで、<ltr> 要素は左から右への埋め込みを表し、 <rtl> 要素は右から左への埋め込みを表す。 white-space プロパティが normal に設定されている場合、 空白処理モデルにより次の結果になる:

これにより二つのスペースが残る。 一つは左から右への埋め込みレベルにおける A の後、 もう一つは右から左への埋め込みレベルにおける B の後である。 その後、テキストは Unicode 双方向アルゴリズムに従って並べ替えられ、 最終結果は次のようになる:

A  BC

A と B の間には二つのスペースがあり、 B と C の間には何もないことに注意すること。 これは、スペースを開始タグおよび終了タグの直内側ではなく 要素の外側に置くこと、 そして実用的な範囲で 明示的な埋め込みレベルではなく暗黙の双方向性に依存することにより避けるのが最善である。

4.1.2. フェーズ II: トリミングと配置

次に、ブロック全体がレンダリングされる。 インラインは、 双方向並べ替えを考慮し、 white-space プロパティで指定される折り返しを 用いて配置される。 各行が配置されるとき、

  1. 行頭にある折りたたみ可能なスペースの連続は 除去される。
  2. タブサイズがゼロの場合、 保持された タブはレンダリングされない。 そうでない場合、各保持されたタブは、 次のグリフの開始辺が次のタブ位置に揃うような 水平方向のシフトとしてレンダリングされる。 この距離が 0.5ch 未満の場合、 代わりに後続のタブ位置が使用される。 タブ 位置は、 保持されたタブの 最も近いブロックコンテナ祖先の開始内容辺から、 タブサイズの倍数となる点に現れる。 タブサイズtab-size プロパティによって与えられる。

    注記: タブ(U+0009)が双方向処理とどのように相互作用するかについては、Unicode の 規則を参照。 [UAX9]

  3. 行末にある折りたたみ可能なスペースの連続は 除去され、 さらに、その white-space プロパティが normalnowrap、または pre-line である 末尾の U+1680   OGHAM SPACE MARK も除去される。

    注記: Unicode Bidirectional Algorithm 規則 L1 により、 双方向並べ替え前に 行末に位置する折りたたみ可能なスペースの連続は、 並べ替え後も行末に位置する。 [UAX9] [CSS-WRITING-MODES-4]

  4. 双方向並べ替え [CSS-WRITING-MODES-4]後に) 行末に、 空白その他の空白 区切り文字、 および/または保持されたタブ の連続が残っている場合:
    • white-spacenormalnowrap、 または pre-line に設定されている場合、 UA はこの連続を(無条件に)ぶら下げなければならない。
    • white-spacepre-wrap に設定されている場合、 UA は、 その連続の後に強制改行が続く場合を除き、 この連続を(無条件に)ぶら下げなければならない。 強制改行が続く場合は、代わりにその連続を条件付きでぶら下げなければならない。 また、そうしなければオーバーフローするものについて、 その文字送り幅を視覚的に折りたたんでもよい。

      注記: 空白を折りたたむのではなく ぶら下げることで、 ユーザーはテキストを選択または編集するときにそのスペースを見ることができる。

    • white-spacebreak-spaces に設定されている場合、 スペースタブ、およびその他の空白 区切り文字は、 他の可視文字と同じように扱われる: それらはぶら下がることも、 送り幅を折りたたまれることもない。

      注記: したがって、そのような文字は空間を占め、 利用可能な空間と適用される行分割制御に応じて、 オーバーフローするか、行の折り返しを引き起こす。

この例は、 強制改行を伴う行末の空白を 条件付きでぶら下げることが、 行頭との対称性を提供することを示している。 スペースを視覚化しやすくするため、下線を追加している。
p {
  white-space: pre-wrap;
  width: 5ch;
  border: solid 1px;
  font-family: monospace;
  text-align: center;
}
<p> 0 </p>

上記のサンプルは次のようにレンダリングされる:

0

最後のスペースは強制改行の前にあり、 かつオーバーフローしないため、 ぶら下がらず、 中央揃えは期待どおりに機能する。

この例は、 強制改行のない行末でぶら下がる スペースと、 強制改行のある行末でそれらを条件付きで ぶら下げることの違いを示す。 スペースを視覚化しやすくするため、下線を追加している。
p {
  white-space: pre-wrap;
  width: 3ch;
  border: solid 1px;
  font-family: monospace;
}
<p> 0 0 0 0 </p>

上記のサンプルは次のようにレンダリングされる:

0
0 0
0

p { text-align: right; } が追加された場合、 結果は次のようになる:

0
0 0
0

強制改行のない行末にある保持されたスペースぶら下がらなければならないため、 テキスト配置中に行の残りの部分を配置するとき、それらは考慮されない。 終端側へ揃える場合、 これはそのような スペースがオーバーフローし、 行の残りの内容が行端にぴったり揃うことを妨げないことを意味する。 一方で、 強制改行を伴う行末の保持されたスペースは 条件付きで ぶら下がる。 この例では最後の行末のスペースはオーバーフローしないため、 それはぶら下がらず、 したがってテキスト配置中に考慮される。

次の例では、 どの行にも行末スペースを収める十分な余地がないため、 それらはすべての行でぶら下がる: 強制改行のない行のものは必ずそうしなければならないため、 また強制改行のある行のものも、 条件付きで ぶら下がりかつオーバーフローするためである。 スペースを視覚化しやすくするため、下線を追加している。
p {
  white-space: pre-wrap;
  width: 3ch;
  border: solid 1px;
  font-family: monospace;
}
<p>0 0 0 0 </p>
0 0
0 0

最後の行は最後の 0 の前で折り返されない。 なぜなら、条件付きでぶら下がる文字は、 行の内容が収まるかどうかを測定するときに考慮されないためである。

4.1.3. セグメント区切り変換規則

white-spaceprepre-wrapbreak-spaces、 または pre-line の場合、 セグメント区切り折りたたみ可能ではなく、 代わりに保持された改行文字(U+000A)へ変換される。

white-space のその他の値では、 セグメント区切り折りたたみ可能であり、 次のように折りたたまれる:

  1. まず、別の折りたたみ可能なセグメント区切りの直後にある 任意の折りたたみ可能なセグメント区切りは 除去される。
  2. その後、残っているセグメント 区切りは、 区切りの前後の文脈に応じて、 スペース(U+0020)へ変換されるか、 または除去される。 この操作の規則はこのレベルでは UA 定義である。

    注記: この文脈が評価される前に、 空白処理規則は セグメント区切りの周囲にある 任意のタブおよびスペースを すでに除去している。

セグメント区切り変換規則 (および一般に空白の折りたたみ)の目的は、 文書ソースコードを扱いやすくするために セグメントに分割されたテキストを “分割解除” することである。 英語や韓国語のように単語区切りを使用する言語では、 行を “分割解除” するには、二つの行をスペースで結合する必要がある。
Here is an English paragraph
that is broken into multiple lines
in the source code so that it can
be more easily read and edited
in a text editor.

Here is an English paragraph that is broken into multiple lines in the source code so that it can be more easily read and edited in a text editor.

英語で改行を取り除くには、 その位置にスペースを維持する必要がある。

中国語のように単語区切りを持たない言語では、 行を “分割解除” するには、二つの行を間にスペースなしで結合する必要がある。

這個段落是那麼長,
在一行寫不行。最好
用三行寫。

這個段落是那麼長,在一行寫不行。最好用三行寫。

中国語で改行を取り除くには、 間にある任意の空白を除去する必要がある。

セグメント区切り変換規則は、 隣接する文脈を用いて、セグメント区切りをスペースへ変換するか、 または完全に取り除くことができる。

注記: 歴史的に、HTML と CSS は セグメント区切りを 無条件にスペースへ変換してきた。 これにより、中国語などの言語で作成されたコンテンツが、 ソース内で行を分割できない状態になっていた。 したがって UA のヒューリスティックは、 そのような言語のサポート改善に努める一方で、 セグメント区切りを破棄する箇所について慎重である必要がある。

4.2. タブ文字のサイズ: tab-size プロパティ

名前: tab-size
値: <number [0,∞]> | <length [0,∞]>
初期値: 8
適用対象: テキスト
継承: yes
パーセンテージ: n/a
算出値: 指定された数値または絶対長
正規順序: n/a
アニメーション型: 算出値の型による

このプロパティは、保持されたタブ文字(U+0009)をレンダリングするために使用される タブ サイズを決定する。 保持されたタブの最も近いブロックコンテナ祖先の スペース文字(U+0020)の送り幅を、 その関連する letter-spacing および word-spacing を含めて、 <number> はその倍数として寸法を表す。 負の値は許可されない。

5. 行分割と単語境界

インラインレベルの内容が行へ配置されるとき、それは行ボックスをまたいで分割される。 そのような分割は 行 分割と呼ばれる。 明示的な行分割制御 (保持された改行文字など)、 またはブロックの開始もしくは終了により行が分割される場合、 それは 強制行 分割である。 内容の折り返し により行が分割される場合 (すなわち、内容を寸法内に収めるために UA が非強制の行分割を作成する場合)、 それは ソフト折り返し 分割である。 インラインレベルの内容を行へ分割する処理は 行分割と呼ばれる。

折り返しは、許可された分割点でのみ実行される。 その点は ソフト折り返し 機会と呼ばれる。 折り返しが有効な場合(white-space を参照)、 UA は、ソフト折り返し機会が存在するなら、 そこで行を折り返すことにより、 行からあふれる内容の量を最小化しなければならない。 有効な ソフト折り返し機会は、 内容言語 および表記体系、 ならびにそれらを制御する CSS プロパティに依存する。

ほとんどの表記体系では、 ハイフネーションがない場合、ソフト折り返し機会は単語境界でのみ発生する。 そのような体系の多く(ラテン文字を用いて書かれる英語など)は、 単語を明示的に区切るためにスペースや句読点を使用し、 ソフト折り返し機会はこれらの文字によって識別できる。

しかし、タイ文字、ラオ文字、クメール文字などのスクリプトは、 単語を区切るためにスペースや句読点を使用しない。 これらのスクリプトではゼロ幅スペース(U+200B)を明示的な単語区切りとして使用できるが、 この慣行は一般的ではない。 その結果、そのようなテキストでソフト折り返し機会を正しく識別するには 語彙資源が必要となる。

その他の表記体系の一部、 とりわけジャワ文字やバリ文字などのブラーフミー系スクリプトでは、 ソフト折り返し 機会は単語境界ではなく正書法上の音節境界に基づく。 正書法上の音節分割は 内容言語 に依存せず、語彙資源も必要としないが、 それでも分割機会を見つけるためにテキストの解析を必要とする。

中国語など(および日本語、イ語、場合によっては韓国語も)では、 各音節は単一の組版字母単位に対応する傾向があり、 したがって行分割慣習では、 特定の文字組み合わせの間を除いてどこでも行を分割できる。 さらに、これらの制限の厳密さのレベルは 組版スタイルによって異なる。

CSS はソフト折り返し機会がどこで発生するかを完全には定義しないが、 一般的な変種を区別するためにいくつかの制御が提供される:

注記: Unicode Standard Annex #14: Unicode Line Breaking Algorithm は、Unicode のすべてのスクリプトに対する行分割の基準挙動を定義し、 これはさらに調整されることが期待される。 [UAX14] 行分割慣習に関する追加情報は、 日本語については Requirements for Japanese Text Layout [JLREQ] および Formatting Rules for Japanese Documents [JIS4051]、 中国語については Requirements for Chinese Text Layout [CLREQ] および General Rules for Punctuation [ZHMARK] にある。 追加の言語に関するさらなる情報を含む、 Internationalization Working GroupLanguage Enablement Indexも参照。 [TYPOGRAPHY] 追加の適切な参考文献に関する助言は大いに歓迎される。

5.1. 字母の分割規則: word-break プロパティ

名前: word-break
値: normal | keep-all | break-all | break-word
初期値: normal
適用対象: テキスト
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード
正規順序: n/a
アニメーション型: 離散

このプロパティは、 字母間のソフト折り返し機会、 すなわちテキスト行を分割することが “通常” で許容される場所を指定する。 具体的には、隣接する組版字母単位の間に ソフト折り返し機会が一般に存在するかどうかを制御し、 この目的(のみ)のために、 NUALAI、 または ID Unicode 行分割クラスに属する、字母でない 組版文字 単位組版字母単位として扱う。 [UAX14] これは、空白 (およびその他の空白区切り文字)によって作成される ソフト折り返し機会 および句読点の周囲のものを支配する規則には影響しない。 (句読点および小書き仮名に影響する制御については line-break を参照。)

たとえば、 CJK 組版の一部のスタイルでは、 英単語はスペースやハイフネーション位置でのみではなく、 任意の二つの字母の間で分割できる。 これは word-break:break-all によって有効にできる。
英語を含む日本語テキストの一部。
			          単語 'caption' が二行にまたがって 'capt' と 'ion' に分割されている。
日本語に埋め込まれた英語テキストが、 単語内の任意の位置で分割される例。

別の例として、韓国語には二つの行分割スタイルがある: 任意の二つの韓国語音節の間で分割するもの(word-break: normal)、 または英語と同様に主にスペースで分割するもの(word-break: keep-all)である。

각 줄의 마지막에 한글이 올 때 줄 나눔 기
준을 “글자” 또는 “어절” 단위로 한다.
각 줄의 마지막에 한글이 올 때 줄 나눔
기준을 “글자” 또는 “어절” 단위로 한다.

エチオピア文字にも同様に二つの行分割スタイルがある。 単語 区切りでのみ分割するもの(word-break: normal)、 または単語内の字母間でも分割を許可するもの(word-break: break-all)である。

ተወልዱ፡ኵሉ፡ሰብእ፡ግዑዛን፡ወዕሩያን፡
በማዕረግ፡ወብሕግ።ቦሙ፡ኅሊና፡ወዐቅል፡
ወይትጌበሩ፡አሐዱ፡ምስለ፡አሀዱ፡
በመንፈሰ፡እኍና።
ተወልዱ፡ኵሉ፡ሰብእ፡ግዑዛን፡ወዕሩያን፡በማ
ዕረግ፡ወብሕግ።ቦሙ፡ኅሊና፡ወዐቅል፡ወይትጌ
በሩ፡አሐዱ፡ምስለ፡አሀዱ፡በመንፈሰ፡እኍና።

注記: オーバーフローの場合にのみ追加の分割機会を有効にするには、 overflow-wrap を参照。

値は次の意味を持つ:

normal
単語は、上記で説明した慣用的な規則に従って分割される。 一般に二つの異なる挙動を示す韓国語では、 任意の二つの連続するハングル/漢字の間で分割を許可する。 同様に二つの異なる挙動を示すエチオピア文字では、 そのような単語内の分割は許可されない。
break-all
“単語” 内での分割が許可される: 具体的には、 normal で許可されるソフト折り返し機会に加えて、 任意の組版字母単位 (および NU(“numeric”)、 AL(“alphabetic”)、 または SA(“Southeast Asian”) 行分割クラス [UAX14] に解決される任意の 組版文字単位)は、 行分割の目的で代わりに ID (“ideographic characters”) として扱われる。 ハイフネーションは適用されない。

注記: この値は、 句読点の周囲にソフト折り返し機会が あるかどうかには影響しない。 任意の位置での分割を許可するには、line-break: anywhere を参照。

注記: この選択肢は、 エチオピア文字のもう一つの一般的な挙動を有効にする。 また、テキストが主に CJK 文字で構成され、 短い非 CJK 抜粋のみを含む文脈で、 テキストを各行によりよく分布させたい場合にもよく使用される。

keep-all
“単語” 内での分割は禁止される: 組版字母単位間 (または NUALAI、 または ID Unicode 行分割クラス [UAX14] に属する その他の組版文字単位間) の暗黙のソフト 折り返し機会は抑制される。 すなわち、辞書ベースの分割による機会が存在する場合を除き、 そのような文字の組の間の分割は禁止される (anywhere 以外の line-break 設定に関係なく)。 それ以外では、この選択肢は normal と等価である。 このスタイルでは、CJK 文字列は分割されない。

注記: これは韓国語 (単語間にスペースを用いる) のもう一つの一般的な挙動であり、 CJK 断片が、分離のためにスペースを用いる別の言語の中に 混在する混用スクリプトテキストにも有用である。

特定のカテゴリの字母と同じ方法で行分割される記号は、 それらの字母と同じように影響を受ける。

これは混用スクリプトのサンプルテキストである:
这是一些汉字 and some Latin و کمی خط عربی และตัวอย่างการเขียนภาษาไทย በጽሑፍ፡ማራዘሙን፡አንዳንድ፡

分割点は次のように決定される(‘·’ で示す):

word-break: normal
这·是·一·些·汉·字·and·some·Latin·و·کمی·خط·عربی·และ·ตัวอย่าง·การเขียน·ภาษาไทย·በጽሑፍ፡·ማራዘሙን፡·አንዳንድ፡
word-break: break-all
这·是·一·些·汉·字·a·n·d·s·o·m·e·L·a·t·i·n·و·ﮐ·ﻤ·ﻰ·ﺧ·ﻁ·ﻋ·ﺮ·ﺑ·ﻰ·แ·ล·ะ·ตั·ว·อ·ย่·า·ง·ก·า·ร·เ·ขี·ย·น·ภ·า·ษ·า·ไ·ท·ย·በ·ጽ·ሑ·ፍ፡·ማ·ራ·ዘ·ሙ·ን፡·አ·ን·ዳ·ን·ድ፡
word-break: keep-all
这是一些汉字·and·some·Latin·و·کمی·خط·عربی·และ·ตัวอย่าง·การเขียน·ภาษาไทย·በጽሑፍ፡·ማራዘሙን፡·አንዳንድ፡

日本語は通常、単語内の音節間での行分割を許可して組版される。 しかし、ときにはこれらの折り返し機会を抑制し、 特定の文節の末尾でのみ折り返しを許可することが好まれる。 これは、見出しや表・図のキャプションなど、 非常に短いテキストで最もよく行われる。

これは、許可された折り返し点を wbr または U+200B ZERO WIDTH SPACE でマークし、 他のものを word-break: keep-all を用いて抑制することで実現できる。

たとえば、次のマークアップは、 word-break プロパティの値に応じて、 下記のいずれかのレンダリングを生成できる:

<h1>窓ぎわの<wbr>トットちゃん</h1>
h1 { word-break: normal } h1 { word-break: keep-all }
期待されるレンダリング
窓ぎわのトットちゃ
ん
窓ぎわの
トットちゃん
使用中のブラウザーでの結果 窓ぎわのトットちゃん 窓ぎわのトットちゃん

従来のコンテンツとの互換性のため、 word-break プロパティは、 非推奨の break-word キーワードもサポートする。 指定された場合、これは 実際の overflow-wrap プロパティの値に関係なく、 word-break: normal および overflow-wrap: anywhere と同じ効果を持つ。

word-break の効果は、内在 サイズを計算するときに考慮される。

5.2. 行分割の厳密さ: line-break プロパティ

名前: line-break
値: auto | loose | normal | strict | anywhere
初期値: auto
適用対象: テキスト
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード
正規順序: n/a
アニメーション型: 離散

このプロパティは、要素内で適用される行分割規則の厳密さを指定する: とりわけ、折り返しが 句読点および記号とどのように相互作用するかを指定する。 値は次の意味を持つ:

auto
UA は使用する行分割制限の集合を決定し、 行の長さに基づいて制限を変えてもよい。 たとえば、短い行には制限の少ない行分割規則の集合を使用する。
loose
最も制限の少ない行分割規則の集合を用いてテキストを分割する。 通常、新聞などの短い行に使用される。
normal
最も一般的な行分割規則の集合を用いてテキストを分割する。
strict
最も厳格な行分割規則の集合を用いてテキストを分割する。
anywhere
すべての組版文字 単位の周囲にソフト折り返し機会がある。 これには、任意の句読文字 または保持された 空白の周囲、 あるいは単語の途中も含まれ、 行分割に対するいかなる禁止も無視する。 これには、GLWJ、または ZWJ 行分割クラスを持つ文字によって導入されるもの、 または word-break プロパティによって命じられるものも含まれる。 [UAX14] 異なる折り返し機会に優先順位を付けてはならない。 ハイフネーションは適用されない。

注記: この値は、端末で通常見られる 行分割規則を発動する。

注記: anywhere は、 保持された空白を 行末から次の行へ折り返すことを、 white-spacebreak-spaces に設定されている場合にのみ許可する。 なぜなら、それ以外の場合は:

保持された空白に効果を及ぼす場合、 white-space: break-spaces では、 連続の最初のスペースの前で分割することを許可する。 これは break-spaces 単独では行わないことである。

CSS は、テキスト折り返し規則において 四つの厳密さのレベルを区別する。 loosenormal、 および strict の各々について有効な厳密な規則集合は UA に委ねられ、 言語の慣習に従うべきである。 ただし、これら三つのキーワードについて、この仕様は次を要求する:

注記: 上に列挙した要件は、 CJK テキストにおいてのみ区別を生み出す。 上記の規則のみに一致し、 追加の規則を持たない実装では、 line-break は、 表記体系が 中国語または 日本語 としてタグ付けされていない限り、 CJK 符号位置にのみ影響する。 将来のレベルでは、 他の表記体系および言語の要件が判明するにつれて、 追加の具体的な規則が加えられる可能性がある。

UA は strict/normal/loose モードの間に追加の区別を加えることができるため、 これらの値は他の表記体系でも差異を示し得る。 たとえば、十分に高度なタイ語処理能力を持つ UA は、 タイ語行分割の異なる厳密さレベルを これらのキーワードに対応付けることを選択できる。 例として、strict モードでは複合語内の分割を許可しない (例: ตัวอย่างการเขียนภาษาไทย を ตัวอย่าง·การเขียน·ภาษาไทย と分割する) 一方で、loose では より多くの分割を許可する (ตัวอย่าง·การ·เขียน·ภาษา·ไทย)。

注記: CSSWG は、仕様の将来版において、 高度な出版要件を満たすために、 行分割に対するより細かな制御が必要になる可能性を認識している。

注記: ユーザーエージェントは、行分割実装の出発点として [UAX14] を参照できるが、 既存の実装との最大限の相互運用性のためには、 次の逸脱が望ましい場合がある:

5.3. ハイフネーション: hyphens プロパティ

ハイフネーションとは、 通常は分割が許可されない箇所で単語を制御された形で分割し、 段落のレイアウトを改善することである。 通常は音節境界または形態素境界で単語を分割し、 多くの場合、分割を視覚的に示す (通常はハイフン U+2010 を挿入する)。 場合によっては、ハイフネーションは単語の綴りを変更することもある。 いずれにせよ、ハイフネーションはレンダリング効果にすぎない: 基礎となる文書内容、 またはテキスト選択や検索に影響してはならない。

ハイフネーション慣行は言語によって異なり、 行分割の前にハイフンを挿入するだけでなく、 分割後にハイフンを挿入すること(またはその両方)、 U+2010 とは異なる文字を挿入すること、 または単語の綴りを変更することを含み得る。
言語 分割なし
英語 Unbroken Un‐ broken
オランダ語 cafeetje café‐ tje
ハンガリー語 Összeg Ösz‐ szeg
中国語(普通話) tú’àn tú‐ àn
àizēng‐fēnmíng àizēng‐ ‐fēnmíng
ウイグル語  [isolated DAL + isolated ALEF + initial MEEM +
					          medial YEH  + final DAL +
					          isolated ALEF MAKSURA] [isolated DAL + isolated ALEF + initial MEEM +
					          final YEH + hyphen ] [ isolated DAL + isolated ALEF MAKSURA]
クリー語 [ᑲᓯᑕᓂᐘᓂᓂᐠ]
					          (CANADIAN SYLLABICS KA +
					          CANADIAN SYLLABICS SI +
					          CANADIAN SYLLABICS TA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS WEST-CREE WA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS FINAL GRAVE) [ᑲᓯᑕᓂ᐀]
					          (CANADIAN SYLLABICS KA +
					          CANADIAN SYLLABICS SI +
					          CANADIAN SYLLABICS TA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS HYPHEN) [ᐘᓂᓂᐠ]
					          (CANADIAN SYLLABICS WEST-CREE WA +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS NI +
					          CANADIAN SYLLABICS FINAL GRAVE)

ハイフネーションは、 行が有効なハイフネーション機会で分割されるときに発生する。 これは、ハイフネーションが許可される単語内に存在する ソフト折り返し機会の一種である。 CSS では、ハイフネーション機会hyphens プロパティで制御される。 CSS Text Level 3 は、ハイフネーションの正確な規則を定義しない。 ただし UA は、分割点の選択を最適化し、 言語に適したハイフネーション位置を選択することを強く推奨される。

注記: U+002D - HYPHEN-MINUS 文字 または U+2010 ‐ HYPHEN 文字によって導入される ソフト折り返し機会は、 ハイフネーション機会ではない。 なぜなら、折り返し時に分割を示す視覚的表示が作成されるわけではないためである: これらの文字は、その位置で行が折り返されるかどうかに関係なく可視である。

ハイフネーション機会は、 min-content 内在サイズを計算するときに考慮される

注記: これにより、表は包含ブロックを オーバーフローする代わりに内容をハイフネーションできる。 これはドイツ語のような長い単語を持つ言語では特に重要である。

名前: hyphens
値: none | manual | auto
初期値: manual
適用対象: テキスト
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード
正規順序: n/a
アニメーション型: 離散

このプロパティは、ハイフネーションが テキスト行内により多くのソフト折り返し 機会を作成することを許可するかどうかを制御する。 値は次の意味を持つ:

none
単語はハイフネーションされない。 単語内の文字がハイフネーション機会を明示的に定義している場合であっても同様である。

注記: これは、 U+002D - HYPHEN-MINUS または U+2010 ‐ HYPHEN のような常に可視の文字によって導入される 既存のソフト 折り返し機会を抑制しない。

manual
単語内にハイフネーション機会を明示的に示す文字がある場合にのみ、 単語はハイフネーションされる。 UA は、適切な言語固有のハイフネーション文字を使用しなければならず、 同じ位置での自動ハイフネーションの場合と同様に、 適切な綴り変更を適用すべきである。
Unicode では、U+00AD は条件付きの "soft hyphen" であり、 U+2010 は無条件のハイフンである。 Unicode Standard Annex #14 は、 Unicode 行分割におけるソフトハイフンの役割を説明している。 [UAX14] HTML では、 &shy; はソフトハイフン文字を表し、 これはハイフネーション機会を示唆する。
ex&shy;ample
auto
単語は、条件付きハイフンによって明示的に示されるものに加えて、 言語に適したハイフネーション資源によって自動的に決定される ハイフネーション機会で分割されてもよい。 単語が条件付きハイフン (&shy; または U+00AD SOFT HYPHEN)を含む場合、 その単語内の他の場所にある自動的な ハイフネーション機会は、 条件付きハイフンを優先して無視されなければならない。 ただし、そのような機会で分割してもなお、 その単語の一部が一行に収まらないほど長い場合は、 自動的なハイフネーション機会を使用してもよい。

正しい自動ハイフネーションには、 分割されるテキストの言語に適したハイフネーション資源が必要である。 したがって UA は、 内容 言語が既知であり、 かつ適切なハイフネーション資源を持つテキストに対してのみ、 自動的にハイフネーションしなければならない。

著者は、正しい自動ハイフネーションを得るために、 コンテンツの言語を (たとえば HTML の lang 属性 または XML の xml:lang 属性を用いて) 正しくタグ付けすべきである。

UA は、特定の単語を自動ハイフネーションから除外するために、 言語に合わせたヒューリスティックを使用してもよい。 たとえば UA は、特定の大文字化および句読点パターンに一致する単語を除外することで、 固有名詞でのハイフネーションを避けようとしてもよい。 そのようなヒューリスティックはこの仕様では定義されない。 (そのようなヒューリスティックは言語によって異なる必要があることに注意すること: たとえば英語とドイツ語では大文字化の慣習が大きく異なる。)

hyphens プロパティの目的において、 何が “単語” を構成するかは UA 依存である。 ただし、単語境界を決定する際には、 インライン要素境界 およびフロー外要素を 無視しなければならない。

条件付きハイフン文字 (U+00AD SOFT HYPHEN など)によって作成された ハイフネーション機会での ハイフネーションによって表示される任意のグリフは、 その文字によって表され、 それに適用されたプロパティに従ってスタイル付けされる。

注記: アラビア文字などの整形スクリプトが ハイフネーションにより単語内で分割を許可される場合、 文字は依然として、その単語が分割されていないかのように整形される。

たとえば、ウイグル語の単語 “داميدى” が ハイフネーションされた場合、それは [isolated DAL + isolated ALEF + initial MEEM +
		          medial YEH + hyphen + line-break + final DAL +
		          isolated ALEF MAKSURA] のように表示され、 [isolated DAL + isolated ALEF + initial MEEM +
		          final YEH + hyphen + line-break + isolated DAL +
		          isolated ALEF MAKSURA] のようには表示されない。

5.4. オーバーフロー時の折り返し: overflow-wrapword-wrap)プロパティ

名前: overflow-wrap
値: normal | break-word | anywhere
初期値: normal
適用対象: テキスト
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード
正規順序: n/a
アニメーション型: 離散

このプロパティは、そうしなければ分割不能な文字列が 行ボックス内に収まらないほど長い場合に、 オーバーフローを防ぐため、 UA が行内の通常は許可されない点で分割してもよいかどうかを指定する。 これは、 white-space折り返しを許可する場合にのみ効果を持つ。 可能な値:

normal
行は許可された分割点でのみ分割できる。 ただし、行内に他に許容できる分割点がない場合、 word-break: keep-all によって導入された制限は、 word-break: normal に合わせて緩和されてもよい。
anywhere
そうしなければ分割不能な文字列は、 行内に他に許容できる分割点がない場合、 任意の点で分割されてもよい。 整形文字は、単語が分割されていないかのように依然として整形され、 書記素クラスタは一つの単位としてまとまっていなければならない。 分割点にはハイフネーション文字は挿入されない。 anywhere によって導入されるソフト折り返し 機会は、 min-content 内在サイズを計算するときに考慮される
break-word
anywhere と同様であるが、 break-word によって導入されるソフト折り返し 機会は、 min-content 内在サイズを計算するときに考慮されない

従来の理由により、UA は word-wrapoverflow-wrap プロパティの 旧来名エイリアスとして扱わなければならない。

5.5. 行分割の詳細

行分割を決定するとき:

6. 配置と均等割り付け

配置と均等割り付けは、 インライン内容が行ボックス内でどのように分配されるかを制御する。

6.1. テキスト配置: text-align 一括指定

名前: text-align
値: start | end | left | right | center | justify | match-parent | justify-all
初期値: start
適用対象: ブロックコンテナ
継承: yes
パーセンテージ: 個別プロパティを参照
算出値: 個別プロパティを参照
アニメーション型: 離散
正規順序: n/a

この一括指定プロパティは、 text-align-all および text-align-last プロパティを設定し、 内容が行ボックスを完全には満たさない場合に、 ブロックのインラインレベル内容を インライン軸に沿ってどのように配置するかを記述する。 justify-all または match-parent 以外の値は、 text-align-all に割り当てられ、 text-align-lastauto にリセットする。

値は次の意味を持つ:

start
インラインレベル内容は、 行ボックスの始端辺に揃えられる。
end
インラインレベル内容は、 行ボックスの終端辺に揃えられる。
left
インラインレベル内容は、 行ボックスのline-left 辺に揃えられる。 (縦書きモードでは、 writing-mode に応じて、 これは物理的な上または下のいずれかになり得る。) [CSS-WRITING-MODES-4]
right
インラインレベル内容は、 行ボックスのline-right 辺に揃えられる。 (縦書きモードでは、 writing-mode に応じて、 これは物理的な上または下のいずれかになり得る。) [CSS-WRITING-MODES-4]
center
インラインレベル内容は行ボックス内で中央揃えされる。
justify
テキストは、 行ボックスを正確に満たすために、 text-justify プロパティで指定される方法に従って 均等割り付けされる。 text-align-last によって別途指定されない限り、 強制行分割の前の最後の行は start 揃えされる。
justify-all
text-align-alltext-align-last の両方を justify に設定し、 最後の行も均等割り付けするよう強制する。
match-parent
この値は inherit と同じように振る舞う (親の算出値へ算出される)が、 start または end継承値が、 親の direction 値に対して解釈され、 left または right のいずれかの 算出値になる点を除く。 ルート要素に指定された場合は start に算出される。

text-align 一括指定に指定された場合、 text-align-alltext-align-last の両方を match-parent に設定する。

テキストのブロックは 行ボックスの積み重ねである。 このプロパティは、各行ボックス内のインラインレベルボックスが 行ボックスの始端側および終端側に対して どのように揃えられるかを指定する。 配置は ビューポート または包含ブロックに対するものではない。

justify の場合、 UA は任意のインラインボックスを、 そのテキストを調整することによって 伸縮してもよい。 (text-justify を参照。) ある要素の空白折りたたみ可能でない場合、 UA は均等割り付けの目的でそのテキストを調整することを要求されず、 代わりに、そのテキストには 均等割り付け機会がないものとして扱ってもよい。 UA がテキストを調整することを選択する場合、 タブ位置空白処理規則で要求されるとおりに 引き続き揃うことを保証しなければならない。

(均等割り付けがある場合はその後に) 行ボックスのインライン内容がその中に収まらないほど長い場合、 その内容は始端揃えされる: 収まらない内容は、 行ボックスの終端辺からオーバーフローする。

行ボックスの 始端および終端辺を どのように決定するかの詳細については、§ 8.3 双方向性と行ボックスを参照。

6.2. 既定のテキスト配置: text-align-all プロパティ

名前: text-align-all
値: start | end | left | right | center | justify | match-parent
初期値: start
適用対象: ブロックコンテナ
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード。ただし、match-parent は上で定義されたように算出される
正規順序: n/a
アニメーション型: 離散

text-align 一括指定プロパティのこの個別指定は、 text-align-last の非 auto 値によって上書きされる最後の行を除き、 ブロックコンテナ内のインライン内容のすべての行の インライン配置を指定する。 値の完全な説明については text-align を参照。

著者は、このプロパティではなく text-align 一括指定を使用すべきである。

6.3. 最後の行の配置: text-align-last プロパティ

名前: text-align-last
値: auto | start | end | left | right | center | justify | match-parent
初期値: auto
適用対象: ブロックコンテナ
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード。ただし、match-parent は上で定義されたように算出される
正規順序: n/a
アニメーション型: 離散

このプロパティは、ブロックの最後の行、 または強制行 分割の直前の行が どのように配置されるかを記述する。

auto が指定された場合、 影響を受ける行上の内容は text-align-all に従って配置される。 ただし、text-align-alljustify に設定されている場合は、 start 揃えされる。 その他すべての値は、text-align について説明したとおりに解釈される。

6.4. 均等割り付け方式: text-justify プロパティ

名前: text-justify
値: auto | none | inter-word | inter-character
初期値: auto
適用対象: テキスト
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード(ただし、distribute 旧来値を除く)
正規順序: n/a
アニメーション型: 離散

このプロパティは、 行の配置が justify に設定されているときに使用される均等割り付け方式を選択する (text-align を参照)。 このプロパティはテキストに適用されるが、 ブロックコンテナから、それらのインラインレベル内容を含む ルートインラインボックスへ継承される。 次の値を取る:

auto
UA は、性能と十分な表示品質とのバランスに基づいて、 従うべき均等割り付けアルゴリズムを決定する。 均等割り付け規則は 表記体系 および言語によって異なるため、 UA は可能な場合、 テキストに適した均等割り付けアルゴリズムを使用すべきである。
たとえば、 UA は既定で、 すべての表記体系に対する単純な普遍的妥協である均等割り付け方式を使用できる。 たとえば主に単語区切り および CJK 組版字母単位間を拡張し、 それに加えて副次的に 東南アジアの組版字母単位間を拡張するような方式である。 その後、段落の内容言語が既知である場合には、 より言語に合わせた均等割り付け挙動を選択できる。 たとえば、日本語については Requirements for Japanese Text Layout [JLREQ] に従い、 アラビア語では筆記体伸長を使用し、 ドイツ語では inter-word を使用する、 などである。

圧縮形とスワッシュ形の組み合わせにより、
				          二行のカリグラフィ風アラビア語が同じ位置で終わっている。

筆記体的に均等割り付けされたアラビア語テキストの例で、 Tasmeem によってレンダリングされている。 英語と同様に、 アラビア語は単語間の間隔を調整することで均等割り付けできるが、 ほとんどのスタイルでは、 文字形自体をカリグラフィ的に伸長または圧縮することによっても 均等割り付けできる。 この例では、 上のテキストは伸長された(カシーダ)形およびスワッシュ形の使用によって 行を満たすように拡張され、 下の行は ت と م の間の文字に対して 積み重ねられた組み合わせを使用することでわずかに圧縮されている。 伝統的なカリグラフィ技法を用いることで、 組版者は流れと色調を保ちながら行を均等割り付けでき、 非常に高品質な均等割り付け効果を提供できる。 ただし、これは本質的に非常にスクリプト固有の効果である。
余分な空間が、一部はスペースに、一部は CJK およびタイ文字の間に割り当てられている。
text-justify: auto の混用スクリプトテキスト: この解釈では、普遍的妥協の均等割り付け方式を使用し、 スペースだけでなく CJK および東南アジア文字の間も拡張する。 これは実質的に、単語区切りおよび/または CJK 文字を持つ行には inter-word + inter-ideograph spacing を使用し、 それらを持たない行、 またはスペースが過度に伸びる行には inter-cluster 挙動へフォールバックする。
none
均等割り付けは無効化される: テキスト内には均等割り付け機会が存在しない。
余分な空間は挿入されていない。
text-justify: none の混用スクリプトテキスト

注記: この値は、可読性の向上またはアクセシビリティ目的で、 ユーザースタイルシートに使用することを意図している。

inter-word
均等割り付けは単語区切りにおける間隔のみを調整する (実質的には、その行で使用される word-spacing を変化させる)。 この挙動は、英語や韓国語のように、 スペースを使って単語を区切る言語に典型的である。
余分な空間が主にスペースへ均等に分配されている。
text-justify: inter-word の混用スクリプトテキスト
inter-character
均等割り付けは、 隣接する組版文字単位の各組の間の 間隔を調整する (実質的には、その行で使用される letter-spacing を変化させる)。 この値は、日本語などの東アジアの体系で使用されることがある。
余分な空間が、
				          すべての表記体系のスペースと文字の間の点に均等に分配されている。
text-justify: inter-character の混用スクリプトテキスト

旧来の理由により、 UA は代替キーワード distribute もサポートしなければならず、 これは inter-character へ算出されなければならない。 したがって、これは完全に同じ意味と挙動を持つ。 UA はこれを旧来値エイリアスとして扱ってもよい。

最適な均等割り付けは言語に依存するため、 著者は最良の結果を得るために、コンテンツへ正しく言語タグを付けるべきである。

注記: このレベルの CSS における指針は、 完全な均等割り付けアルゴリズムを記述するものではない。 それらは、完全なアルゴリズムが満たすべき 最小限の要件群にすぎない。 要件集合を限定することで、 UA は品質、速度、複雑さについての必要性と望ましいバランスを満たす 均等割り付けアルゴリズムを選択する余地を得る。

6.4.1. テキストの拡張と圧縮

テキストを均等割り付けするとき、 ユーザーエージェントは、 行の内容の端とその行ボックスの辺との間に残っている空間を取り、 その内容全体にその空間を分配して、 内容が行ボックスを正確に満たすようにする。 ユーザーエージェントは代わりに負の空間を分配し、 通常の間隔条件では収まらないより多くの内容を 行に入れてもよい。

均等割り付け機会とは、 均等割り付けアルゴリズムがテキスト内の間隔を変更できる点である。 均等割り付け機会は、 (単語区切りなどの) 単一の組版文字 単位によって提供されることも、 二つの組版文字 単位の並置によって提供されることもある。 ソフト折り返し機会の制御と同様に、 ある組版文字単位均等割り付け機会を提供するかどうかは、 その親の text-justify 値によって制御される。 同様に、 二つの連続する組版文字単位の間に 均等割り付け機会が存在するかどうかは、 それらの最も近い共通祖先の text-justify 値によって決定される。

均等割り付けによって分配される空間は、 letter-spacing または word-spacing プロパティによって定義される間隔に 追加されるものである。 そのような追加の空間が、 単語区切り均等割り付け機会へ分配される場合、 それは word-spacing と同じ規則の下で適用される。 同様に、二つの組版文字単位間の 均等割り付け機会へ空間が分配される場合、 letter-spacing と同じ規則の下で適用されるべきである。

均等割り付けアルゴリズムは、 均等割り付け機会を 異なる優先度レベルに分けてもよい。 あるレベル内のすべての均等割り付け機会は、 その機会をどの組版文字単位が作成したかに関係なく、 同じ優先度で拡張または圧縮される。 たとえば、 二つの漢字の間の均等割り付け機会と、 二つのラテン文字の間の均等割り付け機会が 同じレベルにあると定義されている場合 (inter-character 均等割り付けスタイルではそうである)、 それらは異なる組版文字 単位に由来するという理由で 異なる扱いを受けることはない。 このレベルでは、 他の要因 (フォントサイズ、letter-spacing、グリフ形状、行内の位置など)が、 行内の均等割り付け 機会への空間の分配に 影響を与えるかどうか、またはどのように影響するかは定義されない。

UA は、任意の方式の下でテキストの均等割り付けを助けるために、 任意合字を有効化または分割したり、 代替グリフやグリフ圧縮などの 他のフォント機能を使用したりしてもよい。 この挙動はこのレベルの CSS によって制御されない。 ただし、 UA は、複雑なスクリプトを正しく整形するために必要な必須合字を 分割してはならず、 または必要な機能を無効化してはならない。

ある行内に均等割り付け機会が存在し、 かつテキスト配置がその行に完全な均等割り付け (justify) を指定している場合、 それは均等割り付けされなければならない。

6.4.2. 記号と句読点の扱い

均等割り付け機会を決定するとき、 Unicode Symbols(S*)および Punctuation(P*)クラスの 組版文字単位は、 一般に同じスクリプトの組版字母単位と同じように扱われる (または、その文字の script プロパティが Common である場合は、 支配的スクリプトの組版字母単位として扱われる)。

しかし、組版上の伝統により、 記号および句読点の均等割り付けを制御する追加規則が存在することがある。 したがって、UA は、 記号および句読点を含む均等割り付け機会を扱うために、 特定の文字を再割り当てしたり、 追加の優先順位レベルを導入したりしてもよい。

たとえば、伝統的には、連続する U+2014 — EM DASH、 U+2015 ― HORIZONTAL BAR、 U+2026 … HORIZONTAL ELLIPSIS、 または U+2025 ‥ TWO DOT LEADER 文字の間には均等割り付け機会がない [JLREQ]。 したがって UA は、これらの文字を “never” 優先順位レベルに割り当てることがある。 別の例として、特定の全角句読文字 (U+301A 〚 LEFT WHITE SQUARE BRACKET など)は、 日本語では内部に均等割り付け機会を含むと見なされる。 そのため UA は、これらの文字を 表意文字間の機会よりも高い優先順位レベルに割り当てることがある。

6.4.3. 拡張不能なテキスト

行のインライン内容を行ボックスの全幅まで伸ばすことができない場合、 それらは text-align-last プロパティで指定されるとおりに 配置されなければならない。 (text-align-lastjustify である場合、 それらは center の場合と同じように配置されなければならない。)

6.4.4. 筆記体スクリプト

均等割り付けは、アラビア語などの 筆記体スクリプトの 結合された組版字母単位間に 隙間を導入してはならない。 可能であれば、 UA は、そのような組版字母単位の連続内の 均等割り付け機会へ分配された空間を、 その連続に対する何らかの筆記体伸長へ変換してもよい。 それ以外の場合、UA は、 筆記体スクリプトにおける 任意の一組の組版字母単位の間には (それらが結合するかどうかに関係なく) 均等割り付け 機会が存在しないと仮定しなければならない。

以下は、許容できない均等割り付けの例である:
アラビア文字のすべての組の間に隙間を追加する
結合されていないアラビア文字のすべての組の間に隙間を追加する

一部のフォント設計では、均等割り付けのために tatweel 文字を使用できる。 tatweel ベースの均等割り付けを行う UA は、 その使用規則を適切に扱わなければならない。 tatweel 文字の正しい挿入は、 関係する文字の組み合わせ、 単語内の位置、 および行内での単語の位置を含む文脈に依存することに注意すること。

6.4.5. auto 均等割り付けの最小要件

auto 均等割り付けについて、 この仕様は、 すべての均等割り付け機会が何であるか、 それらがどのように優先順位付けされるか、 または複数レベルの均等割り付け 機会がいつどのように相互作用するかを 定義しない。 ただし、次を要求する:

テキスト均等割り付けに関する追加情報は、 表記体系および言語ごとに索引付けされ、 W3C Internationalization Working Group によって保守されている “Approaches to Full Justification” で確認できる(またはそこへ提出できる)。 [JUSTIFY]

7. 間隔

CSS は、 word-spacing および letter-spacing プロパティによって テキスト間隔を制御できる。 これらはそれぞれ、 単語区切りの周囲、 または組版文字単位の間に 追加の空間を指定する。

7.1. 単語間隔: word-spacing プロパティ

名前: word-spacing
値: normal | <length>
初期値: normal
適用対象: テキスト
継承: yes
パーセンテージ: N/A
算出値: 絶対長
正規順序: n/a
アニメーション型: 算出値の型による

このプロパティは、 “単語” 間の追加間隔を指定する。 値は次のように解釈される:

normal
追加の間隔は適用されない。 ゼロに算出される。
<length>
フォントによって定義される固有の単語間隔に 加えて追加の間隔を指定する。

追加の間隔は、 空白処理規則が適用された後に テキスト内に残っている各単語区切りへ適用され、 組版上の伝統によって別途定められない限り、 文字の両側に半分ずつ適用されるべきである。 値は負でもよいが、実装依存の制限が存在する場合がある。

単語区切り文字とは、 主な目的および一般的な用途が単語を区切ることである 組版文字単位である。 Unicode では、これには (網羅的な定義ではないが) スペース(U+0020)、 ノーブレークスペース(U+00A0)、 エチオピア語単語スペース(U+1361)、 エーゲ語単語区切り(U+10100,U+10101)、 ウガリット語単語区切り(U+1039F)、 およびフェニキア語単語区切り(U+1091F)が含まれる。 [UNICODE]

注記: 句読点一般も、 固定幅スペース(U+3000 および U+2000 から U+200A など)も、 単語区切り文字 とは見なされない。 それらはしばしば単語を区切ることがあるものの、 主な目的が単語を区切ることではないためである。

単語区切り 文字が存在しない場合、 または単語を区切る文字がゼロの送り幅を持つ場合 (U+200B ZERO WIDTH SPACE など)、 ユーザーエージェントは単語間に追加の間隔を作成してはならない。

7.2. 字間調整: letter-spacing プロパティ

名前: letter-spacing
値: normal | <length>
初期値: normal
適用対象: インラインボックスおよびテキスト
継承: yes
パーセンテージ: n/a
算出値: 絶対長
正規順序: n/a
アニメーション型: 算出値の型による

このプロパティは、 隣接する組版文字単位間の 追加間隔 (一般に トラッキングと呼ばれる) を指定する。 字間調整は 双方向並べ替えの後に適用され、 カーニング および word-spacing に追加される。 [CSS-WRITING-MODES-4] [CSS-FONTS-3] 有効な均等割り付け規則に応じて、 ユーザーエージェントは テキストを均等割り付けするために、 組版文字単位間の空間を さらに増減してもよい。

値は次の意味を持つ:

normal
追加の間隔は適用されない。ゼロに算出される。
<length>
組版文字単位間の 追加間隔を指定する。 値は負でもよいが、 実装依存の制限が存在する場合がある。

旧来の理由により、 ゼロの算出 letter-spacing は、 解決値getComputedStyle() の戻り値) として normal を生じる。

letter-spacing の目的において、 不可分インライン (画像やインラインブロックなど)の各連続した並びは、 単一の組版文字単位として扱われる。

字間調整は行頭に適用してはならない。 字間調整が行末に適用されるかどうかは、このレベルでは未定義である。

字間調整が行頭または行末に適用されない場合、 テキストは常にブロックの端にぴったり合う。
p { letter-spacing: 1em; }
<p>abc</p>

a b c

a b c

したがって UA は、行の右端または末尾端に字間を追加することは 本当にすべきではない [RFC6919]:

a b c 

二つの組版文字単位の間の字間は、 実質的に、それら二つの組版文字単位を含む 最も内側の要素に “属する”: (双方向並べ替えの後の) 二つの隣接する組版 文字単位間の総字間は、 それら二つの組版文字単位の間の境界を 含む最も内側の要素によって指定され、 その中でレンダリングされる。 ただし、UA は代わりに、 要素境界での字間を、 それを含む要素に関係する letter-spacing 値を用いて、 一方または他方の組版文字単位に付着させてもよい。

注記: この二次的な挙動は、 Web 互換性上の懸念により、このレベルで許可されている。

インラインボックスは、その要素内に完全に含まれる文字間の 字間のみを含むことが期待される。 したがって、要素の右端または末尾端の字間は除外される:
p { letter-spacing: 1em; }
<p>a<span>bb</span>c</p>

a b b c

a b b c

したがって、letter-spacing の与えられた値は、 それが指定された要素内に完全に含まれる 文字間の間隔のみに影響することが期待される:

p    { letter-spacing: 1em; }
span { letter-spacing: 2em; }
<p>a<span>bb</span>c</p>

a b  b c

これはさらに、 単一の文字だけを含む要素に letter-spacing を 適用しても、レンダリング結果には影響しないことを意味する:

p    { letter-spacing: 1em; }
span { letter-spacing: 2em; }
<p>a<span>b</span>c</p>

a b c

字間は RTL 並べ替えのに挿入されるため、 下の内側の span に適用された字間も同様に効果を持たない。 並べ替え後に "c" は "א" の隣に来ないためである:

p    { letter-spacing: 1em; }
span { letter-spacing: 2em; }
<!-- abc followed by Hebrew letters alef (א), bet (ב) and gimel (ג) -->
<!-- Reordering will display these in reverse order. -->
<p>ab<span></span>בג</p>

a b c א ב ג

字間調整は、不可視のゼロ幅整形文字 (Unicode Cf カテゴリに属するものなど)を無視する。 間隔は、それらの文字が文書内に存在しないかのように追加されなければならない。

たとえば、 A&#x200B;B に適用される letter-spacing は、 要素境界がどこにあっても、AB と同一である。

二つの文字間の有効な間隔がゼロでない場合 (均等割り付け、 または letter-spacing の非ゼロ値による)、 ユーザーエージェントは任意合字を適用すべきではない。 すなわち、基本的に正しい字形形成に必要と定義されていない合字である。 ただし、低レベルの font-feature-settings プロパティによって 指定される合字およびその他のフォント機能は、 この規則に優先する。 CSS Fonts Module Level 3 § feature-precedenceを参照。

たとえば、単語 “filial” に字間調整が適用される場合、 “fi” 合字は使用すべきではない。 それはテキストの均等な間隔を妨げるためである。
filial vs filial

注記: OpenType では、必須合字は rlig 機能に関連付けられることが期待される。 したがって、その他すべての合字は任意と見なされる。 ただし場合によっては、壊れたフォントを扱うために UA またはプラットフォームのヒューリスティックが 追加の合字を適用することがある。 この仕様は、そのような例外的な扱いを定義せず、上書きもしない。

7.2.1. 筆記体スクリプト

可能であれば、 UA は筆記体スクリプトに対して、 そのような文字の連続へ分配される総追加空間を、 その連続に対する何らかの筆記体伸長 (または負のトラッキング値の場合は圧縮)へ変換し、 同等の総拡張(または圧縮)を生じさせることによって、 字間調整を適用してもよい。 そうでない場合、 UA が筆記体スクリプトのテキストを 筆記体の接続を壊さずに拡張できないなら、 そのスクリプトの任意の一組の組版字母単位の間には、 間隔をまったく適用してはならない (字間調整の目的では、各単語を単一の組版字母 単位として扱う)。 どちらの場合も、そのような字母間の有効な間隔はゼロになる。 ただし前者では、テキストを引き伸ばしている感覚が維持される。

以下は、アラビア語テキストに間隔を空ける適切な例と不適切な例である。
元のテキスト
悪い 各字母の間に空間を均等に分配する。 これが筆記体の結合を壊すことに注意!
OK letter-spacing を 組版上適切な筆記体伸長によって分配する。 結果のテキストは、前の均等間隔の例と同じ長さである。
OK アラビア文字間の letter-spacing を抑制する。 それでも letter-spacing は、 非アラビア文字(スペースなど)には適用されることに注意。
悪い 結合していない文字の間だけに letter-spacing を適用する。 これは組版上の色調を歪め、単語境界を不明瞭にする。

注記: テキストの適切な筆記体伸長または圧縮は、 スクリプト、 書体、 言語、 単語内の位置、 行内の位置、 実装の複雑さ、 フォントの能力、 およびカリグラフィ上の好みによって異なり得る。 また、特定の場合にはまったく不可能なこともある。 それには、短縮合字、 スワッシュ異体、 文脈形、 U+0640 ـ ARABIC TATWEEL のような伸長グリフ、 またはその他のマイクロタイポグラフィの使用が含まれ得る。 これらの効果に関する規則を定義することは CSS の範囲外である。 著者は、相互運用できない結果を受け入れる用意がない限り、 筆記体スクリプトに letter-spacing を適用することを 避けるべきである。

7.3. 要素境界をまたぐ字形形成

二つの組版文字単位を分ける境界を持つ任意のボックスについて、 次のいずれかが真である場合、 テキストの字形形成はインラインボックス境界で分断されなければならない:

整形の実効的な変化がない場合、 または唯一の整形変化がグリフに影響しない場合 (テキスト装飾の適用など)、 テキストの字形形成はインラインボックス境界をまたいで 分断されてはならない

それ以外の場合でも、 フォント技術の制約を考慮してその場合に合理的かつ可能であれば、 テキストの字形形成はインラインボックス境界をまたいで 分断されるべきではない

境界をまたぐ合理的かつ可能な字形形成の例は アラビア語の字形形成である: 多くのシステムではこれはフォントエンジンによって実行され、 フォントが非常に洗練された文脈依存の字形形成を伴う 異体グリフを提供できる。 フォントエンジンに文脈を提供する API がない限り、 フォント変更をまたいでこのシステムに依存することは一般には不可能であるが、 エンジンがこの制限を回避することは単純であり、 したがって非常に合理的である。 たとえば、必要に応じて ゼロ幅接合子(U+200D)またはゼロ幅非接合子(U+200C)を用いて、 初期形/中間形/最終形/独立形の正しい選択を促すことができる。

境界をまたぐ字形形成が可能ではあるが合理的でない例は、 グリフを選択するために両側それぞれ 20 文字の文脈に敏感な フォントを扱う場合である: 問題の文字列の前および後のすべてのテキストを、 整形変化を伴う複数のインライン境界を通して渡すことは複雑である。 UA はそのような場合を扱うことができるが、 それらは典型的でも、現代のどの表記体系にも根本的に必要なものでもないため、 要求されない。

境界をまたぐ字形形成が不可能な例は、 “and” という単語の途中でフォントウェイトが変化し、 そのフォントでは合字が単語 “and” の三文字すべてを アンパサンドグリフ(“&”)に置き換える場合である。

8. 端部効果

端部効果は、 ブロック内の他の行に対する行のインデント (text-indent) および、行の始端辺・終端辺で内容をどのように測定するか (hanging-punctuation)を制御する。

8.1. 先頭行の字下げ: text-indent プロパティ

名前: text-indent
値: [ <length-percentage> ] && hanging? && each-line?
初期値: 0
適用対象: ブロックコンテナ
継承: yes
パーセンテージ: ブロックコンテナ自身のインライン軸内側サイズを参照
算出値: 算出された <length-percentage> 値に、 指定されたキーワードを加えたもの
正規順序: 文法順
アニメーション型: 算出値の型による

このプロパティは、 ブロック内のインライン内容の行に適用されるインデントを指定する。 インデントは、行ボックスの始端辺に適用される マージンとして扱われる。

each-line および/または hanging キーワードによって 別途指定されない限り、 要素の 最初の整形済み行 である行だけが影響を受ける。 [CSS-PSEUDO-4] たとえば、匿名ブロックボックスの最初の行は、 それが親要素の最初の子である場合にのみ影響を受ける。

値は次の意味を持つ:

<length>
インデント量を絶対長として与える。
<percentage>
インデント量を、 ブロックコンテナ自身の論理幅の パーセンテージとして与える。

パーセンテージは、 内在サイズ寄与を計算する目的では 0 として扱われなければならないが、 レイアウトを行うときは常に通常どおり解決される。

注記: これは要素のオーバーフローにつながることがある。 パーセンテージインデントと内在サイズ指定を併用することは推奨されない。

each-line
インデントは、各ブロックコンテナの最初の行、 および強制行分割の後の各行に影響する (ただしソフト 折り返し分割の後の行には影響しない)。
hanging
どの行が影響を受けるかを反転する。

左から右へのテキストでフロートが存在せず、 text-alignstart で、 text-indent5em の場合、 テキストの最初の行はブロック内へ 5em 入った位置から始まる:

     Since CSS1 it has been possible to
indent the first line of a block element
5em by setting the 'text-indent' property 
to '5em'.

hanging キーワードを追加すると、 最初の行は揃って始まるが、 他の行は 5em インデントされる:

In CSS3 we can instead indent all other
     lines of the block element by 5em
     by setting the 'text-indent' property
     to 'hanging 5em'.
text-indent プロパティは “最初の整形済み行” にのみ影響するため、 強制分割の後の行はインデントされない。
   For example, in the middle of
this paragraph is an equation,
which is centered:
             x + y = z
The first line after the equation
is flush (else it would look like
we started a new paragraph).

しかし、ときには(詩やコードのように)、 折り返すほど長い各行をインデントすることが適切である。 次の例では、text-indent3em hanging each-line の値を与え、 詩の三行目がブロックの右境界でソフト折り返しされる箇所に ぶら下げインデントを与えている:

In a short line of text
There need be no wrapping,
But when we go on and on and on  
   and on,
Sometimes a soft break
Can help us stay on the page.

注記: text-indent プロパティは継承されるため、 ブロック要素に指定された場合、子孫の インラインブロック要素にも影響する。 このため、display: inline-block が指定された要素には、 text-indent: 0 を指定することがしばしば賢明である。

8.2. ぶら下げグリフ

行の始端辺または終端辺にあるグリフが ぶら下がる場合、 行の内容を収まり、配置、または均等割り付けのために測定するとき、 それは考慮されない。 行の配置/均等割り付けによっては、 これにより記号が行ボックスの外側に配置されることがある。 ぶら下がるグリフは、 内在サイズmin-content size および max-content size) とそこから派生する任意のサイズを計算するときにも 考慮されない。 (この測定とカーニングの相互作用は現在 UA 定義である。 CSSWG はこの点について助言を歓迎する。)

ぶら下がるグリフは、 それでも親インラインボックスの内部に囲まれ、 テキスト均等割り付けにも参加する: その文字送り幅は、 行にどれだけの内容が収まるか、 均等割り付けのために行の内容をどれだけ拡張または圧縮する必要があるか、 またはテキスト配置のために行ボックス内で内容をどのように位置付けるかを 決定するときに測定されないだけである。 実質的には、ぶら下がるグリフの 文字送り幅は、 その親インラインボックスの 影響を受ける辺における追加の負のマージンとして再解釈される。 それ以外では、行は通常どおりレイアウトされる。 オーバーフローするぶら下げグリフは、 不要なスクロールバーを作成しないよう、 通常はインクオーバーフローと見なされるべきである。 ただし、内容が編集可能である場合、 またはそれをスクロール可能オーバーフローとして扱うことが ユーザーにとって有用な他の場合には、 UA はそれをスクロール可能オーバーフローとして扱ってもよい。 [CSS-OVERFLOW-3]

場合によっては、行末のグリフは 条件付きで ぶら下がることができる: 均等割り付けの前に、それが行に収まらない場合にのみ ぶら下がる。 行の内容を収まりのために測定するとき、それは考慮されない。 ただし、収まらない任意の部分は ぶら下がるものと見なされる。 条件付きでぶら下がるグリフは、 min-content サイズ およびそこから派生する任意のサイズを計算するときは考慮されないが、 max-content サイズ およびそこから派生する任意のサイズについては考慮される。

ぶら下がり可能なグリフと 行の辺との間に非ゼロのインライン軸方向の border または padding がある場合、 そのグリフはぶら下がれない。 たとえば、終端側 padding を持つインラインボックスの末尾にあるピリオドは、 行の終端辺でぶら下がらない。

複数の隣接するグリフは一緒にぶら下がることができるが、 ぶら下がることを許可される数には具体的な制限が指定されることがある (たとえば、行の各辺で最大一つの句読文字だけが ぶら下がることができる)。

8.2.1. ぶら下げ句読点: hanging-punctuation プロパティ

名前: hanging-punctuation
値: none | [ first || [ force-end | allow-end ] || last ]
初期値: none
適用対象: テキスト
継承: yes
パーセンテージ: n/a
算出値: 指定されたキーワード
正規順序: 文法順
アニメーション型: 離散

このプロパティは、句読記号が存在する場合に、 それがテキスト行の始端または終端で ぶら下がり、 行ボックスの外側 (またはインデント内) に配置され得るかどうかを決定する。

注記: ブロックコンテナに十分な padding がない場合、 hanging-punctuation はオーバーフローを引き起こすことがある。

値は次の意味を持つ:

none
句読文字はぶら下がるようにされない。
first
要素の最初の整形済み行の始端にある 開き括弧、引用符、または全角スペースが ぶら下がる。 これは Unicode カテゴリ Ps、Pf、Pi のすべての文字に加え、 ASCII 引用符 U+0027 ' APOSTROPHE および U+0022 " QUOTATION MARK、 ならびに IDEOGRAPHIC SPACE U+3000 に適用される。
last
要素の最後の整形済み行の終端にある 閉じ括弧または引用符がぶら下がる。 これは Unicode カテゴリ Pe、Pf、Pi のすべての文字に加え、 ASCII 引用符 U+0027 ' APOSTROPHE および U+0022 " QUOTATION MARK に適用される。
force-end
行末の句点または読点ぶら下がる
allow-end
行末の句点または読点条件付きでぶら下がる

行の各辺で最大一つの句読文字がぶら下がることができる。

ぶら下がることが許可される句点 および読点には次が含まれる:

U+002C , COMMA
U+002E . FULL STOP
U+060C ، ARABIC COMMA
U+06D4 ۔ ARABIC FULL STOP
U+3001 IDEOGRAPHIC COMMA
U+3002 IDEOGRAPHIC FULL STOP
U+FF0C FULLWIDTH COMMA
U+FF0E FULLWIDTH FULL STOP
U+FE50 SMALL COMMA
U+FE51 SMALL IDEOGRAPHIC COMMA
U+FE52 SMALL FULL STOP
U+FF61 HALFWIDTH IDEOGRAPHIC FULL STOP
U+FF64 HALFWIDTH IDEOGRAPHIC COMMA

UA は、適切であれば他の文字を含めてもよい。

注記: CSS Working Group は、 他の文字を含める UA が そのような追加についてワーキンググループへ知らせることを歓迎する。

allow-endforce-end は、 東アジアで使用されるぶら下げ句読点の二つの変種である。
hanging-punctuation: allow-end
p {
  text-align: justify;
  hanging-punctuation: allow-end;
}
hanging-punctuation: force-end
p {
  text-align: justify;
  hanging-punctuation: force-end;
}

allow-end の場合、 最初の行末にある句読点は、ぶら下がらなくても収まるため、 ぶら下がらない。 しかし、force-end が使用された場合、 それは強制的にぶら下がる。 均等割り付けでは、ぶら下げ句読点を除いて行を測定する。 したがって行が拡張されると、句読点は行の外へ押し出される。

8.3. 双方向性と行ボックス

行ボックスの始端 および終端 側は、 行ボックスのインライン基底方向によって決定される。 通常は一致するが、 行ボックスインライン基底方向は、 包含ブロックまたは 双方向 段落インライン基底方向とは異なる。 行ボックスインライン基底 方向は、 text-align-alltext-align-lasttext-indent、 および hanging-punctuation—​すなわち、その辺に対する 内容の位置および配置—​に影響する。 これはインライン内容の整形や順序には影響しない (それらは Unicode Bidirectional Algorithm によって制御され、 CSS Writing Modes によって適用される [UAX9] [CSS-WRITING-MODES-4])。

ほとんどの場合、行ボックスインライン基底方向は、 その包含ブロックの算出 direction によって与えられる。 しかし、 その包含ブロックunicode-bidi: plaintext [CSS-WRITING-MODES-4] を持つ場合:

次の例では、 <block> が始端揃えの整形済みブロック (display: block; white-space: pre; text-align: start) であると仮定すると、 一行おきに右揃えされる:
<block style="unicode-bidi: plaintext">
français
فارسی
français
فارسی
français
فارسی
</block>
中立文字(句読点など)および隔離された並びは、 プレーンテキスト双方向段落のインライン基底方向を見つけるときに スキップされるため、 次の例の行ボックスは左から右になる (したがって text-align: start が与えられていれば左揃えになる)。 これは最初の強い文字 ‘h’ によって決定される:
<para style="display: block; direction: rtl; unicode-bidi:plaintext"><quote style="unicode-bidi:plaintext">שלום!</quote>”, they said.
</para>
<textarea style="direction: rtl; unicode-bidi:plaintext">

Hello!

</textarea>

unicode-bidi: plaintext により、 “Hello!” は LTR で組版され (すなわち、感嘆符が右側に置かれ)、 左揃えされ、 包含ブロックの RTL direction は無視される。 これにより、その後の空行も LTR になる。 つまり、その行のキャレットは左端に現れるべきである。 しかし、最初の空行は右揃えされる: 先行する行がないため、 それは包含ブロックの RTL 方向を仮定する。

付録 A: テキスト処理の操作順序

この付録は規範的である。

以下のリストはテキスト操作の順序を定義する。 (結果のレイアウトが同じである限り、実装はこの順序に拘束されない。)

  1. 空白処理 パート I(折り返し前)
  2. テキスト変換
  3. 縦中横 [CSS-WRITING-MODES-4]
  4. テキスト方向 [CSS-WRITING-MODES-4]
  5. 行ごとに次を適用しながら テキストを折り返す:
  6. 均等割り付け (これはグリフ選択および/またはテキスト折り返しに影響し、 その手順へ戻ることがある)
  7. テキスト配置

付録 B: プレーンテキストへの変換

この付録は、プレーンテキストのコピー & ペースト操作の目的において規範的である

CSS でレンダリングされた文書がプレーンテキスト形式へ変換される場合、 次のことが期待される:

付録 C: 既定の UA スタイルシート

この付録は参考情報であり、 UA 開発者が HTML の既定スタイルシートを実装する助けとなることを意図しているが、 UA 開発者は必要に応じて無視または変更してよい。

/* make option elements align together */
option { text-align: match-parent; }

/* Avoid hanging punctuation inheriting into preformatted blocks */
pre { hanging-punctuation: none; }

付録 D: スクリプトと間隔

この付録は規範的である。

組版上の挙動は言語によって多少異なるが、 表記体系によって大きく異なる。 この付録では、Unicode 6.0 におけるいくつかの一般的な スクリプトを、 均等割り付けおよび間隔の挙動に従って分類する。 カテゴリの説明は記述的であり、規定的ではない。 決定要因は均等割り付け機会の優先順位付けである。

ブロック スクリプト
CJK および拡張としてすべての Wide 文字 (East Asian Width [UAX11] を参照)。 次の Unicode スクリプトが含まれる: Bopomofo、Han、Hangul、Hiragana、Katakana、および Yi。 East Asian Width プロパティの文字のうち Wide および Fullwidth も含まれるが、 Ambiguous 文字は、 表記体系中国語韓国語、 または 日本語である場合に限り含まれる。
クラスタ型 スクリプト
クラスタ型スクリプトは離散的な単位を持ち、 単語境界でのみ分割するが、 可視の単語区切りを使用しない。 それらはスペースの伸長を優先するが、 均等割り付けのための文字間隔も無理なく受け入れる。 クラスタ型スクリプトには、 次の Unicode スクリプトが含まれるが、 これらに限定されない: Khmer、 Lao、 Myanmar、 New Tai Lue、 Tai Le、 Tai Tham、 Tai Viet、 Thai
筆記体スクリプト
筆記体スクリプトは、均等割り付けまたは letter-spacing のいずれにおいても、 その字母間に隙間を許容しない。 次の Unicode スクリプトが含まれる: Arabic、 Hanifi Rohingya、 Mandaic、 Mongolian、 N’Ko、 Phags Pa、 Syriac

注記: デーヴァナーガリーやグジャラート文字などの ベースライン接続を持つインド系スクリプトは、 筆記体スクリプトとは 見なされず組版文字単位間の そのような隙間を許容するIndic Layout Requirementsを参照。 [ILREQ]

ユーザーエージェントは、Unicode サポートを更新する際に、 将来の Unicode バージョンでまだ符号化されていない筆記体スクリプトを扱うため、 この一覧を更新すべきであり、 それに応じてこの仕様を更新するよう CSSWG に依頼することが推奨される。

付録 E: 文字とプロパティ

この付録は規範的である。

Unicode は、CSS 組版で参照される 四つの符号位置レベルのプロパティを定義している:

East Asian Width プロパティ
Unicode Standard Annex #11 [UAX11] で定義され、 Unicode Character Database [UAX44] では East_Asian_Width プロパティとして与えられる。
一般カテゴリ
Unicode Standard Annex #44 [UAX44] で定義され、 Unicode Character Database [UAX44] では General_Category プロパティとして与えられる。
Script プロパティ
Unicode Standard Annex #24 [UAX24] で定義され、 Unicode Character Database [UAX44] では Script プロパティとして与えられる。 (UA はこの対応付けに ScriptExtensions.txt の割り当てを含めなければならない。)
Vertical Orientation
Unicode Standard Annex #50 [UAX50]Unicode Character Database [UAX44] における Vertical_Orientation プロパティとして定義される。

Unicode は個々の符号位置に対するプロパティを定義しているが、 組版文字単位の プロパティを決定する必要があることもある。 CSS Text の目的では、 組版文字単位のプロパティは、 次の二つの場合を除き、 その最初の書記素クラスタの 基底文字によって与えられる:

付録 F: 内容表記体系の特定

この付録は規範的である。

ほとんどの言語には好まれる表記体系があるが、 複数を持つものもあり、 多くは一つ以上の外来の表記体系へ転写することもできる。 一般的な例として、ほとんどの言語には少なくとも一つのラテン文字転写があり、 したがってラテン表記体系で書くことができる。 転写されたテキストは通常、その表記体系の組版慣習を採用する: たとえば、日本語の “romaji” や中国語の Pinyin はラテン文字と単語間スペースを用い、 それに応じてラテン文字の行分割および均等割り付けの慣行に従う。 別の例として、歴史的な表意文字による韓国語 (ko-Hani) は単語間スペースを用いないため、 現代韓国語ではなく中国語に近い形で組版されるべきである。

HTML または、文書言語BCP47 タグを用いて言語を識別し、 内容言語を宣言する任意のものでは、 著者はスクリプトサブタグを用いて、 非典型的な表記体系の使用を曖昧さなく示したり、指示したりできる。 [BCP47] たとえば、それを本来使用しない言語にラテン表記体系の使用を示すには、 -Latn スクリプトサブタグを追加できる。 例: 日本語ローマ字の場合は ja-Latn。 他の表記体系には他のサブタグが存在する。 ISO の Code for the Representation of Names of Scripts および ISO15924 スクリプトタグレジストリを参照。 [ISO15924]

スクリプトサブタグを持つ BCP47 タグを使用する一般的/歴史的な例:
zh-Latn
ラテン文字転写で書かれた中国語。
ko-Hani
漢字(中国語表意文字)で書かれた韓国語。
tr-Arab
アラビア文字で書かれたトルコ語。
mn-Cyrl
キリル文字で書かれたモンゴル語。
mn-Mong
伝統的なモンゴル文字で書かれたモンゴル語。

しかし、BCP47 のスクリプトサブタグは、 単一の表記体系と強く結び付いた言語では通常使用されず、 (実際には推奨されない) 代わりに、他のものが指定されていなければ、 その表記体系が暗黙的に示されることが期待される。 [BCP47] IANA は、この目的のため、 language subtag registrySuppress-Script フィールドを通じて、 さまざまな言語で最も一般的な表記体系のデータベースを維持している。

注記: 言語タグ付けに関するさらなる助言は、 Internationalization Working Group“Language tags in HTML and XML” および “Choosing a Language Tag”にある。

表記体系が明示的に示されていない場合、 UA は、行分割や均等割り付けなどの 言語依存の組版挙動について、 宣言された内容 言語の最も一般的な表記体系を仮定すべきである。 ただし、著者が明示的に別の表記体系を宣言している場合、 UA はその表記体系を仮定してはならない。 UA が特定の言語と表記体系の組み合わせについて 言語固有の知識を持たない場合、 それは宣言された表記体系の組版慣習を使用しなければならない (必要であれば別の言語の慣習を仮定する)。 宣言された言語を、仮定された表記体系における慣習として用いてはならない。 それは宣言された表記体系には不適切である。

言語と最も一般的な表記体系との完全な対応関係は、 この文書の範囲外である。 ただし、ユーザーエージェントは少なくとも次を仮定しなければならない:

付録 G: 小書き仮名のマッピング

この付録は規範的である。

小書き仮名から通常サイズ仮名への対応
小書き 通常サイズ
ぁ U+3041 あ U+3042
ぃ U+3043 い U+3044
ぅ U+3045 う U+3046
ぇ U+3047 え U+3048
ぉ U+3049 お U+304A
ゕ U+3095 か U+304B
ゖ U+3096 け U+3051
𛄲 U+1B132 こ U+3053
っ U+3063 つ U+3064
ゃ U+3083 や U+3084
ゅ U+3085 ゆ U+3086
ょ U+3087 よ U+3088
ゎ U+308E わ U+308F
𛅐 U+1B150 ゐ U+3090
𛅑 U+1B151 ゑ U+3091
𛅒 U+1B152 を U+3092
ァ U+30A1 ア U+30A2
ィ U+30A3 イ U+30A4
ゥ U+30A5 ウ U+30A6
ェ U+30A7 エ U+30A8
ォ U+30A9 オ U+30AA
ヵ U+30F5 カ U+30AB
ㇰ U+31F0 ク U+30AF
ヶ U+30F6 ケ U+30B1
𛅕 U+1B155 コ U+30B3
ㇱ U+31F1 シ U+30B7
ㇲ U+31F2 ス U+30B9
ッ U+30C3 ツ U+30C4
ㇳ U+31F3 ト U+30C8
ㇴ U+31F4 ヌ U+30CC
ㇵ U+31F5 ハ U+30CF
ㇶ U+31F6 ヒ U+30D2
ㇷ U+31F7 フ U+30D5
ㇸ U+31F8 ヘ U+30D8
ㇹ U+31F9 ホ U+30DB
ㇺ U+31FA ム U+30E0
ャ U+30E3 ヤ U+30E4
ュ U+30E5 ユ U+30E6
ョ U+30E7 ヨ U+30E8
ㇻ U+31FB ラ U+30E9
ㇼ U+31FC リ U+30EA
ㇽ U+31FD ル U+30EB
ㇾ U+31FE レ U+30EC
ㇿ U+31FF ロ U+30ED
ヮ U+30EE ワ U+30EF
𛅤 U+1B164 ヰ U+30F0
𛅥 U+1B165 ヱ U+30F1
𛅦 U+1B166 ヲ U+30F2
𛅧 U+1B167 ン U+30F3
ァ U+FF67 ア U+FF71
ィ U+FF68 イ U+FF72
ゥ U+FF69 ウ U+FF73
ェ U+FF6A エ U+FF74
ォ U+FF6B オ U+FF75
ッ U+FF6F ツ U+FF82
ャ U+FF6C ヤ U+FF94
ュ U+FF6D ユ U+FF95
ョ U+FF6E ヨ U+FF96

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

この仕様は、ユーザーにインストールされているハイフネーション辞書および行分割辞書を漏えいさせる。

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

この仕様は新たなセキュリティ上の考慮事項を導入しない。

謝辞

この仕様は、以下の方々の助けなしには実現しなかった: Addison Phillips, Aharon Lanin, Alan Stearns, Ambrose Li, Arnold Schrijver, Arye Gittelman, Ayman Aldahleh, Ben Errez, Bert Bos, Chris Lilley, Chris Pratley, Chris Thrasher, Chris Wilson, Dave Hyatt, David Baron, Emilio Cobos Álvarez, Eric LeVine, Etan Wexler, Frank Tang, Håkon Wium Lie, IM Mincheol, Ian Hickson, James Clark, Javier Fernandez, John Daggett, Jonathan Kew, Ken Lunde, Laurie Anna Edlund, Marcin Sawicki, Martin Dürst, Martin Heijdra, Masafumi Yabe, Masayasu Ishikawa, Michael Jochimsen, Michel Suignard, Mike Bemford, Myles Maxfield, Nat McCully, Paul Nelson, Rahul Sonnad, Richard Ishida, Shinyu Murakami, Stephen Deach, Steve Zilles, Takao Suzuki, Tantek Çelik, Xidorn Quan, Yaniv Feinberg.

変更点

最近の変更

以下の変更は、 2024年9月の勧告候補 草案以降に行われた:

以下の規範的変更は、 2023年9月の勧告候補 草案以降に行われた:

以下の規範的変更は、 2023年2月の勧告候補 草案以降に行われた。

以下の規範的変更は、 2020年12月の勧告候補以降に行われた。

これに加えて、いくつかの軽微な編集上の修正が行われた。

過去の変更

2020年および2019年の作業草案からその勧告候補までを対象とする 以前の変更一覧、 および 2013年から2020年までのすべてのコメントを対象とする コメント処理状況も参照。

適合性

文書規約

適合要件は、記述的な表明と RFC 2119 の用語を組み合わせて表現される。 この文書の規範的部分におけるキーワード “MUST”、 “MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、 “RECOMMENDED”、“MAY”、および “OPTIONAL” は、RFC 2119 で説明されるとおりに解釈される。 ただし、読みやすさのため、この仕様ではこれらの語がすべて大文字で現れるとは限らない。

この仕様のすべてのテキストは、明示的に非規範的と示された節、 例、および注記を除き、規範的である。 [RFC2119]

この仕様の例は “for example” という語で導入されるか、 次のように class="example" によって規範的テキストから分離される:

これは参考情報としての例の一例である。

参考情報の注記は “Note” という語で始まり、次のように class="note" によって規範的テキストから分離される:

注記、これは参考情報としての注記である。

助言は特別な注意を喚起するようにスタイル付けされた規範的な節であり、 次のように <strong class="advisement"> によって他の規範的テキストから分離される: UA はアクセシブルな代替を提供しなければならない。

適合クラス

この仕様への適合性は、 三つの適合クラスについて定義される:

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

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

レンダラーは、適切な仕様で定義されるとおりに スタイルシートを解釈することに加えて、 この仕様で定義されるすべての機能を正しく解析し、 それに従って文書をレンダリングすることによりサポートする場合、 この仕様に適合する。 ただし、デバイスの制限により UA が文書を正しくレンダリングできないことは、 UA を不適合にしない。 (たとえば、UA はモノクロモニターで色をレンダリングすることを要求されない。)

オーサリングツールは、汎用 CSS 文法およびこのモジュールの各機能の個別文法に従って 構文的に正しいスタイルシートを作成し、 このモジュールで説明されるスタイルシートのその他すべての適合要件を満たす場合、 この仕様に適合する。

部分実装

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

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

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

非実験的実装

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

CSS の実装間の相互運用性を確立および維持するため、 CSS Working Group は、非実験的 CSS レンダラーに対し、 CSS 機能の接頭辞なし実装をリリースする前に、 実装報告書(および必要に応じて、その実装報告書に使用したテストケース)を W3C へ提出することを求めている。 W3C に提出されたテストケースは、 CSS Working Group によるレビューおよび修正の対象となる。

テストケースおよび実装報告書の提出に関する詳細情報は、 CSS Working Group の Web サイト https://www.w3.org/Style/CSS/Test/ で確認できる。 質問は public-css-testsuite@w3.org メーリングリストへ送るべきである。

CR 終了基準

この仕様が勧告案へ進むためには、 各機能について少なくとも二つの独立した相互運用可能な実装が存在しなければならない。 各機能は異なる製品群によって実装されてもよく、 すべての機能が単一の製品で実装される必要はない。 この基準の目的において、以下の用語を定義する:

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

この仕様は少なくとも六か月間、 勧告候補のままとなる。

索引

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

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

参考文献

規範参考文献

[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2024年3月11日. CRD. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2024年8月4日. WD. URL: https://www.w3.org/TR/css-box-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-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 2023年3月30日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 4. 2025年11月6日. WD. URL: https://www.w3.org/TR/css-display-4/
[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]
Chris Lilley. CSS Fonts Module Level 4. 2026年4月22日. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-INLINE-3]
Elika Etemad. CSS Inline Layout Module Level 3. 2024年12月18日. WD. URL: https://www.w3.org/TR/css-inline-3/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2025年10月7日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-PSEUDO-4]
Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2025年6月27日. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-RUBY-1]
Elika Etemad; et al. CSS Ruby Annotation Layout Module Level 1. 2022年12月31日. WD. URL: https://www.w3.org/TR/css-ruby-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2021年12月17日. WD. URL: https://www.w3.org/TR/css-sizing-3/
[CSS-TEXT-4]
Elika Etemad; et al. CSS Text Module Level 4. 2024年5月29日. WD. URL: https://www.w3.org/TR/css-text-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2024年3月22日. CRD. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2024年3月12日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2019年12月10日. REC. URL: https://www.w3.org/TR/css-writing-modes-3/
[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; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS2/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021年8月26日. WD. URL: https://www.w3.org/TR/cssom-1/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[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
[UAX11]
Ken Lunde 小林剣. East Asian Width. 2025年7月24日. Unicode Standard Annex #11. URL: https://www.unicode.org/reports/tr11/tr11-44.html
[UAX14]
Robin Leroy. Unicode Line Breaking Algorithm. 2025年9月5日. Unicode Standard Annex #14. URL: https://www.unicode.org/reports/tr14/tr14-55.html
[UAX24]
Ken Whistler. Unicode Script Property. 2025年7月31日. Unicode Standard Annex #24. URL: https://www.unicode.org/reports/tr24/tr24-39.html
[UAX29]
Josh Hadley. Unicode Text Segmentation. 2025年8月17日. Unicode Standard Annex #29. URL: https://www.unicode.org/reports/tr29/tr29-47.html
[UAX44]
Ken Whistler. Unicode Character Database. 2025年8月27日. Unicode Standard Annex #44. URL: https://www.unicode.org/reports/tr44/tr44-36.html
[UAX50]
Ken Lunde 小林剣; Koji Ishii 石井宏治. Unicode Vertical Text Layout. 2025年7月24日. Unicode Standard Annex #50. URL: https://www.unicode.org/reports/tr50/tr50-33.html
[UAX9]
Manish Goregaokar मनीष गोरेगांवकर; Robin Leroy. Unicode Bidirectional Algorithm. 2025年8月13日. Unicode Standard Annex #9. URL: https://www.unicode.org/reports/tr9/tr9-51.html
[UNICODE]
The Unicode Standard. URL: https://www.unicode.org/versions/latest/

非規範参考文献

[BCP47]
A. Phillips, Ed.; M. Davis, Ed.. Tags for Identifying Languages. 2009年9月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc5646
[CLREQ]
Fuqiao Xue; Richard Ishida. Requirements for Chinese Text Layout - 中文排版需求. 2026年5月3日. DNOTE. URL: https://www.w3.org/TR/clreq/
[CSS-TEXT-DECOR-3]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 3. 2022年5月5日. CRD. URL: https://www.w3.org/TR/css-text-decor-3/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[ILREQ]
Swaran Lata. Indic Layout Requirements. 2020年5月29日. WD. URL: https://www.w3.org/TR/ilreq/
[ISO15924]
Code for the representation of names of scripts.. 1998. ISO 15924:1998. Draft International Standard.
[JIS4051]
Formatting rules for Japanese documents (日本語文書の組版方法).. 2004. JIS X 4051:2004. In Japanese.
[JLREQ]
Hiroyuki Chiba; et al. Requirements for Japanese Text Layout 日本語組版処理の要件(日本語版). 2020年8月11日. NOTE. URL: https://www.w3.org/TR/jlreq/
[JUSTIFY]
Elika Etemad; Richard Ishida. Approches to Full Justification. URL: https://www.w3.org/International/articles/typography/justification
[RFC6919]
R. Barnes; S. Kent; E. Rescorla. Further Key Words for Use in RFCs to Indicate Requirement Levels. 2013年4月1日. Experimental. URL: https://www.rfc-editor.org/rfc/rfc6919
[TYPOGRAPHY]
Richard Ishida. Language enablement index. 2024年11月15日. DNOTE. URL: https://www.w3.org/TR/typography/
[XML10]
Tim Bray; et al. Extensible Markup Language (XML) 1.0 (Fifth Edition). 2008年11月26日. REC. URL: https://www.w3.org/TR/xml/
[ZHMARK]
General Rules for Punctuation (《标点符号用法》).. 2011. GB/T 15834―2011. In Chinese..

プロパティ索引

名前 初期値 適用対象 継承 % アニメーション型 正規順序 算出値
hanging-punctuation none | [ first || [ force-end | allow-end ] || last ] none テキスト yes n/a 離散 文法順 指定されたキーワード
hyphens none | manual | auto manual テキスト yes n/a 離散 n/a 指定されたキーワード
letter-spacing normal | <length> normal インラインボックスおよびテキスト yes n/a 算出値の型による n/a 絶対長
line-break auto | loose | normal | strict | anywhere auto テキスト yes n/a 離散 n/a 指定されたキーワード
overflow-wrap normal | break-word | anywhere normal テキスト yes n/a 離散 n/a 指定されたキーワード
tab-size <number [0,∞]> | <length [0,∞]> 8 テキスト yes n/a 算出値の型による n/a 指定された数値または絶対長
text-align start | end | left | right | center | justify | match-parent | justify-all start ブロックコンテナ yes 個別プロパティを参照 離散 n/a 個別プロパティを参照
text-align-all start | end | left | right | center | justify | match-parent start ブロックコンテナ yes n/a 離散 n/a 指定されたキーワード。ただし match-parent は上で定義されたように算出される
text-align-last auto | start | end | left | right | center | justify | match-parent auto ブロックコンテナ yes n/a 離散 n/a 指定されたキーワード。ただし match-parent は上で定義されたように算出される
text-indent [ <length-percentage> ] && hanging? && each-line? 0 ブロックコンテナ yes ブロックコンテナ自身のインライン軸内側サイズを参照 算出値の型による 文法順 算出された <length-percentage> 値に、指定されたキーワードを加えたもの
text-justify auto | none | inter-word | inter-character auto テキスト yes n/a 離散 n/a 指定されたキーワード(ただし distribute 旧来値を除く)
text-transform none | [capitalize | uppercase | lowercase ] || full-width || full-size-kana none テキスト yes n/a 離散 n/a 指定されたキーワード
white-space normal | pre | nowrap | pre-wrap | break-spaces | pre-line normal テキスト yes n/a 離散 n/a 指定されたキーワード
word-break normal | keep-all | break-all | break-word normal テキスト yes n/a 離散 n/a 指定されたキーワード
word-spacing normal | <length> normal テキスト yes N/A 算出値の型による n/a 絶対長