Skip to content

Instantly share code, notes, and snippets.

@MurakamiShinyu
Last active April 14, 2024 03:00
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MurakamiShinyu/8eea74a058cb2a8f1c64b095f8a91bd3 to your computer and use it in GitHub Desktop.
Save MurakamiShinyu/8eea74a058cb2a8f1c64b095f8a91bd3 to your computer and use it in GitHub Desktop.
CSS Text Level 4 を読む(抄訳)

CSS Text Level 4 を読む(抄訳)

CSS Text Module Level 4
W3C Working Draft, 19 February 2024

この文書はCSS Text Level 4を読むための参考として部分的に訳した抄訳です。

この仕様書全体の日本語訳は https://triple-underscore.github.io/css-text-ja.html に公開されているものがあるのでそれも参考になるかもしれません。

目次

1 はじめに

このモジュールは、CSSの組版制御について説明します。つまり、ソーステキストをフォーマットされた、折り返されたテキストに変換するためのCSSの機能です。さまざまなCSSプロパティが、大文字小文字変換、空白の折りたたみ、テキストの折り返し、行分割ルールとハイフネーション、揃えとジャスティフィケーション、スペーシング、インデントに対する制御を提供します。

注:

  • フォントの選択はCSS Fonts Moduleでカバーされている。
  • 下線、強調記号、影などのテキストの装飾に関する機能(以前はこのモジュールの一部でした)は、CSS Text Decoration Moduleでカバーされています。
  • 双方向テキストと縦書きテキストは、CSS Writing Modes Moduleで取り扱われています。

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

このモジュールは、CSS Text Decoration Moduleと共に、Cascading Style Sheets Level 2の16章で定義されているテキストレベルの機能を置き換え、拡張します。

1.2 値の定義

CSSプロパティの値の定義方法について説明。…

1.3 言語と組版

助言:著者は、最高の組版効果を得るために、コンテンツに正確な言語タグを付けるべきです。

多くの組版効果は言語的文脈によって異なります。言語と書記体系の慣習は、行分割、ハイフネーション、ジャスティフィケーション、グリフの選択など、多くの組版効果に影響を与えることがあります。CSSでは、言語固有の組版の調整は、コンテンツ言語が知られている(宣言されている)場合にのみ適用されます。 したがって、より高品質な組版には、著者が文書内のテキストの正しい言語的文脈をUAに伝えることが必要です。…

1.4 文字(characters)と字(letters)

タイポグラフィックな文字(character)単位をテキストの基本単位とします。…

テキストレイアウトにおいて、タイポグラフィックな字(letter)単位はUnicodeのLetterまたはNumber一般カテゴリに属するタイポグラフィックな文字単位です。…

1.5 テキスト処理

CSSはUnicodeに基づいています。…

テキスト処理(空白処理、テキスト変換、行分割など)の際に隣接性を決定するために、インラインボックスの境界と、フロー外要素は無視されます。…

2 テキストの変形

2.1 大文字小文字などの変換:text-transform プロパティ

Value:	none | [capitalize | uppercase | lowercase ] || full-width || full-size-kana
Initial:	none
Applies to:	text
Inherited:	yes

このプロパティは、スタイルの目的でテキストを変換します。これは基本的なコンテンツには影響を与えず、プレーンテキストのコピー&ペースト操作のコンテンツに影響を与えてはなりません。

  • full-width: すべてのタイポグラフィックな文字単位を全角形式にします。文字に対応する全角形式がない場合はそのままにします。この値は、通常、ラテン文字と数字を漢字のように描画するために使用されます。
  • full-size-kana: すべての小書きの仮名を等価の通常の仮名に変換します。この値は、通常、ルビテキストで使用され、著者はすべての小さなカナを大きなカナに描画することを望むことがあります。これは、ルビで使用される通常の小さなフォントサイズでの可読性の問題に対処するためです。

2.1.1 マッピングルール

大文字小文字などの変換のマッピングルールを説明。…

2.2 単語間のスペースの変換:word-space-transform プロパティ

Value:	none | [ space | ideographic-space ] && auto-phrase?
Initial:	none
Applies to:	text
Inherited:	yes

いくつかの言語や書記体系では、異なる区切り文字を使って単語を区切るか、時には見えない文字を使うことがあります。このプロパティは、著者がマークアップを変更することなく、レンダリングを一つのスタイルから別のスタイルに変更することを可能にします。

  • space: この要素の子テキスト内の伸長可能な区切りは、U+0020 SPACE に置き換えられます。
  • ideographic-space: この要素の子テキスト内の伸長可能な区切りは、U+3000 IDEOGRAPHIC SPACE に置き換えられます。
  • auto-phrase: コンテンツ言語が知られていて、ユーザーエージェントがその言語のための言語解析をサポートしている場合、ユーザーエージェントはフレーズの境界を検出する必要があります。単語の区切り文字、他のスペース区切り文字、またはU+200B ZERO WIDTH SPACE文字がその境界にまだ存在しない場合、UAは仮想的な伸長可能な区切りを挿入する必要があります。この値が省略された場合、またはコンテンツ言語が不明である場合、またはユーザーエージェントがその言語のためのフレーズ境界の検出をサポートしていない場合、仮想的な伸長可能な区切りはありません。

伸長可能な区切りは、次のいずれか:

  • U+200B ZERO WIDTH SPACE
  • wbr要素
  • 仮想的な伸長可能な区切り

2.3 操作の順序

複数の変換が適用される場合、次の順序で適用されます:

  1. word-space-transform
  2. capitalize, uppercase, and lowercase
  3. full-width
  4. full-size-kana

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

Value:	normal | pre | pre-wrap | pre-line | <'white-space-collapse'> || <'text-wrap-mode'> || <'white-space-trim'>
Initial:	normal
Applies to:	text
Inherited:	yes

このプロパティは、white-space-collapsetext-wrap-modewhite-space-trimのショートハンドです。これは、次の2つのことを指定します:

  • 空白が折りたたまれるかどうか、およびその方法
  • 行が強制されていないソフトな折り返しの機会で折り返されるかどうか

4 空白の処理と制御文字

ドキュメントのソーステキストには、最終的なレンダリングには関係のないフォーマットが含まれることがよくあります。たとえば、ソースを編集しやすくするためにソースをセグメント(行)に分割したり、タブやスペースなどの空白文字を追加してソースコードをインデントしたりすることがあります。CSSの空白処理は、そのようなフォーマットの解釈を制御するためのものです:ドキュメントをレンダリングする際にそれを保持するか、折りたたむかを制御します。CSSの空白処理(white-space-collapseおよびwhite-space-trimプロパティで制御される)は、レンダリングのためにのみ空白文字を解釈します:それは基になるドキュメントデータには影響を与えません。

制御文字(UnicodeカテゴリCc)は、タブ(U+0009)、改行(U+000A)、復帰(U+000D)およびセグメント区切りを形成するシーケンス以外の制御文字は、可視グリフとしてレンダリングされなければならず、フォントに含まれるグリフが見えない場合はUAが合成しなければならず、それ以外の場合は他の記号(So)一般カテゴリと共通のスクリプトの他の文字と同様に扱われなければなりません。

4.1 空白の折りたたみ:white-space-collapse プロパティ

Value:	collapse | discard | preserve | preserve-breaks | preserve-spaces | break-spaces
Initial:	collapse
Applies to:	text
Inherited:	yes

このプロパティは、空白が折りたたまれるかどうか、およびその方法を指定します。

4.2 空白のトリミング:white-space-trim プロパティ

Value:	none | discard-before || discard-after || discard-inner
Initial:	none
Applies to:	inline boxes and block containers
Inherited:	no

このプロパティは、ボックスの先頭と末尾でのトリミングの動作を指定することを可能にします。

4.3 空白の処理のルール

4.3.1 第1フェーズ:折りたたみと変換

4.3.2 第2フェーズ:トリミングと配置

4.3.3 セグメント区切り変換ルール

white-space-collapsecollapse でない場合、セグメント区切りは折りたたまれません。collapse または preserve-spaces 以外の値(これらをスペースに変換する)の場合、セグメント区切りは代わりに保持された改行(U+000A)に変換されます。

white-space-collapsecollapse の場合、セグメント区切りは折りたたまれ、次のように折りたたまれます:

  • 最初に、他の折りたたまれるセグメント区切りの直後にある折りたたまれるセグメント区切りは削除されます。
  • 残りのセグメント区切りは、その前後のコンテキストに応じてスペース(U+0020)に変換されるか、または削除されます。この操作のルールは、このレベルではUAによって定義されます。

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

Value:	<number [0,∞]> | <length [0,∞]>
Initial:	8
Applies to:	text
Inherited:	yes

5 テキストの折り返し

インラインレベルのコンテンツが行にレイアウトされると、行ボックスをまたいで分割されます。このような分割を行分割と呼びます。行が明示的な行分割コントロール(保存された改行文字など)によって分割される場合、またはブロックの開始または終了によって分割される場合、それは強制行分割です。行がコンテンツの折り返しによって分割される場合(つまり、UAがコンテンツを測定内に収めるために強制行分割を作成する場合)、それはソフト折り返し分割です。インラインレベルのコンテンツを行に分割するプロセスを行分割と呼びます。

テキストが折り返しを許可される場所は、行分割ルールとコントロールによって制御されます。折り返しを許可されるかどうか、および行内の複数のソフト折り返しの機会がどのように優先されるかは、text-wrap-modetext-wrap-stylewrap-beforewrap-afterwrap-insideプロパティによって制御されます。

5.1 折り返しの判断:text-wrap-mode プロパティ

Value:	wrap | nowrap
Initial:	wrap
Applies to:	text
Inherited:	yes

このプロパティは、行が強制されていないソフトな折り返しの機会で折り返されるかどうかを指定します。

5.2 ボックス内での分割の制御:wrap-inside プロパティ

Value:	auto | avoid
Initial:	auto
Applies to:	inline boxes
Inherited:	no
  • auto: 行は、行分割ルールによって許可された分割ポイントでボックス内で折り返すことができます。
  • avoid: ボックス内での行分割が抑制されます:UAは、行内に他の有効な分割ポイントがない場合にのみボックス内で分割することができます。テキストが折り返される場合、行分割の制限はautoの場合と同様に適用されます。
    avoidを持つボックスがネストされていて、UAがこれらのボックス内で分割する必要がある場合、内部のボックス内で分割する前に外部のボックス内で分割する必要があります。

5.2.1 'wrap-inside: avoid' の使用例:フッターの表示

5.3 ボックス間での分割の制御:wrap-before/wrap-after プロパティ

Value:	auto | avoid | avoid-line | avoid-flex | line | flex
Initial:	auto
Applies to:	inline-level boxes and flex items
Inherited:	no

これらのプロパティは、行分割(およびフレックス行分割)の分割機会に対する変更を指定します。

5.4 折り返しの方法の選択:text-wrap-style プロパティ

Value:	auto| balance | stable | pretty
Initial:	auto
Applies to:	block containers hat establish an inline formatting context
Inherited:	yes

折り返しが許可されている場合、このプロパティは、行の折り返しの方法を選択します。レイアウトの速度、品質、スタイル、または安定性のトレードオフを行います。これは、どのソフトな折り返しの機会が存在するかを変更するものではありませんが、UAがそれらの中から選択する方法を変更します。

  • auto: この値は、UAの選好(または最もWeb互換性のある)の折り返しアルゴリズムを選択します。
  • balance: 行の残りの(空の)スペースをバランスよくするために、autoよりも良いバランスが可能な場合に選択される行分割が選択されます。
  • stable: 後続の行のコンテンツが行分割の決定をする際に考慮されないように指定されます。そのため、テキストを編集する際に、カーソルの前のコンテンツが安定したままになります。
  • pretty: UAは速度よりもレイアウトの品質を重視するようにバイアスをかけるべきであり、行分割の決定をする際に複数の行を考慮することが期待されます。

5.5 折り返しの制御:text-wrap ショートハンドプロパティ

Value:	<'text-wrap-mode'> || <'text-wrap-style'>
Initial:	wrap
Applies to:	see individual properties
Inherited:	see individual properties

5.6 行分割の詳細

6 行分割と単語境界

ほとんどの書記体系では、ハイフネーションがない場合、ソフトな折り返しの機会は単語境界のみで発生します。多くの書記体系では、単語を明示的に区切るためにスペースや約物を使用し、ソフトな折り返しの機会はこれらの文字で識別できます。

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

他のいくつかの書記体系では、ソフトな折り返しの機会は、単語境界ではなく、正書法的な音節境界に基づいています。これらのシステムの中には、特にジャワ語やバリ語などのブラーミック系のスクリプトがあり、テキストの分割機会を見つけるために解析が必要です。SA行分割クラスの文字を使用する言語とは異なり、この解析はコンテンツ言語に依存せず、(言語固有の)単語境界の検出や語彙リソースを必要としません。

中国語(および日本語、彝語、そして時には朝鮮語)などの他の言語では、各音節は通常、単一のタイポグラフィックな文字単位に対応し、したがって行分割の慣習では、特定の文字の組み合わせを除いて、どこでも行を分割することができます。さらに、これらの制限の厳格さは、組版スタイルによって異なります。

6.1 単語分割ルール:word-break プロパティ

Value:	normal | break-all | keep-all | manual | auto-phrase | break-word
Initial:	normal
Applies to:	text
Inherited:	yes

このプロパティは、「単語」間と「単語」内のソフトな折り返しの機会を指定します。これは、字(letter)間の分割に焦点を当てています。

  • normal: 単語は通常のルールに従って分割されます。
  • break-all: 単語内での分割が許可されます。
  • keep-all: 単語内での分割が禁止されます:字(letter)間の分割が抑制されます。
  • manual: normalと同じように動作しますが、§6.1.1.1 語彙的単語分割 は実行されない。
  • auto-phrase: normalと同じように動作しますが、この値は、UAに自然なフレーズ(文節)を一緒に保つことを優先するために、言語固有のコンテンツ解析を実行するように指示します。

6.1.1 解析的単語分割

6.1.1.1 語彙的単語分割

東南アジアの言語の期待される通常の動作を提供するために、[UAX14]の行分割クラスSAを持つタイポグラフィック文字単位は、クラスALを持つかのように扱われなければなりません。しかし、ユーザーエージェントは、そのような文字の連続のコンテンツを解析して単語境界を検出し、それぞれの境界をソフトな折り返しの機会として扱わなければなりません。

正書法的分割

正書法的音節に基づいて行分割を行うスクリプト(バリ語など)の場合、UAは正しいポイントを見つけるためにコンテンツを解析し、ソフトな折り返しの機会を挿入するための正しいポイントを見つける必要があります。

6.1.1.3 フォールバック分割

予期しないオーバーフローを避けるために、ユーザーエージェントが行分割に必要な語彙的または正書法的分析を実行できない場合(たとえば、クラスSAの文字で書かれた言語の辞書がないため)、その書記体系のペアのタイポグラフィックな文字単位の間にソフトな折り返しの機会があると仮定しなければなりません。

6.1.2 文節ベースの行分割のユーザーの好みの表現

ユーザーエージェントは、ユーザーの好みに応じて、auto-phraseで説明されている言語固有のコンテンツ解析を有効にすることがあります。このような動作を持つユーザーエージェントは、ユーザーオリジンでword-breakの宣言された値をauto-phraseに設定することで、これを行う必要があります。

6.2 行分割の厳格さ:line-break プロパティ

Value:	auto | loose | normal | strict | anywhere
Initial:	auto
Applies to:	text
Inherited:	yes

このプロパティは、要素内で適用される行分割ルールの厳格さを指定します:特に、折り返しが約物や記号とどのように相互作用するかを指定します。

  • auto: UAは使用する行分割制限のセットを決定し、行の長さに基づいて制限を変えることができます。たとえば、短い行にはより制限の少ない行分割ルールを使用します。
  • loose: 最も制限の少ない行分割ルールを使用してテキストを分割します。通常、新聞などの短い行で使用されます。
  • normal: 最も一般的な行分割ルールを使用してテキストを分割します。
  • strict: 最も厳格な行分割ルールを使用してテキストを分割します。
  • anywhere: すべてのタイポグラフィックな文字単位の周りにソフトな折り返しの機会があります。これには、約物や記号、保存された空白を含むすべてのタイポグラフィックな文字単位の周りにソフトな折り返しの機会があります。また、単語の途中でも折り返しの機会があります。行分割を禁止する文字によって導入された行分割の禁止を無視します。異なる折り返しの機会は優先されません。ハイフネーションは適用されません。

6.3 ハイフネーション:単語内の形態的分割

6.3.1 ハイフネーションの制御:hyphens プロパティ

Value:	none | manual | auto
Initial:	manual
Applies to:	text
Inherited:	yes

6.3.2 ハイフン文字:hyphenate-character プロパティ

Value:	auto | <string>
Initial:	auto
Applies to:	text
Inherited:	yes

6.3.3 ハイフネーションのサイズ制限:hyphenate-limit-zone プロパティ

Value:	<length-percentage>
Initial:	0
Applies to:	block containers
Inherited:	yes
Percentages:	refers to length of the line box

6.3.4 ハイフネーションの文字制限:hyphenate-limit-chars プロパティ

Value:	[ auto | <integer> ]{1,3}
Initial:	auto
Applies to:	text
Inherited:	yes

6.3.5 ハイフネーションの行制限:hyphenate-limit-lines/hyphenate-limit-last プロパティ

Name:	hyphenate-limit-lines
Value:	no-limit | <integer>
Initial:	no-limit
Applies to:	block containers
Inherited:	yes

このプロパティは、要素内の連続するハイフネーションされた行の最大数を示します。no-limit値は、制限がないことを意味します。

Name:	hyphenate-limit-last
Value:	none | always | column | page | spread
Initial:	none
Applies to:	block containers
Inherited:	yes

このプロパティは、要素、カラム、ページ、およびスプレッドの末尾でのハイフネーションの制限を示します。

6.4 オーバーフローの折り返し:overflow-wrap/word-wrap プロパティ

Value:	normal | break-word | anywhere
Initial:	normal
Applies to:	text
Inherited:	yes

7 揃えとジャスティフィケーション

揃えとジャスティフィケーションは、インラインコンテンツが行ボックス内でどのように分布されるかを制御します。

7.1 テキスト揃え:text-align ショートハンド

Value:	start | end | left | right | center | <string> | justify | match-parent | justify-all
Initial:	start
Applies to:	block containers
Inherited:	yes

このショートハンドプロパティは、text-align-alltext-align-last プロパティを設定し、ブロックのインラインレベルのコンテンツが行ボックス内で完全に埋めることができない場合に、そのコンテンツがインライン軸に沿ってどのように配置されるかを説明します。

justify-all または match-parent 以外の値は text-align-all に割り当てられ、text-align-lastauto にリセットされます。

7.2 表の列内での文字ベースの揃え

text-align: <string> による表の列内での文字ベースの揃えについて説明。

7.3 デフォルトのテキスト揃え:text-align-all プロパティ

Value:	start | end | left | right | center | <string> | justify | match-parent
Initial:	start
Applies to:	block containers
Inherited:	yes

助言:制作者は、このプロパティの代わりに text-align ショートハンドを使用するべきです。

7.4 最終行の揃え:text-align-last プロパティ

Value:	auto | start | end | left | right | center | justify | match-parent
Initial:	auto
Applies to:	block containers
Inherited:	yes

このプロパティは、ブロックの最終行または強制行分割の直前の行がどのように揃えられるかを説明します。

autoが指定されている場合、影響を受ける行のコンテンツは、text-align-alljustify に設定されていない限り、text-align-all に従って揃えられます。

text-align-alljustify に設定されている場合、コンテンツは行頭揃えになります。

7.5 ジャスティフィケーションの方法:text-justify プロパティ

Value:	[ auto | none | inter-word | inter-character | ruby ] || no-compress
Initial:	auto
Applies to:	text
Inherited:	yes

このプロパティは、行の揃えが justify に設定されている場合に使用されるジャスティファイの方法を選択します。

  • auto: UAは、パフォーマンスと適切な表示品質のバランスに基づいて、従うべきジャスティファイのアルゴリズムを決定します。
  • none: ジャスティファイが無効になります。
  • inter-word: ジャスティファイは、単語の区切り文字でのみスペースを調整します。
  • inter-character: ジャスティファイは、隣接する各タイポグラフィックな文字単位の間のスペースを調整します。
  • ruby: ジャスティファイは、autoと同じようにスペースを調整しますが、次のような点が異なります:単語の区切り文字とBopomofo文字の間でジャスティファイの機会が無効になります。注:この値は、ルビテキストでの使用を意図しており、合理的なデフォルトの配置を提供します。

7.5.1 テキストの伸長と圧縮

テキストのジャスティファイは、行ボックスの端と端の間の残りのスペースを取り、そのスペースを行ボックス内のコンテンツ全体に均等に分配して、コンテンツが行ボックスを完全に埋めるようにします。ユーザーエージェントは、代わりに負のスペースを分配することができ、通常のスペース条件では収まらないコンテンツを行に配置することができます。

ジャスティファイの機会は、ジャスティファイのアルゴリズムがテキスト内のスペースを変更できるポイントです。ジャスティファイの機会は、単一のタイポグラフィックな文字単位(単語の区切り文字など)によって提供されることがあります。また、2つのタイポグラフィックな文字単位の並置によってジャスティファイの機会が提供されることがあります。ソフトな折り返しの機会の制御と同様に、タイポグラフィックな文字単位がジャスティファイの機会を提供するかどうかは、その親の text-justify の値によって制御されます。同様に、2つの連続するタイポグラフィックな文字単位の間にジャスティファイの機会が存在するかどうかは、それらの最も近い共通の祖先の text-justify の値によって決定されます。

ジャスティファイによって分配されるスペースは、letter-spacing または word-spacing プロパティで定義されたスペースに加えて分配されます。ジャスティファイの機会にスペースが分配される場合、それは word-spacing の場合と同じルールで適用されるべきです。同様に、スペースが2つのタイポグラフィックな文字単位の間のジャスティファイの機会に分配される場合、行内での letter-spacing の場合と同じルールで適用されるべきです。

ジャスティファイのアルゴリズムは、ジャスティファイの機会を異なる優先レベルに分割することができます。同じレベルのジャスティファイの機会は、それらがどのタイポグラフィックな文字単位から生じたかに関係なく、同じ優先度で拡張または圧縮されます。たとえば、2つの漢字の間と2つのラテン文字の間のジャスティファイの機会が同じレベルにあると定義されている場合(これは文字間のジャスティファイスタイルであるため)、それらは異なるタイポグラフィックな文字単位から生じたために異なるように扱われることはありません。このレベルでは、行内でのジャスティファイの機会にスペースを分配する際に、フォントサイズ、文字間隔、グリフの形状、行内での位置など、他の要因がどのように影響を与えるかについては定義されていません。

ユーザーエージェントは、任意のリガチャを有効にしたり、ジャスティファイのテキストを助けるために他のフォント機能(代替グリフやグリフの圧縮など)を使用することができます。この動作は、このレベルのCSSによって制御されるものではありません。ただし、ユーザーエージェントは、複雑なスクリプトを正しく形成するために必要なリガチャを破壊したり、他の機能を無効にすることはできません。

行内にジャスティファイの機会が存在し、テキストの揃えがその行に対して完全なジャスティファイ(justify)に設定されている場合、その行はジャスティファイされなければなりません。

7.5.2 記号と約物の取り扱い

ジャスティファイの機会を決定する際、Unicodeの記号(S*)および約物(P*)クラスのタイポグラフィックな文字単位は、通常、同じスクリプトのタイポグラフィックな文字単位と同じように扱われます(または、文字のスクリプトプロパティがCommonの場合、主要なスクリプトのタイポグラフィックな文字単位として扱われます)。

ただし、タイポグラフィックな伝統によって、記号や約物のジャスティファイの取り扱いに関する追加のルールがある場合があります。そのため、UAは特定の文字を再割り当てしたり、記号や約物を扱うための追加の優先レベルを導入することがあります。

7.5.3 伸長できないテキスト

行ボックスの幅いっぱいに伸長できない行内コンテンツがある場合、それらは text-align-last プロパティで指定されたように揃えられなければなりません。(text-align-lastjustify の場合、それらは中央揃えと同じように揃えられなければなりません。)

7.5.4 カーシブスクリプト

カーシブスクリプト(アラビア語など)の文字間にスペースを挿入してはならない。カーシブスクリプトの文字間にジャスティファイの機会がある場合、UAはその機会を利用してカーシブスクリプトの文字を伸長することができる。そうでない場合、UAはカーシブスクリプトの文字間にジャスティファイの機会がないものとして扱わなければならない。

カーシブスクリプトの文字間にスペースを挿入するために、タトウィール文字を使用するフォントデザインがある。タトウィール文字を使用するUAは、その使用に関するルールを適切に扱わなければならない。タトウィール文字の正しい挿入は、文字の組み合わせ、単語内の位置、行内での位置など、コンテキストに依存する。

7.5.5 auto ジャスティフィケーションの最低要件

  • auto ジャスティファイの場合、この仕様は、ジャスティファイの機会が何であるか、それらがどのように優先されるか、複数のジャスティファイの機会がどのように相互作用するかを定義していません。ただし、次のことが求められます。
    • コンテンツ言語または隣接する記号/約物のタイポグラフィックな伝統によって禁止されていない限り、次の各項目はジャスティファイの機会を提供します。
      • 単語の区切り文字
      • 任意のブロックスクリプト(CJK文字など)のタイポグラフィックな文字単位と他のタイポグラフィックな文字単位の境界
      • 任意のクラスタースクリプト(Thai文字など)のタイポグラフィックな文字単位と他のタイポグラフィックな文字単位の境界
    • すべてのブロックスクリプトに属するすべての文字は同じように扱われ、すべてのクラスタースクリプトに属するすべての文字も同じように扱われます。たとえば、漢字の文字の間のジャスティファイの機会と、漢字の文字の後にハングルの文字が続くジャスティファイの機会の間には区別がありません。

7.6 コンテナ内のテキストのブロックの揃え:text-group-align プロパティ

Value:	none | start | end | left | right | center
Initial:	none
Applies to:	block containers
Inherited:	no

このプロパティは、テキストの揃えを維持しながら、行ボックスのコンテンツをグループとして揃えます。

グループ揃えは、残りのスペースが最も少ない行ボックスを見つけ、その行ボックスの一方または両方の側にその量のスペースをパディングとして追加し、そのコンテンツに残りのスペース内でテキストの揃えを適用することで行われます。同じブロックフォーマットコンテキスト内のすべての子孫のインフロー行ボックスは、最短の残りのスペースを探すときとパディングを追加するときの両方で考慮されます。独立したフォーマットコンテキストを確立する子孫のコンテンツはスキップされます。

8 スペーシング

CSSは、単語間のスペース、文字間のスペース、行の先頭/末尾のパディングに関する追加のスペースを指定するword-spacingletter-spacingline-paddingプロパティを使用して、通常のテキストのスペーシングに対する制御を提供します。また、CJK約物のコンテキストに応じたスペーシングを許可するtext-spacing-trimプロパティと、スクリプトの変わる箇所や約物の周りに追加のスペースを自動的に挿入するtext-autospaceプロパティを使用して、スペーシングに関するコンテキスト制御を提供します。

8.1 単語間のスペース:word-spacing プロパティ

Value:	normal | <length-percentage>
Initial:	normal
Applies to:	text
Inherited:	yes
Percentages:	relative to computed font-size, i.e. 1em

このプロパティは、「単語」間の追加のスペースを指定します。値は以下のように解釈されます。

  • normal: 追加のスペースは適用されません。ゼロに計算されます。
  • <length-percentage>: フォントで定義された固有の単語間のスペースに加えて、追加のスペースを指定します。

8.2 トラッキング:letter-spacing プロパティ

Value:	normal | <length-percentage>
Initial:	normal
Applies to:	inline boxes and text
Inherited:	yes
Percentages:	relative to computed font-size, i.e. 1em

このプロパティは、隣接するタイポグラフィックな文字単位間の追加のスペース(一般的にトラッキングと呼ばれる)を指定します。letter-spacingはバイダイ再配置の後に適用され、カーニングと単語間のスペースに加えられます。有効なジャスティファイのルールに応じて、ユーザーエージェントはテキストをジャスティファイするためにタイポグラフィックな文字単位間のスペースをさらに増減することがあります。

  • normal: 追加のスペースは適用されません。ゼロに計算されます。
  • <length>: タイポグラフィックな文字単位間の追加のスペースを指定します。値は負にすることができますが、実装に依存する制限があるかもしれません。

8.2.1 カーシブスクリプト

カーシブスクリプトに対して文字間のスペースを適用することができる場合、UAはそのような文字の連続に分配される追加のスペースを、その連続に等価な合計の拡張(または圧縮)になるようなカーシブの伸長(または圧縮)の形に変換して適用することができます。それ以外の場合、UAはカーシブスクリプトのテキストをそのカーシブのつながりを壊すことなく拡張することができない場合、そのスクリプトのタイポグラフィックな文字単位のペア間にスペースを適用してはなりません(文字間のスペースの目的で、各単語を単一のタイポグラフィックな文字単位として扱うことになります)。両方の場合、そのような文字間の効果的なスペースはゼロになります。ただし、前者はテキストを伸ばしているという意味を保持します。

8.3 行の先頭/末尾のパディング:line-padding プロパティ

Value:	<length>
Initial:	0
Applies to:	inline boxes
Inherited:	yes

文字間のスペースは、タイポグラフィックな文字単位間のスペースを調整し、行の先頭または末尾には適用されませんが、このプロパティは行の先頭または末尾にのみスペースを調整します。追加のスペースは、行ボックスの先頭または末尾にある最も内側のインラインボックスによってのみ適用され、そのインラインボックスのコンテンツ端と隣接するインラインレベルのコンテンツ(テキストまたはアトミックインライン)の間に挿入されます。この追加のスペースは、ジャスティファイの機会ではありません。

8.4 自動的なコンテキストに応じたスペーシング:text-autospace プロパティ

Value:	normal | <autospace> | auto
Initial:	normal
Applies to:	text
Inherited:	yes

<autospace> = no-autospace |
              [ ideograph-alpha || ideograph-numeric || punctuation ]
              || [ insert | replace ]

同じインラインフォーマットコンテキスト内の同じ行にある隣接する文字間のスペースを制御し、文字クラスベースのルールを使用して、異なるスクリプト間のスペーシングと約物の周りのスペースを自動的に制御することを可能にします。

  • normal: ideograph-alpha ideograph-numericと同じ動作。

  • no-autospace: 自動的なスペースは挿入されません。

  • insert: 指定されたスペースが自動的に挿入されます。すでにスペース文字(Unicode一般カテゴリZ)がある場合は、自動的なスペースが挿入されません。

    insertreplaceのいずれも指定されていない場合、insertと同じ動作になります。

  • replace: 指定されたスペースが自動的に挿入されます。すでにスペース(U+0020)がある場合でも、指定されたスペースが自動的に挿入されます。さらに、スペース(U+0020)が削除されます。他の種類のスペース文字(Unicode一般カテゴリZ)は、insertと同じように自動的なスペースを抑制します。

    注:これは、適切なスペーシングの代わりに簡単に入力できるU+0020を使用しているテキストを修正するためのものです。

  • ideograph-alpha: 表意文字(ideographs=漢字や仮名)と非表意文字(non-ideographic letters)のランの間に追加のスペースを作成します。§ 8.4.1 スクリプト間のスペーシングを参照。

  • ideograph-numeric: 表意文字(ideographs)と非表意数字(non-ideographic numerals)のランの間に追加のスペースを作成します。§ 8.4.1 スクリプト間のスペーシングを参照。

  • punctuation: 言語固有のタイポグラフィックな規則に従って、約物の周りに追加のノーブレークスペースを作成します。

    このレベルでは、要素のコンテンツ言語がフランス語の場合、フランス語のタイポグラフィックなガイドラインで必要な場所に狭いノーブレークスペース(U+202F)とノーブレークスペース(U+00A0)が挿入されます。それ以外の場合、この値は効果がありません。ただし、将来の仕様では、他の言語のための自動的なスペーシングの動作が追加されるかもしれません。

  • auto: ユーザーエージェントは、タイポグラフィックな高品質のスペース値を選択します。異なるプラットフォームで実行される異なるユーザーエージェントは、異なる値を選択するかもしれません。

    注:これらのスペース値はOSプラットフォームの慣習と一致する場合とそうでない場合があります。

このプロパティは、word-spacing および letter-spacing プロパティと加算されます。つまり、文字間のスペースの設定によって追加されるスペースの量(あれば)は、text-autospace によって作成されるスペースに加算されます。同じことがword-spacingにも当てはまります。

要素の境界では、文字間のスペースを追加する量は、その境界を含む最も内側の要素によって決定され、その要素内でレンダリングされます。

8.4.1 スクリプト間のスペーシング

ideograph-alpha および ideograph-numeric の値は、特定の文字クラス間の境界で、それらが直接行内で隣接している場合にスペースを導入します。つまり、その間には非ゼロの marginborderpadding または他の文字(引用符やスペースなど)が挿入されていない場合です。これらのキーワードによって導入されるスペースの量は、CJK文字送り幅の1/8、つまり 0.125ic です。

注:スペースの慣習は変わりますが、値は通常、1/4icから1/8icまでの範囲で、1/4icは金属活字の制限によるもので、1/6icまたはそれ以下は比例組版で一般的です。これらのスペースはデフォルトで挿入されるため(初期値の normal によって)、CSSはその干渉を控えめにするために1/8icを使用しています。このモジュールの将来のレベルでは、スペースの量を制御する機能が導入されるかもしれません。

8.5 CJK約物のスペーシング:text-spacing-trim プロパティ

Value:	<spacing-trim> | auto
Initial:	normal
Applies to:	text
Inherited:	yes

<spacing-trim> = space-all | normal | space-first | trim-start | trim-both | trim-all

(訳注:値 "trim-both" は、"trim-auto" から最近名前が変わったもの)

同じインラインフォーマットコンテキスト内の同じ行にあるCJK約物の周りのスペースを制御し、その位置と行内での隣接する文字に基づいてそれらを半角または全角に設定する一連の文字クラスベースのルールを使用します。

  • space-all: 全角の約物は全角のグリフ(スペースあり)で設定されます。

  • normal: 各行の先頭の全角の開き約物は全角のグリフ(スペースあり)に設定されます。各行の末尾の全角の閉じ約物は、ジャスティファイの前にそれが収まらない場合は半角のグリフ(フラッシュ)に設定されます。それ以外の場合は全角のグリフに設定されます。約物のグリフ間のスペースは§8.5.1 全角約物の詰め で説明するように詰められます。

  • trim-both: 各行の先頭の全角の開き約物は半角のグリフ(フラッシュ)に設定されます。各行の末尾の全角の閉じ約物は半角のグリフ(フラッシュ)に設定されます。約物のグリフ間のスペースは§8.5.1 全角約物の詰め で説明するように詰められます。

  • space-first: ブロックコンテナの最初の行と強制的な行分割後の各行の先頭の全角の開き約物は全角のグリフ(スペースあり)に設定されます。それ以外はnormalと同じです。

  • trim-start: 各行の先頭の全角の開き約物は半角のグリフ(フラッシュ)に設定されます。それ以外はnormalと同じです。

  • trim-all: 各行の先頭の全角の開き約物、全角の閉じ約物、および全角の中黒約物は、行内での位置や隣接する文字に関係なく半角のグリフに設定されます。

  • auto: ユーザーエージェントは、タイポグラフィックな高品質のスペース値を選択します。異なるプラットフォームで実行される異なるユーザーエージェントは、異なる値を選択するかもしれません。

    注:これらのスペース値はOSプラットフォームの慣習と一致する場合とそうでない場合があります。

space-first について:

この値は互換性の要件のために存在します。

この値は、既存の中国語および日本語のコンテンツの一部のフォーマットを管理するために存在します。これらのコンテンツは、trim-both がタイポグラフィックに適切であったはずですが、既に最初の行が space-all と同じように設定されることを期待して書かれています。

具体的には、hanging-punctuation のサポートがUAで当てにできないため、既存のコンテンツ(特にePubコンテンツ)は、text-indent の代わりにU+3000表意空白を使用していますが、段落が約物で始まる場合にはそれを省略して、約物がインデントにかかってぶら下がる効果を得ています。そのため、このようなコンテンツの最初の行に trim-both を使用すると、その行の区別が曖昧になり、その行が新しい段落の最初の行であることが分かりにくくなります。

なお、インデントに全角スペースを使用するこの組版の慣習(常にではなく)は、HTMLとCSSが提供するコンテンツとスタイルの分離に反しています。段落のフォーマットを制御するために、コンテンツを調整するのではなく、hanging-punctuationtext-indent を使用することで、文書ソースのテキストの真の意味を保持し、スタイルシートデザイナーがコンテンツを変更することなく、さまざまなスペース/インデントスタイルを自由に切り替えることができます。例については、§8.5.3 CSSでの日本語段落開始スタイル を参照してください。

さらに、行末の動作は、trim-both ではなく normal および trim-start の値に合わせており、ジャスティファイの前に収まらない場合にのみグリフを詰めるという点で、タイポグラフィックを改善するケースが少なめですが、space-all のレガシーな動作に近いです。

8.5.1 全角約物の詰め

通常、全角文字は、標準の漢字(例:水 U+6C34)と同じ進行幅のグリフを持っています。しかし、多くの全角約物のグリフは、全角のデザインスペースの一部しか占めていません。そのため、そのような約物は常に全角で設定されているわけではありません。text-spacing-trim のいくつかの値は、そのような文字が半角(通常は表意文字の半分の幅)で設定される場合と全角で設定される場合を制御するために、著者に可能性を提供します。

指定されたテキストを設定するために、UAは次のいずれかを行う必要があります。

  • グリフが全角であり、半角で設定する必要がある場合、グリフの空白の半分を切り取る(カーニング)。
  • グリフが半角であり、全角で設定する必要がある場合、グリフにスペースを追加する。

UAは、フォントにOpenTypeのhaltおよびvhal機能が実装されている場合それらを使用して、特定のグリフの必要なトリミングを実行することができます。UAは、グリフの形状を変更することは許容されないため、半角のグリフに切り替えるhwid機能を使用したり、他の半角形に代替したりしてはなりません。

一部のフォントは、全角約物文字に対してプロポーショナルグリフを使用しています。フォントに全角と半角のグリフ形状を区別するためのサポートがない場合(たとえば、フォント機能を通じて)、そのようなプロポーショナルグリフに対しては、与えられた進行幅は同時に全角と半角と見なされます。UAは、これらのグリフにスペースを追加したり削除したりしてはなりません。

一部のフォントには、トリミング(カーニング)ができないほどグリフの空白が小さい全角約物文字があります。UAは、グリフのバウンディングボックス、グリフメトリクス、またはフォント機能を通じて、トリミング(カーニング)がグリフの切り捨て、衝突、または過剰なカーニングを引き起こすと判断した場合、トリミング(カーニング)を行わないことを選択することができます。

text-spacing-trimtrim-all の場合、UAは、それらが現れる文脈に関係なく、通常関連付けられているスペースを詰める必要があります。それ以外の場合、text-spacing-trimspace-all でない限り(またはフォントにプロポーショナル全角約物グリフがある場合)、UAは、次のようにして同じ行に隣接して配置された全角グリフに通常関連付けられているスペースを詰める必要があります:

  • 前の文字が次のいずれかの場合、全角の開き約物を半角に設定します。

    • 全角の開き約物
    • 全角の中点約物
    • 表意空白(U+3000)
    • 同じまたは大きい font-size の全角の閉じ約物
    • Unicode一般カテゴリPsに属する文字

    それ以外の場合は全角に設定します。

  • 次の文字が次のいずれかの場合、全角の閉じ約物を半角に設定します。

    • 全角の閉じ約物
    • 全角の中点約物
    • 表意空白(U+3000)
    • より大きな font-size の全角の開き約物
    • Unicode一般カテゴリPeに属する文字

    それ以外の場合は全角に設定します。

8.5.2 テキストスペーシングの文字クラス

このプロパティのコンテキストでは、次の定義が適用されます。

  • 表意文字(ideographs): 以下の基本文字を持つすべてのタイポグラフィックな文字単位を含みます。
    • U+3041からU+30FFまでのすべての文字(Unicode Punctuation [P*]一般カテゴリに属するものを除く)。
    • CJK Strokes(U+31C0からU+31EF)。
    • Katakana Phonetic Extensions(U+31F0からU+31FF)。
    • Han script propertyを持つすべての文字。
  • 非表意文字(non-ideographic letters): 以下の条件のいずれかに当てはまる場合を除いて、Unicode Letters [L*]およびMark [M*]一般カテゴリに属するすべてのタイポグラフィックな文字単位を含みます。
    • 表意文字として定義されている。
    • [UAX11]によってEast Asian Fullwidth(F)として分類されている。
    • text-orientationプロパティまたはtext-combine-uprightプロパティを使用して縦書きテキストフローで正立している
  • 非表意数字(non-ideographic numerals): 以下の条件のいずれかに当てはまる場合を除いて、Unicode Decimal Digit Number [Nd]一般カテゴリに属するすべてのタイポグラフィックな文字単位を含みます。
    • [UAX11]によってEast Asian Fullwidth(F)として分類されている。
    • text-orientationプロパティまたはtext-combine-uprightプロパティを使用して縦書きテキストフローで正立している
  • 全角開き約物(fullwidth opening punctuation): CJK Symbols and Punctuationブロック(U+3000–U+303F)に属する開き約物文字(UnicodeカテゴリPs)を含みます。また、LEFT SINGLE QUOTATION MARK(U+2018)およびLEFT DOUBLE QUOTATION MARK(U+201C)も含みます。トリミングされる場合、左(横書きテキストの場合)または上(縦書きテキストの場合)の半分がカーニングされます。
  • 全角閉じ約物(fullwidth closing punctuation): CJK Symbols and Punctuationブロック(U+3000–U+303F)に属する閉じ約物文字(UnicodeカテゴリPe)を含みます。また、RIGHT SINGLE QUOTATION MARK(U+2019)およびRIGHT DOUBLE QUOTATION MARK(U+201D)も含みます。また、全角コロン約物および全角ドット約物も含む場合があります(以下参照)。トリミングされる場合、右(横書きテキストの場合)または下(縦書きテキストの場合)の半分がカーニングされます。
  • 全角中点約物(fullwidth middle dot punctuation): MIDDLE DOT(U+00B7)、HYPHENATION POINT(U+2027)、KATAKANA MIDDLE DOT(U+30FB)を含みます。また、全角コロン約物および全角ドット約物も含む場合があります(以下参照)。
  • 全角コロン約物(fullwidth colon punctuation): FULLWIDTH COLON(U+FF1A)およびFULLWIDTH SEMICOLON(U+FF1B)を含みます。
  • 全角ドット約物(fullwidth dot punctuation): IDEOGRAPHIC COMMA(U+3001)、IDEOGRAPHIC FULL STOP(U+3002)、FULLWIDTH COMMA(U+FF0C)、FULLWIDTH FULL STOP(U+FF0E)を含みます。

全角コロン約物と全角ドット約物が全角閉じ約物または全角中点約物に分類されるかどうかは、約物のグリフがどのように描かれているかによります。約物が中央に描かれている場合、中点約物として分類されるべきです。約物が片側(横書きテキストの場合は左側、縦書きテキストの場合は上側)に描かれ、したがってもう片方の半分が空白である場合、約物は閉じ約物として分類され、それに応じてトリミングされます。

UAは、全角コロン約物と全角ドット約物を適切なカテゴリに分類するために、言語の慣習と書き方(横書き対縦書き)およびフォント情報を使用することができます。UAは、必要に応じて任意のカテゴリに追加の文字を追加することができます。

8.5.3 CSSでの日本語段落開始スタイル

日本語には、開き括弧の扱いによって区別される3つの一般的な行頭スタイルがあります。

(JLREQの「行頭の​始め括弧類の​配置方法」

  • ①改行行頭の字下げは全角アキ、折返し行頭は天ツキ
  • ②改行行頭の字下げは全角半アキ、折返し行頭は2分アキ
  • ③改行行頭の字下げは2分アキ、折返し行頭は天ツキ

CSSの次のルールでこれらの日本語の組版スタイルを実現できます。

字下げと同じ位置に括弧を配置し、折り返しは他の行と同じ位置に配置する(①):

p { /* Flush alignment */
  margin: 0;
  text-indent: 1em;
  text-spacing-trim: trim-both; /* 訳注:trim-start でもよい */
}

全ての行で全角幅を保持する(②):

  p { /* Fullwidth alignment */
    margin: 0;
    text-indent: 1em;
    text-spacing-trim: space-all; /* 訳注: normal のほうがよい */
  }

字下げに括弧をぶら下げ、折り返しは他の行と同じ位置に配置する(③):

  p { /* Hanging alignment */
    margin: 0;
    text-indent: 1em;
    text-spacing-trim: trim-both; /* 訳注:trim-start でもよい */
    hanging-punctuation: first;
  }

8.6 文字クラスでのスペーシングのショートハンド:text-spacing プロパティ

Value:	none | auto | <spacing-trim> || <autospace>
Initial:	see individual properties
Applies to:	text
Inherited:	yes

このプロパティは、text-spacing-trimtext-autospace を単一の宣言で設定するためのショートハンドです。値は以下のように定義されます。

  • none: すべてのテキストスペーシング機能をオフにします:text-spacing-trimspace-all に設定し、text-autospaceno-autospace に設定します。
  • auto: text-spacing-trimtext-autospace の両方を auto に設定します。
  • <spacing-trim>: text-spacing-trim を指定された値に設定します。<autospace> の値が指定されていない場合、text-autospace は初期値に設定されます。
  • <autospace>: text-autospace を指定された値に設定します。<spacing-trim> の値が指定されていない場合、text-spacing-trim は初期値に設定されます。

注:normaltext-spacing-trimtext-autospace の初期値であるため、text-spacing: normal は両方を初期値にリセットします。

8.7 要素境界を超えたシェーピング

次のいずれかが真の場合、要素境界でテキストシェーピングを分割する必要があります。

  • インライン軸で2つのタイポグラフィックな文字単位を分離するボックスの境界において、margin/border/paddingのいずれかがゼロでない場合。
  • vertical-alignbaselineでない場合。
  • 境界がバイダイ隔離境界である場合。

テキストシェーピングは、フォーマットに有効な変更がない場合、またはフォーマットの変更がグリフに影響しない場合(テキスト装飾の適用など)に、インラインボックスの境界を超えて分割してはなりません。

それ以外の場合、フォント技術の制限を考慮して合理的で可能な場合にはインラインボックスの境界を超えてテキストシェーピングを分割しないほうがよいです。

9 行端効果

行端効果は、ブロック内の他の行に対する行のインデント(text-indent)と、行の先頭と末尾の端でコンテンツがどのように測定されるか(hanging-punctuation)を制御します。

9.1 最初の行のインデント:text-indent プロパティ

Value:	[ <length-percentage> ] && hanging? && each-line?
Initial:	0
Applies to:	block containers
Inherited:	yes
Percentages:	refers to block container’s own inline-axis inner size

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

each-line および/または hanging キーワードによって指定されていない限り、要素の最初のフォーマットされた行のみが影響を受けます。たとえば、匿名のブロックボックスの最初の行は、その親要素の最初の子要素である場合にのみ影響を受けます。

値は以下のような意味を持ちます。

  • <length>: インデントの量を絶対長として指定します。

  • <percentage>: インデントの量をブロックコンテナの自身の論理幅のパーセンテージとして指定します。

    パーセンテージは、固有サイズの寄与を計算するためには0として扱われる必要がありますが、レイアウトを行う際には常に通常通りに解決されます。

    注:これにより、要素がオーバーフローすることがあります。パーセンテージのインデントと固有サイズの計算を一緒に使用することはお勧めしません。

  • each-line: インデントは、各ブロックコンテナの最初の行と、強制的な行分割後の各行に影響します(ただし、ソフトラップ分割後の行には影響しません)。

  • hanging: 影響を受ける行を反転させます。

9.2 グリフのぶら下げ

行の開始端または末尾の端にあるグリフがぶら下がっている場合、そのグリフは、フィット、整列、またはジャスティファイのために行のコンテンツを測定する際に考慮されません。行の整列/ジャスティファイによっては、マークが行ボックスの外側に配置されることがあります。ぶら下がっているグリフは、固有サイズ(最小コンテンツサイズと最大コンテンツサイズ)の計算およびそれに基づくサイズにも考慮されません。

9.2.1 約物のぶら下げ:hanging-punctuation プロパティ

Value:	none | [ first || [ force-end | allow-end ] || last ]
Initial:	none
Applies to:	text
Inherited:	yes

このプロパティは、約物が行の端にぶら下がるかどうかを決定します。ぶら下がる場合、約物は行ボックスの外側(またはインデント内)に配置されることがあります。

  • 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

9.3 双方向性と行ボックス

行ボックスの開始側と末尾側は、行ボックスのインライン基本方向によって決定されます。通常は一致しますが、行ボックスのインライン基本方向は、行ボックスを含むブロックまたはバイダイ段落のインライン基本方向とは異なります。行ボックスのインライン基本方向は、text-align-alltext-align-lasttext-indent、およびhanging-punctuationに影響します。つまり、そのコンテンツの位置と整列に影響しますが、インラインコンテンツのフォーマットや順序には影響しません。

ほとんどの場合、行ボックスのインライン基本方向は、その含むブロックの計算済みdirectionによって与えられます。…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment