1. はじめに
このモジュールは CSS の組版制御について述べる。 すなわち、ソーステキストを整形済みで行折り返しされたテキストへ変換することを 制御する CSS の機能である。 さまざまな CSS プロパティにより、 大文字・小文字変換、 空白の折りたたみ、 テキストの折り返し、 行分割規則 および ハイフネーション、 配置と均等割り付け、 間隔、 そして インデントを制御できる。
下線、 圏点、 および 影などの テキスト装飾機能は、 (以前はこのモジュールの一部であったが) CSS Text Decoration Module で扱われる。 [CSS-TEXT-DECOR-3]
双方向および 縦書きテキストは CSS Writing Modes Module で扱われる。 [CSS-WRITING-MODES-4].
世界中のさまざまな言語および表記体系の 組版要件に関する追加情報は、 Internationalization Working Group の Language 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-Hani は
ko(ko-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 の範囲外である。
- ミャンマー文字やデーヴァナーガリーなど一部の文字体系では、 均等割り付けと行分割の両方における 組版文字単位は 音節全体であり、 それは複数の Unicode 書記素クラスタを含み得る。 [UAX29]
-
タイ文字やラオ文字など他の文字体系では、
行分割における 組版文字は
Unicode の既定の 書記素クラスタに一致するものの、
字間調整では関連する単位が
Unicode 書記素クラスタよりも小さく、
間隔を挿入できるようにする前に
分解またはその他の置換が必要になることがある。
[UAX29]
たとえば、 タイ語の単語 คำ(U+0E04 + U+0E33)に適切に字間を入れるには、 U+0E33 を U+0E4D + U+0E32 に分解し、 その後 U+0E32 の前に余分な字間を挿入する必要がある: คํ า。
やや複雑な例は น้ำ(U+0E19 + U+0E49 + U+0E33)である。 この場合、通常のタイ文字整形はまず U+0E33 を U+0E4D + U+0E32 に分解し、 その後 U+0E4D と U+0E49 を入れ替えて、U+0E19 + U+0E4D + U+0E49 + U+0E32 とする。 前述のように、余分な字間はその後 U+0E32 の前に挿入される: นํ้ า。
- 縦組みにも調整が必要になることがある。 たとえば、upright テキストを組む場合、 チベット語のツェクおよびシェー記号は、独立した 組版文字単位として扱われるのではなく、 先行する書記素クラスタとともに保持される。 [CSS-WRITING-MODES-4]
組版字母単位 (またはこの仕様の目的における 字母) は、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
- すべての小書き仮名 文字を、対応する通常サイズ仮名に変換する。 この値は通常、ルビ注釈テキストに用いられる。 著者が、ルビで通常使用される小さいフォントサイズでの可読性の問題を補うために、 すべての小書き仮名を大きな仮名として描画したい場合があるためである。
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 Standard の Default Case Algorithms 節で 定義されるように、 条件付き大文字・小文字規則を含む Unicode 文字の完全なケースマッピングを用いなければならない。 [UNICODE] その要素の 内容 言語が、 文書 言語の規則に従って 既知である場合(かつその場合に限り)、 適切な言語固有の規則も適用されなければならない。 これらには少なくとも、 Unicode の SpecialCasing.txt にある言語固有の規則が含まれるが、これに限定されない。
全角
および 半角形式の定義は、
Unicode Standard Annex #11:
East Asian Widthで確認できる。
[UAX11]
全角形式へのマッピングは、
Unicode Standard Annex #44: Unicode
Character Database の Decomposition_Mapping に
<wide>
または <narrow> タグを持つ符号位置を取ることによって定義される。
[UAX44]
<narrow> タグについては、
マッピングは符号位置から
(<narrow> タグを除いた)分解先へ向かう。
<wide> タグについては、
マッピングは
(<wide> タグを除いた)分解先から
元の符号位置へ戻る。
小書き仮名から 通常サイズ仮名への マッピングは、付録 G: 小書き仮名のマッピングで定義される。
2.1.2. 操作の順序
複数の値が指定され、 したがって複数の変換を適用する必要がある場合、 それらは次の順序で適用される:
テキスト変換は、§ 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])
ただし、その文字はエスケープシーケンス
()を用いて符号化された場合には
保持され、上記の規則を観察できる。
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])を、
そこに存在しないかのように無視しながら、次のように処理される:
-
white-space が normal、nowrap、または pre-line
に設定されている場合、
空白文字は
折りたたみ可能と見なされ、
次の手順を実行することにより処理される:
- セグメント区切りの直前または直後にある、 折りたたみ可能なスペースおよびタブの任意の連続は 除去される。
- 折りたたみ可能なセグメント 区切りは、 セグメント区切り変換規則に従って レンダリングのために変換される。
- すべての折りたたみ可能なタブは、折りたたみ可能なスペース(U+0020)へ変換される。
- 別の折りたたみ可能なスペースの直後にある、 任意の折りたたみ可能なスペース—たとえ、その スペースを含むインラインの境界の外側にあるものでも、 両方の スペースが同じインライン整形コンテキスト内にあるなら—は、 送り幅ゼロへ折りたたまれる。 (それは不可視であるが、 ソフト折り返し機会がある場合、 それを保持する。)
- white-space が pre、pre-wrap、または break-spaces に設定されている場合、 スペースの任意の連続はノーブレークスペースの連続として扱われる。 ただし、pre-wrap では、 ソフト折り返し 機会が、スペースおよび/またはタブの連続の末尾に存在し、 一方 break-spaces では、 ソフト折り返し機会が各スペースおよび各タブの後に存在する。
<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 プロパティで指定される折り返しを 用いて配置される。 各行が配置されるとき、
- 行頭にある折りたたみ可能なスペースの連続は 除去される。
-
タブサイズがゼロの場合、
保持された
タブはレンダリングされない。
そうでない場合、各保持されたタブは、
次のグリフの開始辺が次のタブ位置に揃うような
水平方向のシフトとしてレンダリングされる。
この距離が 0.5ch 未満の場合、
代わりに後続のタブ位置が使用される。
タブ
位置は、
保持されたタブの
最も近いブロックコンテナ祖先の開始内容辺から、
タブサイズの倍数となる点に現れる。
タブサイズは tab-size
プロパティによって与えられる。
注記: タブ(U+0009)が双方向処理とどのように相互作用するかについては、Unicode の 規則を参照。 [UAX9]
-
行末にある折りたたみ可能なスペースの連続は
除去され、
さらに、その white-space プロパティが normal、nowrap、または pre-line である
末尾の U+1680 OGHAM SPACE MARK も除去される。
注記: Unicode Bidirectional Algorithm 規則 L1 により、 双方向並べ替え前に 行末に位置する折りたたみ可能なスペースの連続は、 並べ替え後も行末に位置する。 [UAX9] [CSS-WRITING-MODES-4]
-
(双方向並べ替え
[CSS-WRITING-MODES-4]後に)
行末に、
空白、
その他の空白
区切り文字、
および/または保持されたタブ
の連続が残っている場合:
- white-space が normal、 nowrap、 または pre-line に設定されている場合、 UA はこの連続を(無条件に)ぶら下げなければならない。
-
white-space が pre-wrap
に設定されている場合、
UA は、
その連続の後に強制改行が続く場合を除き、
この連続を(無条件に)ぶら下げなければならない。
強制改行が続く場合は、代わりにその連続を条件付きでぶら下げなければならない。
また、そうしなければオーバーフローするものについて、
その文字送り幅を視覚的に折りたたんでもよい。
注記: 空白を折りたたむのではなく ぶら下げることで、 ユーザーはテキストを選択または編集するときにそのスペースを見ることができる。
-
white-space が break-spaces に設定されている場合、
スペース、タブ、およびその他の空白
区切り文字は、
他の可視文字と同じように扱われる:
それらはぶら下がることも、
送り幅を折りたたまれることもない。
注記: したがって、そのような文字は空間を占め、 利用可能な空間と適用される行分割制御に応じて、 オーバーフローするか、行の折り返しを引き起こす。
p {
white-space : pre-wrap;
width : 5 ch ;
border : solid 1 px ;
font-family : monospace;
text-align : center;
}
< p > 0</ p >
上記のサンプルは次のようにレンダリングされる:
最後のスペースは強制改行の前にあり、 かつオーバーフローしないため、 ぶら下がらず、 中央揃えは期待どおりに機能する。
p {
white-space : pre-wrap;
width : 3 ch ;
border : solid 1 px ;
font-family : monospace;
}
< p > 0 0 0 0</ p >
上記のサンプルは次のようにレンダリングされる:
0 0
0
p
が追加された場合、
結果は次のようになる:
0 0
0
強制改行のない行末にある保持されたスペースはぶら下がらなければならないため、 テキスト配置中に行の残りの部分を配置するとき、それらは考慮されない。 終端側へ揃える場合、 これはそのような スペースがオーバーフローし、 行の残りの内容が行端にぴったり揃うことを妨げないことを意味する。 一方で、 強制改行を伴う行末の保持されたスペースは 条件付きで ぶら下がる。 この例では最後の行末のスペースはオーバーフローしないため、 それはぶら下がらず、 したがってテキスト配置中に考慮される。
p {
white-space : pre-wrap;
width : 3 ch ;
border : solid 1 px ;
font-family : monospace;
}
< p > 0 0 0 0</ p >
0 0
最後の行は最後の 0 の前で折り返されない。
なぜなら、条件付きでぶら下がる文字は、
行の内容が収まるかどうかを測定するときに考慮されないためである。
4.1.3. セグメント区切り変換規則
white-space が pre、pre-wrap、break-spaces、 または pre-line の場合、 セグメント区切りは 折りたたみ可能ではなく、 代わりに保持された改行文字(U+000A)へ変換される。
white-space のその他の値では、 セグメント区切りは 折りたたみ可能であり、 次のように折りたたまれる:
- まず、別の折りたたみ可能なセグメント区切りの直後にある 任意の折りたたみ可能なセグメント区切りは 除去される。
-
その後、残っているセグメント
区切りは、
区切りの前後の文脈に応じて、
スペース(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 はソフト折り返し機会がどこで発生するかを完全には定義しないが、 一般的な変種を区別するためにいくつかの制御が提供される:
- line-break プロパティは、行分割制限のさまざまな “厳密さ” レベルを選択できるようにする。
- word-break プロパティは、 どの種類の字母をまとめて分割不能な “単語” として形成するかを制御し、 CJK 文字を非 CJK テキストのように振る舞わせたり、その逆を行ったりする。
- hyphens プロパティは、 ハイフネーションするスクリプトで自動ハイフネーションが単語を分割できるかどうかを制御する。
- overflow-wrap プロパティは、 そうしなければオーバーフローする分割不能な文字列内で、 UA が任意の位置で分割できるようにする。
注記: 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 Group の Language Enablement Indexも参照。 [TYPOGRAPHY] 追加の適切な参考文献に関する助言は大いに歓迎される。
5.1. 字母の分割規則: word-break プロパティ
| 名前: | word-break |
|---|---|
| 値: | normal | keep-all | break-all | break-word |
| 初期値: | normal |
| 適用対象: | テキスト |
| 継承: | yes |
| パーセンテージ: | n/a |
| 算出値: | 指定されたキーワード |
| 正規順序: | n/a |
| アニメーション型: | 離散 |
このプロパティは、
字母間のソフト折り返し機会、
すなわちテキスト行を分割することが “通常” で許容される場所を指定する。
具体的には、隣接する組版字母単位の間に
ソフト折り返し機会が一般に存在するかどうかを制御し、
この目的(のみ)のために、
NU、
AL、
AI、
または ID
Unicode 行分割クラスに属する、字母でない
組版文字
単位を
組版字母単位として扱う。
[UAX14]
これは、空白
(およびその他の空白区切り文字)によって作成される
ソフト折り返し機会
および句読点の周囲のものを支配する規則には影響しない。
(句読点および小書き仮名に影響する制御については line-break を参照。)
別の例として、韓国語には二つの行分割スタイルがある: 任意の二つの韓国語音節の間で分割するもの(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
-
“単語” 内での分割は禁止される:
組版字母単位間
(または
NU、AL、AI、 またはIDUnicode 行分割クラス [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·و·کمی·خط·عربی·และ·ตัวอย่าง·การเขียน·ภาษาไทย·በጽሑፍ፡·ማራዘሙን፡·አንዳንድ፡
従来のコンテンツとの互換性のため、 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
-
すべての組版文字
単位の周囲にソフト折り返し機会がある。
これには、任意の句読文字
または保持された
空白の周囲、
あるいは単語の途中も含まれ、
行分割に対するいかなる禁止も無視する。
これには、
GL、WJ、またはZWJ行分割クラスを持つ文字によって導入されるもの、 または word-break プロパティによって命じられるものも含まれる。 [UAX14] 異なる折り返し機会に優先順位を付けてはならない。 ハイフネーションは適用されない。注記: この値は、端末で通常見られる 行分割規則を発動する。
注記: anywhere は、 保持された空白を 行末から次の行へ折り返すことを、 white-space が break-spaces に設定されている場合にのみ許可する。 なぜなら、それ以外の場合は:保持された空白に効果を及ぼす場合、 white-space: break-spaces では、 連続の最初のスペースの前で分割することを許可する。 これは break-spaces 単独では行わないことである。
CSS は、テキスト折り返し規則において 四つの厳密さのレベルを区別する。 loose、 normal、 および strict の各々について有効な厳密な規則集合は UA に委ねられ、 言語の慣習に従うべきである。 ただし、これら三つのキーワードについて、この仕様は次を要求する:
-
以下の分割は、normal
および loose 行分割において、
表記体系が中国語
または日本語である場合に許可され、
それ以外では禁止される:
-
特定の CJK ハイフン風文字の前での分割:
〜 U+301C, ゠ U+30A0
-
特定の CJK ハイフン風文字の前での分割:
-
以下の分割は、loose 行分割において、
直前の文字が Unicode 行分割クラス
ID[UAX14] に属する場合 (word-break: break-all により、直前の文字がIDとして扱われる場合を含む) に許可され、 それ以外では禁止される:-
ハイフンの前での分割:
‐ U+2010, – U+2013
-
ハイフンの前での分割:
- 以下の分割は、normal および strict 行分割では禁止され、 loose では許可される:
-
以下の分割は、loose において、
表記体系が中国語
または日本語である場合に許可され、
それ以外では禁止される:
-
特定の中点句読記号の前での分割:
・ U+30FB, : U+FF1A, ; U+FF1B, ・ U+FF65, ‼ U+203C, ⁇ U+2047, ⁈ U+2048, ⁉ U+2049, ! U+FF01, ? U+FF1F -
接尾辞の前での分割:
Unicode 行分割クラスPO[UAX14] およびEast Asian Width プロパティ [UAX11]Ambiguous、Fullwidth、 またはWideを持つ文字。 -
接頭辞の後での分割:
Unicode 行分割クラスPR[UAX14] およびEast Asian Width プロパティ [UAX11]Ambiguous、Fullwidth、 またはWideを持つ文字。
-
特定の中点句読記号の前での分割:
注記: 上に列挙した要件は、 CJK テキストにおいてのみ区別を生み出す。 上記の規則のみに一致し、 追加の規則を持たない実装では、 line-break は、 表記体系が 中国語または 日本語 としてタグ付けされていない限り、 CJK 符号位置にのみ影響する。 将来のレベルでは、 他の表記体系および言語の要件が判明するにつれて、 追加の具体的な規則が加えられる可能性がある。
注記: CSSWG は、仕様の将来版において、 高度な出版要件を満たすために、 行分割に対するより細かな制御が必要になる可能性を認識している。
-
U+0021(感嘆符、
!)と 字母(Unicode 一般カテゴリL) の間に行分割機会を導入しないこと。 これにより “!important” という文字列内での分割を防ぐ。 -
U+002F(スラッシュ、
/)と 字母(Unicode 一般カテゴリL) の間に行分割機会を導入しないこと。 これにより “23/Jan/2024” のような日付内での分割を防ぐ。 -
U+007C(縦線、
|)と 字母(Unicode 一般カテゴリL) の間に行分割機会を導入しないこと。 -
U+002D(ハイフンマイナス `-`)と 数字(Unicode 一般カテゴリ
Nd) の間に行分割機会を導入しないこと。 ただし、ハイフンの前の符号位置が字母でも数字でも _ない_ 場合 (Unicode 一般カテゴリLまたはNd)に限る。 これにより、“-13” のような数値の前のマイナス記号の後での分割を防ぎつつ、 たとえば長い URL に現れ得る “ABCD-1234” や “1234-5678” の ハイフン後での分割は許可する。
5.3. ハイフネーション: hyphens プロパティ
ハイフネーションとは、 通常は分割が許可されない箇所で単語を制御された形で分割し、 段落のレイアウトを改善することである。 通常は音節境界または形態素境界で単語を分割し、 多くの場合、分割を視覚的に示す (通常はハイフン 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 | |
| ウイグル語 |
|
|
|
| クリー語 |
|
|
|
ハイフネーションは、 行が有効なハイフネーション機会で分割されるときに発生する。 これは、ハイフネーションが許可される単語内に存在する ソフト折り返し機会の一種である。 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 では、 ­ はソフトハイフン文字を表し、 これはハイフネーション機会を示唆する。
ex
­ ample - auto
- 単語は、条件付きハイフンによって明示的に示されるものに加えて、 言語に適したハイフネーション資源によって自動的に決定される ハイフネーション機会で分割されてもよい。 単語が条件付きハイフン (­ または U+00AD SOFT HYPHEN)を含む場合、 その単語内の他の場所にある自動的な ハイフネーション機会は、 条件付きハイフンを優先して無視されなければならない。 ただし、そのような機会で分割してもなお、 その単語の一部が一行に収まらないほど長い場合は、 自動的なハイフネーション機会を使用してもよい。
正しい自動ハイフネーションには、 分割されるテキストの言語に適したハイフネーション資源が必要である。 したがって UA は、 内容 言語が既知であり、 かつ適切なハイフネーション資源を持つテキストに対してのみ、 自動的にハイフネーションしなければならない。
UA は、特定の単語を自動ハイフネーションから除外するために、 言語に合わせたヒューリスティックを使用してもよい。 たとえば UA は、特定の大文字化および句読点パターンに一致する単語を除外することで、 固有名詞でのハイフネーションを避けようとしてもよい。 そのようなヒューリスティックはこの仕様では定義されない。 (そのようなヒューリスティックは言語によって異なる必要があることに注意すること: たとえば英語とドイツ語では大文字化の慣習が大きく異なる。)
hyphens プロパティの目的において、 何が “単語” を構成するかは UA 依存である。 ただし、単語境界を決定する際には、 インライン要素境界 およびフロー外要素を 無視しなければならない。
条件付きハイフン文字 (U+00AD SOFT HYPHEN など)によって作成された ハイフネーション機会での ハイフネーションによって表示される任意のグリフは、 その文字によって表され、 それに適用されたプロパティに従ってスタイル付けされる。
注記: アラビア文字などの整形スクリプトが ハイフネーションにより単語内で分割を許可される場合、 文字は依然として、その単語が分割されていないかのように整形される。
5.4. オーバーフロー時の折り返し: overflow-wrap(word-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-wrap を overflow-wrap プロパティの 旧来名エイリアスとして扱わなければならない。
5.5. 行分割の詳細
行分割を決定するとき:
- 行分割と双方向テキストの相互作用は、 CSS Writing Modes 4 § 2.4 Applying the Bidirectional Reordering Algorithm および Unicode Bidirectional Algorithm (特に UAX9§3.4 Reordering Resolved Levels)によって定義される。 [CSS-WRITING-MODES-4] [UAX9]
-
保持されたセグメント区切り、
および—white-space 値に関係なく—Unicode 文字のうち
BKおよびNL行分割クラスを持つものは、 強制行分割として扱われなければならない。 [UAX14]注記: そのような強制行 分割の双方向処理上の含意は、 Unicode Bidirectional Algorithmによって定義される。 [UAX9]
-
明示的に別途定義されている場合
(たとえば line-break: anywhere または overflow-wrap: anywhere)を除き、
WJ、ZW、GL、 およびZWJUnicode 行分割クラスに対して定義された行分割挙動は 尊重されなければならない。 [UAX14] -
CSS は、組版文字単位内での
ソフト折り返し機会を決して許可しない。
したがって、
CMおよびSGUnicode 行分割クラスは常に尊重されなければならない。 [UAX14] - 単語 区切り以外の句読点での折り返しを、 それらを使用する表記体系において許可する UA は、 分割点に優先順位を付けるべきである。 (たとえば、スラッシュの後での分割がスペースより低い優先順位を与えられている場合、 “check /etc” という列は "/" と "e" の間で決して分割されない。) そのような不自然な分割を避けるよう注意する限り、 単語 区切り以外の適切な句読点での分割を許可することは推奨される。 これは、特に狭い寸法において、より均一に見える余白をもたらすためである。 UA は、優先順位を割り当てる際に、 包含ブロックの幅、テキストの言語、 line-break 値、 およびその他の要因を使用してもよい: CSS はソフト折り返し機会の優先順位付けを定義しない。 ただし、 word-break: break-all が指定されている場合、 単語区切りの優先順位付けは期待されない。 (この値は、単語区切りでの分割に基づかない 行分割挙動を明示的に要求するためである)—また line-break: anywhere では禁止される。
- フロー外ボックス およびインラインボックス境界は、 フロー内に強制行分割 またはソフト折り返し 機会を導入しない。
- Web 互換性のため、 各置換要素またはその他の不可分 インラインの前後には ソフト折り返し機会がある。 これは、通常ならそれらを抑制する文字、 U+00A0 NO-BREAK SPACE を含む文字に隣接する場合でも同様である。 ただし、 U+00A0 NO-BREAK SPACE を除き、 不可分インラインと、 Unicode GL、WJ、または ZWJ 行分割クラスに属する隣接文字との間には ソフト折り返し機会があってはならない。 [UAX14]
- 行分割時に消える文字 (例: U+0020 SPACE) によって作成されるソフト折り返し 機会については、 その文字を直接含むボックス上のプロパティが、 その機会での行分割を制御する。 二つの文字または不可分 インラインの間の境界によって定義される ソフト折り返し機会については、 二つの文字の最も近い共通祖先上の white-space プロパティが 分割を制御する。 そのような境界における ソフト折り返し機会の決定を どの要素の line-break、word-break、および overflow-wrap プロパティが 制御するかは、このレベルでは未定義である。
- ボックスの最初の文字の前 または最後の文字の後のソフト折り返し 機会については、 分割は、その内容辺と内容の間でボックスを分割するのではなく、 ボックスの直前/直後 (そのマージン辺)で発生する。
- ルビ内/ルビ周辺の行分割は、 CSS Ruby Annotation Layout 1 § 3.4 Breaking Across Linesで定義される。 [CSS-RUBY-1]
- アラビア文字などの整形スクリプトが、 単語内の非強制のソフト折り返し 機会で折り返される場合 (たとえば、 word-break: break-all、 line-break: anywhere、 overflow-wrap: break-word、 overflow-wrap: anywhere、 またはハイフネーションによって分割される場合など)、 文字は依然として、単語がまだ一つであるかのように 整形されなければならない (結合形が選択されなければならない)。
-
予期しないオーバーフローを避けるため、
ユーザーエージェントが、
行分割に語彙的または正書法的解析を必要とする
内容言語について、
たとえば特定の言語の辞書を欠いているために、
必要な解析を実行できない場合、
その表記体系における組版字母単位の組の間に
ソフト折り返し機会があるものと仮定しなければならない。
注記: この規定は、 UA が特定のテキストラン内で単語境界を見つけられないだけでは発動されない。 そのテキストランは単一の分割不能な単語である可能性が十分にある。 これはたとえば、 テキストランがクメール文字(U+1780 から U+17FF)で構成され、 ユーザーエージェントがクメール語の単語境界を決定する方法を知らない場合に適用される。
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-last を auto にリセットする。
値は次の意味を持つ:
- 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-all と text-align-last の両方を justify に設定し、 最後の行も均等割り付けするよう強制する。
- match-parent
-
この値は inherit
と同じように振る舞う
(親の算出値へ算出される)が、
start または end
の継承値が、
親の
direction 値に対して解釈され、
left または right のいずれかの
算出値になる点を除く。
ルート要素に指定された場合は
start に算出される。
text-align 一括指定に指定された場合、 text-align-all と text-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-all が justify に設定されている場合は、 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 によってレンダリングされている。 英語と同様に、 アラビア語は単語間の間隔を調整することで均等割り付けできるが、 ほとんどのスタイルでは、 文字形自体をカリグラフィ的に伸長または圧縮することによっても 均等割り付けできる。 この例では、 上のテキストは伸長された(カシーダ)形およびスワッシュ形の使用によって 行を満たすように拡張され、 下の行は ت と م の間の文字に対して 積み重ねられた組み合わせを使用することでわずかに圧縮されている。 伝統的なカリグラフィ技法を用いることで、 組版者は流れと色調を保ちながら行を均等割り付けでき、 非常に高品質な均等割り付け効果を提供できる。 ただし、これは本質的に非常にスクリプト固有の効果である。
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 は、 記号および句読点を含む均等割り付け機会を扱うために、 特定の文字を再割り当てしたり、 追加の優先順位レベルを導入したりしてもよい。
6.4.3. 拡張不能なテキスト
行のインライン内容を行ボックスの全幅まで伸ばすことができない場合、 それらは text-align-last プロパティで指定されるとおりに 配置されなければならない。 (text-align-last が justify である場合、 それらは 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 : 1 em ; }
< p > abc</ p >
a b c
a b c
したがって UA は、行の右端または末尾端に字間を追加することは 本当にすべきではない [RFC6919]:
a b c
二つの組版文字単位の間の字間は、 実質的に、それら二つの組版文字単位を含む 最も内側の要素に “属する”: (双方向並べ替えの後の) 二つの隣接する組版 文字単位間の総字間は、 それら二つの組版文字単位の間の境界を 含む最も内側の要素によって指定され、 その中でレンダリングされる。 ただし、UA は代わりに、 要素境界での字間を、 それを含む要素に関係する letter-spacing 値を用いて、 一方または他方の組版文字単位に付着させてもよい。
注記: この二次的な挙動は、 Web 互換性上の懸念により、このレベルで許可されている。
p{ letter-spacing : 1 em ; }
< p > a< span > bb</ span > c</ p >
a b b c
a b b c
したがって、letter-spacing の与えられた値は、 それが指定された要素内に完全に含まれる 文字間の間隔のみに影響することが期待される:
p{ letter-spacing : 1 em ; } span{ letter-spacing : 2 em ; }
< p > a< span > bb</ span > c</ p >
a b b c
これはさらに、 単一の文字だけを含む要素に letter-spacing を 適用しても、レンダリング結果には影響しないことを意味する:
p{ letter-spacing : 1 em ; } span{ letter-spacing : 2 em ; }
< p > a< span > b</ span > c</ p >
a b c
字間は RTL 並べ替えの後に挿入されるため、 下の内側の span に適用された字間も同様に効果を持たない。 並べ替え後に "c" は "א" の隣に来ないためである:
p{ letter-spacing : 1 em ; } span{ letter-spacing : 2 em ; }
<!-- abc followed by Hebrew letters alef (א), bet (ב) and gimel (ג) --> <!-- Reordering will display these in reverse order. --> < p > ab< span > cא</ span > בג</ p >
a b c א ב ג
字間調整は、不可視のゼロ幅整形文字 (Unicode Cf カテゴリに属するものなど)を無視する。 間隔は、それらの文字が文書内に存在しないかのように追加されなければならない。
二つの文字間の有効な間隔がゼロでない場合 (均等割り付け、 または letter-spacing の非ゼロ値による)、 ユーザーエージェントは任意合字を適用すべきではない。 すなわち、基本的に正しい字形形成に必要と定義されていない合字である。 ただし、低レベルの font-feature-settings プロパティによって 指定される合字およびその他のフォント機能は、 この規則に優先する。 CSS Fonts Module Level 3 § feature-precedenceを参照。
注記: 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. 要素境界をまたぐ字形形成
二つの組版文字単位を分ける境界を持つ任意のボックスについて、 次のいずれかが真である場合、 テキストの字形形成はインラインボックス境界で分断されなければならない:
- 二つの組版文字単位を インライン軸で分離する margin/border/padding のいずれかが非ゼロである。
- vertical-align が baseline でない。
- 境界が双方向隔離境界である。
整形の実効的な変化がない場合、 または唯一の整形変化がグリフに影響しない場合 (テキスト装飾の適用など)、 テキストの字形形成はインラインボックス境界をまたいで 分断されてはならない。
それ以外の場合でも、 フォント技術の制約を考慮してその場合に合理的かつ可能であれば、 テキストの字形形成はインラインボックス境界をまたいで 分断されるべきではない。
境界をまたぐ字形形成が可能ではあるが合理的でない例は、 グリフを選択するために両側それぞれ 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-align が start で、 text-indent が 5em の場合、 テキストの最初の行はブロック内へ 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'.
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-indent に 3em 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 が そのような追加についてワーキンググループへ知らせることを歓迎する。
p{ text-align : justify; hanging-punctuation : allow-end; }
p{ text-align : justify; hanging-punctuation : force-end; }
allow-end の場合、 最初の行末にある句読点は、ぶら下がらなくても収まるため、 ぶら下がらない。 しかし、force-end が使用された場合、 それは強制的にぶら下がる。 均等割り付けでは、ぶら下げ句読点を除いて行を測定する。 したがって行が拡張されると、句読点は行の外へ押し出される。
8.3. 双方向性と行ボックス
行ボックスの始端 および終端 側は、 行ボックスのインライン基底方向によって決定される。 通常は一致するが、 行ボックスの インライン基底方向は、 包含ブロックまたは 双方向 段落の インライン基底方向とは異なる。 行ボックスのインライン基底 方向は、 text-align-all、text-align-last、text-indent、 および hanging-punctuation—すなわち、その辺に対する 内容の位置および配置—に影響する。 これはインライン内容の整形や順序には影響しない (それらは Unicode Bidirectional Algorithm によって制御され、 CSS Writing Modes によって適用される [UAX9] [CSS-WRITING-MODES-4])。
ほとんどの場合、行ボックスのインライン基底方向は、 その包含ブロックの算出 direction によって与えられる。 しかし、 その包含ブロックが unicode-bidi: plaintext [CSS-WRITING-MODES-4] を持つ場合:
- 双方向段落が (すなわち、その行ボックスが内容を保持する 双方向段落が) 強い方向性を持つ場合、 それに属する行ボックスの インライン基底方向はその方向である。
- 行ボックスが空である場合 (すなわち、不可分インラインも、 改行文字があればそれを除く文字も含まない場合) または強い方向性を持たない場合 (弱い文字または中立文字のみを含む場合)、 そのインライン基底方向は、 直前の行ボックス(存在する場合)から取得される。 あるいは、これが包含ブロック内の最初の行ボックスである場合は、 包含ブロックの direction プロパティから取得される。 (これにより、内容が LTR 基底方向を持つ RTL 行ボックスになることがある。)
<block> が始端揃えの整形済みブロック
(display: block; white-space: pre; text-align: start)
であると仮定すると、
一行おきに右揃えされる:
< block style = "unicode-bidi: plaintext" > français فارسی français فارسی français فارسی</ block >
< 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: テキスト処理の操作順序
この付録は規範的である。
以下のリストはテキスト操作の順序を定義する。 (結果のレイアウトが同じである限り、実装はこの順序に拘束されない。)
- 空白処理 パート I(折り返し前)
- テキスト変換
- 縦中横 [CSS-WRITING-MODES-4]
- テキスト方向 [CSS-WRITING-MODES-4]
- 行ごとに次を適用しながら テキストを折り返す:
- 均等割り付け (これはグリフ選択および/またはテキスト折り返しに影響し、 その手順へ戻ることがある)
- テキスト配置
付録 B: プレーンテキストへの変換
この付録は、プレーンテキストのコピー & ペースト操作の目的において規範的である。
CSS でレンダリングされた文書がプレーンテキスト形式へ変換される場合、 次のことが期待される:
- text-transform プロパティは効果を持たない。
- § 4.1.1 フェーズ I: 折りたたみと変換が適用され、 ブロックの先頭、 または強制行分割の直後にある、 折りたたみ可能な 空白の任意の連続は 除去される。
付録 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 の目的では、 組版文字単位のプロパティは、 次の二つの場合を除き、 その最初の書記素クラスタの 基底文字によって与えられる:
-
Common スクリプトの Enclosing Mark
(
Me) によって形成された書記素クラスタは、 Common スクリプトにおける Other Symbols (So) と見なされる。 それらは置換文字(U+FFFD)と同じ Unicode プロパティを持つと仮定される。 -
Space Separator
(
Zs) を基底として形成された書記素クラスタは、 Modifier Symbols (Sk)と見なされる。 それらは基底と同じ East Asian Width プロパティを持つと仮定されるが、 その他のプロパティは その並び内の最初の結合文字から取得する。
付録 F: 内容表記体系の特定
この付録は規範的である。
ほとんどの言語には好まれる表記体系があるが、
複数を持つものもあり、
多くは一つ以上の外来の表記体系へ転写することもできる。
一般的な例として、ほとんどの言語には少なくとも一つのラテン文字転写があり、
したがってラテン表記体系で書くことができる。
転写されたテキストは通常、その表記体系の組版慣習を採用する:
たとえば、日本語の “romaji” や中国語の Pinyin はラテン文字と単語間スペースを用い、
それに応じてラテン文字の行分割および均等割り付けの慣行に従う。
別の例として、歴史的な表意文字による韓国語
(ko-Hani)
は単語間スペースを用いないため、
現代韓国語ではなく中国語に近い形で組版されるべきである。
HTML または、文書言語で
BCP47 タグを用いて言語を識別し、
内容言語を宣言する任意のものでは、
著者はスクリプトサブタグを用いて、
非典型的な表記体系の使用を曖昧さなく示したり、指示したりできる。
[BCP47]
たとえば、それを本来使用しない言語にラテン表記体系の使用を示すには、
-Latn スクリプトサブタグを追加できる。
例: 日本語ローマ字の場合は ja-Latn。
他の表記体系には他のサブタグが存在する。
ISO の Code for the Representation of Names of Scripts および ISO15924 スクリプトタグレジストリを参照。
[ISO15924]
zh-Latn- ラテン文字転写で書かれた中国語。
ko-Hani- 漢字(中国語表意文字)で書かれた韓国語。
tr-Arab- アラビア文字で書かれたトルコ語。
mn-Cyrl- キリル文字で書かれたモンゴル語。
mn-Mong- 伝統的なモンゴル文字で書かれたモンゴル語。
しかし、BCP47 のスクリプトサブタグは、
単一の表記体系と強く結び付いた言語では通常使用されず、
(実際には推奨されない)
代わりに、他のものが指定されていなければ、
その表記体系が暗黙的に示されることが期待される。
[BCP47]
IANA は、この目的のため、
language subtag
registry の
Suppress-Script フィールドを通じて、
さまざまな言語で最も一般的な表記体系のデータベースを維持している。
注記: 言語タグ付けに関するさらなる助言は、 Internationalization Working Group の “Language tags in HTML and XML” および “Choosing a Language Tag”にある。
表記体系が明示的に示されていない場合、 UA は、行分割や均等割り付けなどの 言語依存の組版挙動について、 宣言された内容 言語の最も一般的な表記体系を仮定すべきである。 ただし、著者が明示的に別の表記体系を宣言している場合、 UA はその表記体系を仮定してはならない。 UA が特定の言語と表記体系の組み合わせについて 言語固有の知識を持たない場合、 それは宣言された表記体系の組版慣習を使用しなければならない (必要であれば別の言語の慣習を仮定する)。 宣言された言語を、仮定された表記体系における慣習として用いてはならない。 それは宣言された表記体系には不適切である。
言語と最も一般的な表記体系との完全な対応関係は、 この文書の範囲外である。 ただし、ユーザーエージェントは少なくとも次を仮定しなければならない:
- 内容 言語が中国語で、 表記体系が未指定である場合、 または任意の 内容言語について、 表記体系が Hant、 Hans、 Hani、 Hanb、 または Bopo ISO スクリプトコードのいずれかとして指定されている場合、 その表記体系は 中国語である。
- 内容 言語が日本語で、 表記体系が未指定である場合、 または任意の 内容言語について、 表記体系が Jpan、 Hrkt、 Hira、 または Kana ISO スクリプトコードのいずれかとして指定されている場合、 その表記体系は 日本語である。
- 内容 言語が韓国語で、 表記体系が未指定である場合、 または任意の 内容言語について、 表記体系が Kore、 Hang、 または Jamo ISO スクリプトコードのいずれかとして指定されている場合、 その表記体系は 韓国語である。
-
表記
体系は、
内容
言語自体が不明である場合、
またはそれが不明な表記体系を明示的に示している場合にのみ、
不明
と見なされる。
注記: 内容 言語が宣言されているときに 表記体系情報が単に省略されているだけなら、 表記体系は暗黙的に示されるのであって、 不明ではない。
付録 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月の勧告候補 草案以降に行われた:
-
line-break: normal において 小書き仮名の前での分割を禁止した。 (Issue 10363)
-
Level 4 から
hanging-punctuation: none規則を 付録 C: 既定の UA スタイルシートへバックポートした。 -
Level 4 の編集上の変更とテキストを同期した。
以下の規範的変更は、 2023年9月の勧告候補 草案以降に行われた:
-
text-align-last の Computed Value 行を修正した。 (Issue 7331)
-
置換要素周辺のソフト折り返し機会を明確化した。 (Issue 9964)
二つの文字 または不可分インライン の間の境界によって定義されるソフト 折り返し機会については、 二つの文字の最も近い共通祖先上の white-space プロパティが 分割を制御する;
以下の規範的変更は、 2023年2月の勧告候補 草案以降に行われた。
-
付録 G: 小書き仮名のマッピングを Unicode 15.0 に更新した。 (Issue 8442)
-
NBSP 以外の調整不能な Unicode 行分割制御は、 不可分インラインに関する本仕様の規則に優先する。 (Issue 8972)
Web 互換性のため、 各置換要素またはその他の不可分 インラインの前後には、 通常ならそれらを抑制する文字に隣接する場合でも、 ソフト折り返し機会がある。
such asincluding U+00A0 NO-BREAK SPACE. ただし、 U+00A0 NO-BREAK SPACE を除き、 不可分インラインと、 Unicode GL、WJ、または ZWJ 行分割クラスに属する隣接文字との間には、 ソフト折り返し機会が あってはならない。 [UAX14]
以下の規範的変更は、 2020年12月の勧告候補以降に行われた。
-
プレーンテキストのインデント習慣に対応するため、 hanging-punctuation: first が U+3000 IDEOGRAPHIC SPACE をぶら下げられるようにした。 (Issue 2462)
-
distribute が単に同じように振る舞うのではなく、 inter-character へ算出されることを定義した。 また、distribute を 旧来値エイリアスとして 実装できるようにした。 これは一部のエンジンにとって容易であり、互換性には影響しないためである。 (Issue 6156, Issue 7322)
-
言語固有のハイフネーション規則が、明示的な ハイフネーション 機会にも適用されることを明確化した。 (Issue 5973)
単語内に ハイフネーション機会を明示的に示す文字がある場合にのみ、 単語はハイフネーションされる。 UA は、適切な言語固有のハイフネーション文字を使用しなければならず、 同じ位置での自動ハイフネーションの場合と同様に、 適切な綴り変更を適用すべきである。
-
match-parent が ルート 要素上で、 主要書字モードに対して算出されるのではなく、 start へ算出されることを定義した。 (Issue 6542)
-
text-transform に関する 著者向け助言を規範的推奨にした。 (Issue 8279)
注記: text-transform プロパティは 表現層にのみ影響する。 意味論上の目的のための正しい大文字・小文字は、 ソース文書に表現されることが期待される。助言: 著者は意味論上の目的で text-transform に依存してはならない。 そうではなく、正しい大文字・小文字および意味論は ソース文書のテキストとマークアップ内に符号化されるべきである。
これに加えて、いくつかの軽微な編集上の修正が行われた。
過去の変更
2020年および2019年の作業草案からその勧告候補までを対象とする 以前の変更一覧、 および 2013年から2020年までのすべてのコメントを対象とする コメント処理状況も参照。