CSS書き方モード レベル3

W3C勧告,

このバージョン:
https://www.w3.org/TR/2019/REC-css-writing-modes-3-20191210/
最新の公開バージョン:
https://www.w3.org/TR/css-writing-modes-3/
編集者ドラフト:
https://drafts.csswg.org/css-writing-modes-3/
以前のバージョン:
テストスイート:
http://test.csswg.org/suites/css-writing-modes-3_dev/nightly-unstable/
課題トラッキング:
トラッカー
GitHub課題
編集者:
Elika J. Etemad / fantasai (招待専門家)
(Google)
以前の編集者:
(アンテナハウス)
(マイクロソフト)
(マイクロソフト)
この仕様への編集提案:
GitHub エディター

公開後に報告されたエラーや問題については、正誤表 をご確認ください。


概要

CSS書き方モード レベル3は、左から右・右から左のテキスト順序や、水平・垂直の向きなど、多様な書き方モードおよびその組み合わせに対するCSSサポートを定義します。

CSSは、構造化文書(例:HTMLやXML)の表示方法を画面や紙などで記述するための言語です。

この文書のステータス

このセクションは、発行時点での本書のステータスを説明します。 他の文書が本書に取って代わる場合があります。 現在のW3Cの公開文書一覧や、この技術報告書の最新改訂版は W3C技術報告書インデックス(https://www.w3.org/TR/)でご確認いただけます。

この文書はCSSワーキンググループによって勧告として公開されました。

この仕様についての議論はGitHub課題が推奨されています。 課題を提出する際は、タイトルに「css-writing-modes」と記載してください。 例:「[css-writing-modes] …コメントの概要…」のようにしてください。 すべての課題やコメントはアーカイブされており、 履歴アーカイブもあります。

コメント処理結果および実装レポートが公開されています。

本文書はW3Cメンバー、ソフトウェア開発者、および他のW3Cグループや関係者によってレビューされ、ディレクターによってW3C勧告として承認されています。 本書は安定した文書であり、参考資料として使用したり他の文書から引用できます。 W3Cの勧告作成の役割は、仕様への注目を集め、その広範な展開を促進することです。 これによりWebの機能性や互換性が向上します。

本文書はW3C特許方針のもとで活動するグループによって作成されました。W3Cは 本グループの成果物に関する公開特許開示リストを管理しています。 そのページには特許の開示手続きについても記載されています。 特許に関する実際の知識を有し、必要な請求項が含まれていると考える個人は、 W3C特許方針第6節に従い情報を開示する必要があります。

本文書は2019年3月1日 W3Cプロセス文書に従って管理されています。

1. 書き方モードの概要

CSS書き方モード レベル3は、左から右(例:ラテン文字やインド系文字)、右から左(例:ヘブライ語やアラビア語)、双方向(例:ラテン文字とアラビア語の混在)、縦書き(例:アジア系文字)など、多様な国際的書き方モードに対応するCSS機能を定義します。

CSSにおける書き方モードは、writing-modedirection、およびtext-orientationプロパティによって決定されます。主にインライン基準方向ブロックフロー方向で定義されます:

インライン基準方向は、コンテンツが行内で並ぶ主要な方向であり、行の「開始」と「終了」がどちら側かを定義します。directionプロパティは、ボックスのインライン基準方向を指定し、unicode-bidiプロパティやテキスト自体の持つ方向性と組み合わせて、行内のインラインレベルのコンテンツの並び順を決定します。

ブロックフロー方向は、ブロックレベルボックスが積み重なる方向、およびブロックコンテナ内の行ボックスが積み重なる方向です。writing-modeプロパティがブロックフロー方向を決定します。

組版モードは、縦書きスクリプトに対して、縦組み特有の組版慣習を適用するかどうかを決定します。 この概念は、縦書きスクリプトの縦組みと、回転した横組みを区別します。

横書きモードは、テキスト行が水平である書き方モード(つまり下方向または上方向のブロックフロー)。 縦書きモードは、テキスト行が垂直である書き方モード(つまり左方向または右方向のブロックフロー)です。

これらの用語と、縦型ブロックフロー(下方向または上方向のブロックフロー)および横型ブロックフロー(左方向または右方向のブロックフロー)は混同しないでください。CSS仕様では混乱を避けるため、後者の用語は使用しません。

書記体系には通常、1つまたは2つの固有の書き方モードがあります。例:

書き方モードのtext-orientationコンポーネントは、グリフの向きを制御します。

書き方モードや縦書きテキストの詳細な解説は、Unicode Technical Note #22 [UTN22]HTML版)を参照してください。

1.1. モジュール間の関係

このモジュールは、unicode-bididirectionの機能([CSS2]の8.6節と9.10節)を拡張・置き換えます。 他のテキスト操作との関係や、テキスト行の設定における本モジュールの機能の相互作用は、CSS Text 3 § テキスト処理の順序で説明されています。

computed values(算出値)は、writing-modedirectiontext-orientationプロパティ(これらのプロパティが適用されない要素にも[CSS-CASCADE-4])は、font-relative lengths(フォント相対長)や、算出されたフロー相対プロパティ(算出値が書き方モードやフォントメトリクスに依存しうる)など、他の無関係なプロパティの算出値にも広く影響を与えることができます。これらは、算出された書き方モードや、書き方モードに依存するフォントメトリクスに基づいて計算されます。

1.2. 値の種類と用語

この仕様は、CSSプロパティ定義の慣例[CSS2])に従っています。 本仕様で定義されていない値型はCSS Values & Units [CSS-VALUES-3]で定義されています。 他のCSSモジュールがこれらの値型の定義を拡張する場合もあります。

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

本仕様で用いられる他の重要な用語・概念については、[CSS2][CSS-TEXT-3]で定義されています。

2. インライン方向と双方向性

ほとんどの文字体系では文字は左から右へ書かれますが、特定の文字体系では右から左に書かれます。特にアラビア語やヘブライ語の文書や、複数言語が混在した文書では、1つの(視覚的に表示される)ブロック内でテキストの方向性が混在する場合があります。この現象は双方向性、略して「bidi」と呼ばれます。

双方向テキストの例:アラビア語の文章の中にラテン系の名前が挿入されている。文章全体は右から左に組版されるが、中央のラテン語部分だけは左から右に組版される。

双方向性

Unicode標準(Unicode Standard Annex #9)では、双方向テキストの正しい順序を決定するための複雑なアルゴリズムが定義されています。このアルゴリズムは、文字特性に基づく暗黙的な部分と、埋め込みや上書きのための明示的制御から構成されます。CSSは適切な双方向レンダリングを実現するためにこのアルゴリズムを利用しています。

CSSでは、directionunicode-bidiプロパティで、埋め込み・分離・上書きの制御を明示的に行うことができます。 テキストの基準方向は文書の構造や意味に依存するため、directionunicode-bidiプロパティは、通常、マークアップ内のbidi情報をCSSスタイルにマッピングする用途で使用するべきです。

HTML仕様([HTML401] 8.2節、[HTML] 14.3.5節)では、HTML要素の双方向性の挙動が定義されています。

文書言語がbidi制御のためのマークアップ機能を提供している場合、著者やユーザーはそちらを優先して使うべきです。それらを上書きするためにCSSルールを指定しないでください。

2.1. 方向指定: directionプロパティ

名前: direction
値: ltr | rtl
初期値: ltr
適用対象: すべての要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定値
標準順序: 該当なし
アニメーション型: アニメーション不可

HTMLユーザーエージェントはCSSスタイリングを無効化できるため、HTML著者は正しい双方向レイアウトを保証するためにHTMLのdir属性や<bdo>要素を使用することを推奨しますHTML文書でdirectionプロパティを使用すべきではありません

このプロパティは、ボックスが確立するbidi段落、埋め込み、分離、上書きのインライン基準方向または方向性を指定します。 (unicode-bidiも参照。) また、テーブルのカラムレイアウトや、 水平overflowの方向、 行内のテキストの標準的な整列方向、その他ボックスのインライン基準方向に依存するレイアウト効果にも影響します。

このプロパティの値の意味は以下の通りです:

ltr
この値はインライン基準方向(bidi方向性)をline-leftからline-rightに設定します。
rtl
この値はインライン基準方向(bidi方向性)をline-rightからline-leftに設定します。

directionプロパティは、unicode-bidiの値がnormalであるインラインボックスに指定しても、双方向再配列に影響しません。なぜなら、双方向アルゴリズムにおいて追加の埋め込みレベルを開かないためです。

directionプロパティは、テーブルカラムボックスに指定しても、カラムは文書ツリー上でセルの祖先ではないため、セルには継承されません。そのため、CSSでは[HTML401] 11.3.2.1節で定義される「dir」属性の継承規則を簡単に再現できません。

2.2. 埋め込みと上書き: unicode-bidiプロパティ

名前: unicode-bidi
値: normal | embed | isolate | bidi-override | isolate-override | plaintext
初期値: normal
適用対象: 全ての要素(詳細は本文参照)
継承: いいえ
パーセンテージ: 該当なし
算出値: 指定値
標準順序: 文法に従う
アニメーション型: アニメーション不可

HTML UAはCSSによるスタイル設定を無効にできるため、HTML作者には、 HTMLのdir属性と<bdo>要素を使用し、 テキストレベルとグループ化レベルのHTML要素型を適切に使い分けることを推奨します。これは、 スタイルシートが存在しない場合にも正しい双方向レイアウトを確保するためです。作者は原則としてHTML文書でunicode-bidiを使用するべきではありません。

通常(すなわち、unicode-bidinormalの場合)、 インラインボックスはUnicode双方向アルゴリズムに対して透過的です。 内容は、ボックスの境界が存在しないかのように並べられます。 unicode-bidiプロパティのその他の値は、 インラインボックスに アルゴリズム内のスコープを作成させ、 テキスト固有の方向性を上書きさせます。

次の参考情報としての表は、ボックス内部および ボックス外部に対するunicode-bidiの影響をまとめています:

インラインボックスにおける非normal値のunicode-bidiの効果
外部
中立
内部 スコープあり embed isolate
上書き bidi-override isolate-override
plaintext plaintext

このプロパティの値の意味(規定)は以下のとおりです:

normal
ボックスは、双方向アルゴリズムに関して追加の埋め込みレベルを 開始しません。インラインボックスでは、 暗黙の並べ替えがボックス境界を越えて機能します。
embed
ボックスがインラインである場合、この値は方向性埋め込みを、双方向アルゴリズムに関して追加の埋め込みレベルを 開始することにより作成します。 この埋め込みレベルの方向はdirectionプロパティによって与えられます。ボックス内部では、 暗黙的に並べ替えが行われます。

この値は、インラインでないボックスには影響しません。

isolate
インラインボックスでは、この値は双方向分離を その内容に適用します。 これは方向性埋め込みに似ています(それに応じて埋め込みレベルも増加します)が、 ブロック境界または強制段落区切りによって中断されないインラインレベルボックスの各シーケンスが、分離 シーケンスとして扱われる点が異なります:
  • シーケンス内の内容は、 独立した段落内にあるかのように並べられ、 その基底方向性はボックスのdirectionプロパティによって指定されます。
  • それを包含する双方向段落内での双方向解決のため、 シーケンスは単一のオブジェクト置換文字(U+FFFC)であるかのように扱われます。
実質的に、ボックス内の内容は ボックスの周囲にある内容による双方向処理の影響を受けず、 ボックスの周囲にある内容も、ボックスの 内容または指定された方向性による双方向処理の影響を受けません。 ただし、ボックス内の強制段落区切りは、引き続き 包含段落内に 対応する区切りを作成します。

この値は、インラインでないボックスには影響しません。

bidi-override
この値は、ボックスの直接のインライン内容を方向性上書きの状態に置きます。 インラインの場合、これは、ボックスが双方向アルゴリズムにおいて方向性埋め込みのように動作することを意味します。 ただし、その内部の並べ替えはdirection プロパティに従って厳密に順番どおりに行われ、双方向アルゴリズムの暗黙部分は 無視されます。 ブロックコンテナでは、上書きは そのすべての内容を囲む匿名インラインボックスに適用されます。
isolate-override
これは、分離という isolateの挙動と、方向性上書きという bidi-overrideの挙動を組み合わせます: 周囲の内容に対してはisolateと同等ですが、 ボックス内ではbidi-overrideが指定されたかのように内容が並べられます。 実質的には、方向性上書き分離シーケンスの内部にネストします。
plaintext

この値はisolateと同様に動作しますが、 Unicode双方向アルゴリズムの処理では、ボックスの各双方向 段落(ブロックコンテナの場合) または分離 シーケンス(インラインの場合)の基底方向性は、 Unicode双方向アルゴリズムの 規則P2およびP3のヒューリスティックに従って決定されます (ボックスのdirectionプロパティを使用するのではありません)。

Unicode双方向アルゴリズムHL3([UAX9])に従い、normal以外の値は、対応するUnicode双方向制御コードをインライン要素の開始・終了時にテキストストリームへ挿入し、段落をUnicode双方向アルゴリズムに渡す前に並べ替えを行います。 (§ 2.4.2 CSS–Unicode双方向制御変換とテキスト並べ替えも参照。)

unicode-bidiによって、 display: inlineボックスの先頭/末尾に挿入される双方向制御コード
unicode-bidiの値 directionの値
ltr rtl
先頭 末尾 先頭 末尾
normal
embed LRE (U+202A) PDF (U+202C) RLE (U+202B) PDF (U+202C)
isolate LRI (U+2066) PDI (U+2069) RLI (U+2067) PDI (U+2069)
bidi-override* LRO (U+202D) PDF (U+202C) RLO (U+202E) PDF (U+202C)
isolate-override* FSI,LRO (U+2068,U+202D) PDF,PDI (U+202C,U+2069) FSI,RLO (U+2068,U+202E) PDF,PDI (U+202C,U+2069)
plaintext FSI (U+2068) PDI (U+2069) FSI (U+2068) PDI (U+2069)
* LRO/RLO+PDFのペアは、 ルートインラインボックスブロックコンテナのもの)にも適用されますが、unicode-bidiのこれらの値がそのブロックコンテナに指定されている場合に限られます。

unicode-bidiプロパティは継承されないため、 bidi-overrideplaintextをブロックボックスに指定しても、子孫ブロックには影響しません。したがって、これらの値はブロックやインラインで、ブロックレベルの構造を含まない場合に使うのが最適です。

unicode-bidiは、directionプロパティには(plaintextの場合でも)影響せず、direction依存のレイアウト計算には影響しません。

Unicode双方向アルゴリズムには埋め込みレベルが125段階までという上限があるため、 unicode-bidiの値(normal以外)を過度に使用しないよう注意する必要があります。 特に、inherit値は、深くネストされたインライン マークアップでは細心の注意を払って使用するべきです。 ただし、一般に ブロックとして表示されることを意図した要素では、unicode-bidi: isolateの設定が、要素を一体として保つために推奨されます。 これは、 displayinlineに変更された場合に備えるためです(以下の例を参照)。

2.3. 双方向テキストの例

次の例は双方向テキストを含むXML文書を示しています。これは重要な設計原則を説明しています:文書言語の設計者は、言語本体(要素や属性)だけでなく、関連するスタイルシートでも双方向性(bidi)を考慮するべきです。 スタイルシートは、bidiのルールを他のスタイルルールと分離して設計し、文書言語のbidi挙動が維持されるように、他のスタイルシートで上書きされないようにする必要があります。

この例では、小文字は本来左から右の文字、大文字は本来右から左の文字を表しています。テキストストリームは論理的な格納順で下記に示されています。

<section dir=rtl>
  <para>HEBREW1 HEBREW2 english3 HEBREW4 HEBREW5</para>
  <para>HEBREW6 <emphasis>HEBREW7</emphasis> HEBREW8</para>
</section>
<section dir=ltr>
  <para>english9 english10 english11 HEBREW12 HEBREW13</para>
  <para>english14 english15 english16</para>
  <para>english17 <quote dir=rtl>HEBREW18 english19 HEBREW20</quote></para>
</section>

これは任意のXMLなので、スタイルシートが書字方向の設定を担います。スタイルシート例:

/* 双方向性のルール */
[dir=rtl] {direction: rtl; unicode-bidi: isolate; }
[dir=ltr] {direction: ltr; unicode-bidi: isolate; }

/* 表示のルール */
section, para  {display: block;}
emphasis       {font-weight: bold;}
quote          {font-style: italic;}

行が長い場合、このテキストの整形例は以下のようになります:

               5WERBEH 4WERBEH english3 2WERBEH 1WERBEH

                                8WERBEH 7WERBEH 6WERBEH

english9 english10 english11 13WERBEH 12WERBEH

english14 english15 english16

english17 20WERBEH english19 18WERBEH

最初の<section>要素は右から左の基準方向のブロック、2番目の<section>要素は左から右の基準方向のブロックです。<para>は親から基準方向を継承するブロックです。 したがって、最初の2つの<para>は右上から、最後の3つは左上から読み始めます。

<emphasis>要素はインラインレベルで、unicode-bidiの値が初期値normalのため、テキストの並び順に影響しません。

一方、<quote>要素は指定された内部方向性で隔離シーケンスを作成します。 その結果、HEBREW18english19の右側に配置されます。

行が折り返される場合、同じテキストの整形例は下記のようになります:

       2WERBEH 1WERBEH
  -EH 4WERBEH english3
                 5WERB

   -EH 7WERBEH 6WERBEH
                 8WERB

english9 english10 en-
glish11 12WERBEH
13WERBEH

english14 english15
english16

english17 18WERBEH
20WERBEH english19

HEBREW18english19より先に読む必要があるため、english19の上の行になります。 前の例の長い行を分割するだけでは正しく表示されません。

また、english19の最初の音節が前の行に収まる場合でも、右から左の文脈内で左から右の単語、またはその逆の単語をハイフネーションするのは通常抑制されます。これは行の途中にハイフンを表示しなくて済むようにするためです。

2.4. 双方向並べ替えアルゴリズムの適用

双方向テキストをサポートするユーザーエージェントは、ブロック境界や 「bidi type B強制段落区切りで途切れないインラインレベルボックスの各シーケンスに対して、Unicode双方向アルゴリズムを適用しなければなりません。 このシーケンスは双方向アルゴリズム上の段落単位を形成します。

2.4.1. 双方向段落の埋め込みレベル

CSSでは、段落の埋め込みレベルは、 UAX9 HL1節に従い、 UnicodeアルゴリズムのP2・P3ステップで示されたヒューリスティックではなく、 段落を含むブロックのdirectionプロパティに従って設定しなければなりません。

ただし、例外が1つあります: 段落を含むブロックの算出unicode-bidi値がplaintextの場合は、HL1の上書きなしで、[UAX9]に記載された通りUnicodeのP2・P3ヒューリスティックを使用します。

2.4.2. CSS–Unicode双方向制御変換とテキスト並べ替え

双方向段落内の文字の最終順序は、 上述のunicode-bidiで説明されている通り双方向制御コードが挿入され、 マークアップが除去され、結果の文字列がラインブレークも含めてスタイル化テキストと同じになるようなプレーンテキスト用Unicode双方向アルゴリズムの実装に渡された場合と同じになります。

ソーステキストにある双方向制御コードも尊重されますが、これは文書ツリー構造と一致するとは限らず、 インラインの分割や双方向開始/終了制御のペアに予期せぬ影響を及ぼす場合があります。

2.4.3. 原子的インライン要素の双方向処理

この処理において、置換要素display: inlineが指定されている場合は中立文字として扱われます。 ただし、そのunicode-bidiプロパティがembedまたはbidi-overrideの場合は、その要素に指定されたdirectionに従う強い文字として扱われます。 (これは、置換要素がインラインテキスト表示にフォールバックした場合でも、周囲のテキストへの双方向効果が置換レンダリングと一貫するようにするためです。)

その他の原子的インラインレベルボックスは常に中立文字として扱われます。

2.4.4. 埋め込み・分離内の段落区切り

インラインボックスが双方向段落境界(例:ブロックや強制段落区切りで分割される)で分割された場合、ボックスの終了時に割り当てられるHL3双方向制御コードは分割箇所の前にも挿入され、開始時のコードは分割箇所の後にも挿入されます。 (つまり、ボックスによって開始された埋め込みレベル、分離、上書きは段落区切りで閉じられ、区切り後に再度開始されます。)

例えば、<BR/>が強制段落区切りの場合、双方向並べ替えは下記の両方で同じです:

<para>...<i1><i2>...<BR/>...</i2></i1>...</para>

および

<para>...<i1><i2>...</i2></i1><BR/><i1><i2>...</i2></i1>...</para>

インライン要素<i1>と<i2>のunicode-bidi値が何であっても同じです。

この挙動は、ボックスツリーにCSSで指定された双方向制御に対してCSSが適用するものであり、 Unicodeの双方向制御文字には適用されません。Unicodeでは双方向段落の終端で制御の効果が終了するよう定義されています。

2.4.5. 並べ替えによるボックス断片化

双方向並べ替えによって、論理的に連続したテキストが分割・並べ替えられる場合があるため、 双方向テキストは、そのようなテキストを含むインラインボックスを分割し、断片を行内で並べ替えることがあります。

各行ボックスに対し、ユーザーエージェントは各インラインボックスの断片を取得し、マージン、ボーダー、パディングを論理順ではなく表示順(ビジュアル順)で割り当てなければなりません。 開始側の断片(そのボックスが初めて現れる行ボックスの端)は開始エッジのマージン、ボーダー、パディングを持ち、 最後の行ボックスの終了側の断片は終了エッジのマージン、ボーダー、パディングを持ちます。 例えば、horizontal-tb書き方モードの場合:

縦書きモードでも同様のルールが適用されます。

box-decoration-breakプロパティを使うことで、この挙動を上書きし、各断片の両端にボックス装飾を描画することもできます。[CSS3-BREAK]

3. 縦書きモード

CSS2.1の双方向テキスト対応の拡張に加え、このモジュールはCSSで縦書きレイアウトを実現するためのルールやプロパティを導入します。

3.1. 縦書きの概要

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

主に横書きでレイアウトされるラテン文字系言語とは異なり、中国語や日本語などアジアの言語は縦書きでもレイアウトできます。下記の日本語の例では、同じテキストが横書きと縦書きで表示されています。横書きの場合、左から右、上から下に読みます。縦書きの場合は上から下、右から左に読みます。 横書きの左端からのインデントは、縦書きにすると上端からのインデントに変換されます。

横書きと縦書きの日本語比較。行は回転するが文字は立ったまま。句点などの一部グリフは、グリフボックスの左下から右上へ位置が変わる。ランニングヘッダーは、ページ上部に横書きのままで配置される場合もある。

縦書きと横書き日本語の比較:iBunkoアプリ(iOS)

中国語と日本語は、行が右から左または上から下に並びますが、モンゴル語や満州語は左から右に並びます。

横書きから縦書きに変えることで、レイアウトだけでなく組版にも影響が出ます。例えば、句読点のグリフ内の配置が横書きから縦書きで変わることがあり、場合によっては代替グリフが使われることもあります。

縦書きテキストがラテン文字など通常横書きの文字を含む場合、表示方法はいくつかあります。例えば、ラテン語の単語を横倒し(90度回転)で表示したり、各文字を立てて表示することもできます:

ヴィルスの辞書定義では、英単語 'virus' を90度時計回りに回転して表示する一方、略語 'RNA' や 'DNA' は縦に並べて立てて表示することがある。

縦書き日本語中のラテン文字例:大辞林Viewer 1.4(iOS)

日付の2桁の数字など、特別なケースではテキストを1つの縦書き文字ボックスに収めてコンパクトに表示することもあります:

MacFanの抜粋では、数字の縦書きレイアウト例が示されている。2桁の月日が横中横ブロックで表示され、年は各文字が立てて並ぶ。英語フレーズ 'for Mac 2011' 内では、日付もラテン文字同様に回転している。

Mac Fan, 2010年12月号 p.49

レイアウトはしばしば縦・横要素が混在します:

雑誌などでは、本文は縦書き、サイドバーや図解は横書きなど、縦横レイアウトが混在することが多い。

縦要素と横要素の混在例

縦書きレイアウトでも双方向テキストの処理が必要です。例えば、アラビア語を時計回りに回転させた場合は下から上に並びます。

3.2. ブロックフロー方向:writing-modeプロパティ

名前: writing-mode
値: horizontal-tb | vertical-rl | vertical-lr
初期値: horizontal-tb
適用対象: テーブル行グループ、テーブル列グループ、テーブル行、テーブル列、ルビベースコンテナ、ルビ注釈コンテナを除く全要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定値
標準順序: 該当なし
アニメーション型: アニメーション不可

このプロパティは、テキストの行を横方向または縦方向にレイアウトするか、ブロックの進行方向を指定します。指定可能な値:

horizontal-tb
上から下へのブロックフロー方向書き方モード組版モードの両方が横書きとなります。
vertical-rl
右から左へのブロックフロー方向書き方モード組版モードの両方が縦書きとなります。
vertical-lr
左から右へのブロックフロー方向書き方モード組版モードの両方が縦書きとなります。

writing-modeプロパティはブロックフロー方向を指定し、 ブロック整形コンテキスト内でブロックレベルボックスの並び順を決定します。 インラインを含むブロックコンテナ内の行ボックスの並び順、 テーブルの行の並び順なども決まります。 行ボックスの積み重ね方向を決定することで、 writing-modeプロパティは 行ボックスの向き(つまり書き方モード)が横書きか縦書きかも決定します。 text-orientationプロパティは、行ボックス内でテキストがどのようにレイアウトされるかを決めます。

置換要素の内容は、writing-modeによって回転しません。 例えば画像や<iframe>などの外部コンテンツは立ったまま表示され、標準オブジェクトサイズ(300px×150px)も再方向付けされません。 ただし、テキストを含む埋め込み置換コンテンツ(MathMLやフォーム要素など)は、 UAがその置換コンテンツの縦書きをサポートしていれば、要素のwriting-modeと行の向きに合わせて調整されるべきです。

以下の例では、画像(2)に挟まれた2つのブロック要素(1と3)が、さまざまなフロー書き方モードで表示されています。

横書きモード(writing-mode: horizontal-tb)の図:

横書きレイアウトの図:ブロック1、2、3が上から下に積み重ねられている

東アジアで一般的な右から左の縦書きモード(writing-mode: vertical-rl)の図:

右から左の縦書きレイアウトの図:ブロック1、2、3が右から左へ並んでいる

満州語・モンゴル語で使われる左から右の縦書きモード(writing-mode: vertical-lr)の図:

左から右の縦書きレイアウトの図:ブロック1、2、3が左から右へ並んでいる

次の例では、一部のフォームコントロールが vertical-rl書字モードのブロック内にレンダリングされます。フォームコントロールは、 その書字モードに合わせてレンダリングされます。

<style>
  form { writing-mode: vertical-rl; }
</style>
...
<form>
<p><label>姓名 <input value="艾俐俐"></label>
<p><label>语言 <select><option>English
                       <option>français
                       <option>فارسی
                       <option>中文
                       <option>日本語</select></label>
</form>

縦書きレイアウトのスクリーンショット:input要素は上から下に長く配置され、内容は縦組みモードで表示される。ラベルも外側と揃う。ドロップダウン選択コントロールは、その後(ブロックの後端方向)に横スライドして表示され、横書きでは下方向に表示される。

ボックスが親ボックス(display: contentsを持たない最も近い祖先)と異なるwriting-mode値を持つ場合:

他のすべての継承CSSプロパティと同様に、 writing-modeプロパティも、ソース文書内に (リンクされたものではなく)インライン化されたSVG要素に継承されます。 これは、例えば、 水平フロー専用に設計されたSVG画像が垂直フロー文書に埋め込まれた場合、意図しない副作用を引き起こす可能性があります。

作者は次の規則を追加することで、これを防ぐことができます:

svg { writing-mode: initial; }

3.2.1. 廃止されたSVG1.1 writing-mode

SVG1.1 [SVG11]では追加の値:lrlr-tbrlrl-tbtbtb-rlが定義されています。

これらの値はSVG1文書以外の文脈では廃止されており、SVG以外のUAでは任意の対応となります。

3.2.1.1. CSS構文でSVG1.1 writing-mode値をサポートする

UAがCSS文脈でこれらの値をサポートしたい場合、以下のように算出してください:

廃止されたSVG1.1 writing-mode値の現代CSSへのマッピング
指定値 算出値
lr horizontal-tb
lr-tb
rl
rl-tb
tb vertical-rl
tb-rl

SVG1.1の値はCSS writing-modeの旧仕様にも存在していましたが、本仕様により廃止されています。 その改訂で追加されたtb-lr値はvertical-lrで置き換えられました。

3.2.1.2. 表示属性でSVG1.1 writing-mode値をサポートする

レガシーコンテンツの表示属性対応や古いクライアントへの対応のため、SVG UAは以下のスタイルルールをUAのデフォルトスタイルシートに追加する必要があります:

@namespace svg "http://www.w3.org/2000/svg";
svg|*[writing-mode=lr], svg|*[writing-mode=lr-tb],
svg|*[writing-mode=rl], svg|*[writing-mode=rl-tb] {
  writing-mode: horizontal-tb; }
svg|*[writing-mode=tb], svg|*[writing-mode=tb-rl] {
  writing-mode: vertical-rl; }
CSS構文で前方・後方互換SVGコンテンツを作成したい場合は、CSSの前方互換パースルールを利用できます。例:
svg|text { writing-mode: tb; writing-mode: vertical-rl; }

4. インラインレベルの整列

異なる種類のインラインレベルコンテンツを同じ行に配置する場合、コンテンツのベースラインやvertical-alignプロパティの設定によって、行ボックスの横方向(転置方向)の整列方法が制御されます。 この節ではベースラインとは何か、どのように見つけるか、vertical-alignプロパティと組み合わせてインラインレベルコンテンツの整列を決定する方法について説明します。

4.1. ベースラインの概要

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

ベースラインとは、行ボックスのインライン軸上で、個々のグリフが整列される線です。ベースラインはフォント内のグリフ設計の指針となり(例えば、ほとんどのアルファベットグリフはアルファベットベースラインに揃えて設計される)、異なるフォントやサイズのグリフを組版するときの整列基準にもなります。

2つのフォントサイズのアルファベットテキスト、ベースラインとemボックスの図

2つのフォントサイズのアルファベットテキストとベースライン・emボックス

書記体系によって好まれるベースラインテーブルが異なります。

ラテン文字はアルファベットベースラインを好み、ほとんどの文字はその上に乗るが、一部は下にデセンダーが垂れる。インド系文字はグリフ形状が水平線から吊るされているように見えるため、吊りベースラインで組版されることがある。漢字系は四角に収められるので下部で揃える傾向がある。

各書記体系で好まれるベースライン

良く設計されたフォントにはベースラインテーブルがあり、フォントの設計座標空間内で1つ以上のベースライン位置を示します。(設計座標空間はフォントサイズに合わせてスケーリングされます。)

混植フォントではグリフが座標空間内で調和するよう配置され、ベースラインテーブルもグリフ形状に合わせて構築され、各ベースラインは対応する書記体系のグリフに合わせて配置されます。

ベースラインテーブルはフォントのプロパティであり、各ベースライン位置はフォント内の全グリフに適用されます。

横書き・縦書きの整列用に異なるベースラインテーブルが提供される場合があります。UAは縦組版モードでは縦ベースラインテーブル、その他は横ベースラインテーブルを使うべきです。

4.2. テキストベースライン

本仕様では、以下のベースラインのみ考慮します:

alphabetic
アルファベットベースライン。通常はラテン大文字グリフの下部に揃います。
central
中央ベースライン。通常はemボックスの中心を横切ります。フォントにこのベースラインがない場合は、ascender(over)とdescender(under)エッジの中間とみなします。

組版モードでは、中央ベースラインが、 text-orientationmixedまたはuprightのとき支配的ベースラインになります。 それ以外はアルファベットベースラインが使われます。

今後のCSSモジュールでベースラインについてさらに詳細に扱い、他の支配的ベースラインや整列オプションも選択可能になる予定です。

4.3. 原子的インラインベースライン

原子的インライン(inline-block、inline-table、置換インライン要素など)にベースラインがない場合、UAは以下のようにベースラインテーブルを合成します:

alphabetic
アルファベットベースラインはunderマージンエッジにあるものとします。
central
中央ベースラインはボックスのunderoverマージンエッジの中間とします。

vertical-alignプロパティ([CSS2])は、inline-tableやinline-blockボックスのベースラインを一部例外付きで定義します。

4.4. ベースライン整列

支配的ベースライン変更される可能性があり、その変化はタイポグラフィモードに基づきます) は、CSSで次の2つの場合の整列に使用されます:

5. 縦書きテキストレイアウトの概要

各書記体系には1つ以上の固有の書字方向があります。現代の文字体系は次の3つの方向カテゴリに分類できます:

横書きのみ
横方向のみ固有の書字方向を持つ文字体系。 例:ラテン、アラビア、ヘブライ、デーヴァナーガリー
縦書きのみ
縦方向のみ固有の書字方向を持つ文字体系。 例:モンゴル、パスパ文字
両方向型
縦・横両方の固有書字方向を持つ文字体系。 例:漢字、ハングル、日本語かな

縦書きスクリプトとは、固有の縦方向を持つ文字体系です。 すなわち、縦書きのみまたは両方向型のいずれかです。 横書きスクリプトは、固有の横方向を持つ文字体系です。 すなわち、横書きのみまたは両方向型のいずれかです。 (固有の書字方向による文字体系の分類については付録A参照。)

この区分のヴェン図は、'vertical'と'horizontal'の2つの円があり、重なった部分が両方向型、横書きのみ・縦書きのみはそれぞれの円の排他的領域になる。

現代の組版システムでは、すべてのグリフが横方向に割り当てられ、横書きテキストレイアウト時に使用されます。 縦書きでレイアウトするには、UAがテキストを横方向から変換する必要があります。この変換が両方向型変換であり、2種類あります:

rotate
グリフを横方向から縦方向に回転する グリフを横から縦に回転する
translate
グリフを横方向から縦方向に平行移動する グリフを横から縦に平行移動する

縦方向の固有書字方向を持つ文字体系には、固有の両方向型変換があり、縦書きで正しく向きます。CJK(中国語/日本語/韓国語)文字の多くはtranslate(常に立てて表示)されます。他の文字体系(モンゴルなど)はrotate(回転表示)されます。

固有の縦方向を書字方向に持たない文字体系は、回転(横倒し表示)もしくは平行移動(立てて表示)どちらでも可能です。どちらの変換を使うかは、用途に応じたスタイルの選択であり、正誤の問題ではありません。 text-orientationプロパティのmixedupright値で、横書きのみテキストの回転と平行移動を指定できます。

5.1. テキストの向き指定:text-orientation プロパティ

名前: text-orientation
値: mixed | upright | sideways
初期値: mixed
適用対象: テーブル行グループ、行、列グループ、列を除く全要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定値
標準順序: 該当なし
アニメーション型: アニメーション不可

このプロパティは行内テキストの向きを指定します。 現行の値は縦組版モードでのみ効果があり、 横組版モードのボックスには効果がありません。

各値の意味:

mixed

縦書きモードでは、typographic character units(横書きのみ文字体系)は横倒し表示され、標準の横書き方向から90°時計回りに回転します。typographic character units(縦書き文字体系)は固有の向きで表示されます。 詳細は縦書き方向参照。

この値は主に縦書き文字が主体のレイアウトで使われます。

upright

縦書きモードでは、typographic character units(横書きのみ文字体系)は立てて表示され、標準の横書き方向のまま縦に配置されます。typographic character units(縦書き文字体系)は固有の向きで、通常通りにグリフ整形されます。 詳細は縦書き方向参照。

この値はused valueとしてdirectionltrにし、双方向並べ替えの際はすべての文字を強いLTRとして扱います。

注記: 影響を受けるのは使用値であり、 算出値ではありません。 これはdirectionに対するもので、 これによりrtlは、 この方向指定の上書きが適用されない子孫 (横書きインラインブロックの内容など) へ適切に継承されます。

sideways

縦書きモードでは、すべてのテキストが横倒し表示され、横書きレイアウトのように90°時計回りに回転します。

text-orientation: mixed text-orientation: upright text-orientation: sideways
mixed upright sideways

text-orientationの値(writing-modevertical-rlの場合)

このプロパティの値を変更すると、インラインレベルの整列に影響することがあります。詳細はテキストベースラインを参照してください。

UAは互換性維持のため、必要に応じてsideways-rightsidewaysに算出してもよいです。

現時点では主要な実装ではupright組版でRTL文字の自動LTR扱いはサポートされていません。 この場合、著者は下記のようにunicode-bididirectionを明示指定する必要があります:
.vertical-upright-hebrew {
    writing-mode: vertical-rl;
    text-orientation: upright;
    unicode-bidi: bidi-override;
    direction: ltr;
}

5.1.1. 縦組みとフォント機能

vertical-rlおよびvertical-lr モードでテキストを組版する場合、テキストは以下のいずれかで表示されます:

立てて表示(upright typesetting)
typographic character unitsは縦行内で個々に立てて表示され、縦用フォントメトリクスを使います。 UAはフォントに縦メトリクスがない場合、縦メトリクスを合成する必要があります。 (本仕様ではその合成ヒューリスティクスは定義しません。) また、縦組み用のフォント機能(代替グリフや他の変形など)も利用しなければなりません。 (例:OpenTypeのvert機能は有効化する必要あり。) さらに、アラビア語など横書き草書文字体系の文字は、立てて表示の場合は孤立形で整形されます。

立てて表示でも一部グリフは回転表示すべきです。 例:ダッシュや括弧などはインライン軸に合わせて向きを調整します。 OpenTypeでは通常グリフ置換で処理しますが、すべてのコードポイントに代替グリフがあるとは限りません。 (東アジアフォントは東アジアコードポイントに代替を持ちますが、西欧フォントには縦組み機能がほとんどなく、東アジアフォントも西欧コードポイントの縦置換は持たないのが一般的です。) Unicodeではどの文字が横倒し表示(sideways)すべきかをSVO属性としてこのデータファイルで公開しましたが、現行[UAX50]改訂では廃止されています。

typographic character units[UAX50]TrまたはTu分類の場合、縦組み時の代替グリフまたは位置調整が期待されます。 Tr 文字について、フォントに縦用代替グリフがない場合は、UAは(必須ではないが)[RFC6919]に従って不足グリフを横倒し表示等で合成してもよいです。

横倒し表示(sideways typesetting)
typographic character unitsは、立てて表示の向きから90°時計回りに回転したランとして横メトリクス・横組み処理を使い、縦組み機能は使いません。 ただし、縦行内横倒しテキスト用にフォントに対応機能がある場合(例:筆運びや位置調整など)、それらは利用されます。 (例:提案されているvrtr OpenTypeフォント機能など。)

5.1.2. 混合縦書き方向

[UAX50]は、混合方向の縦書きテキストのデフォルトグリフ方向を示すVertical_Orientationプロパティを定義しています。 text-orientationmixedの場合、 UAは各typographic character unit(組版文字単位)の方向を Vertical_Orientationプロパティに基づいて決定しなければなりません。プロパティがUTuTrの場合は立てて表示し、Rの場合は横倒し表示(横向きから90度時計回りに回転)となります。

UAX50は縦書き文脈で-90°回転するスクリプトには対応していないため、 mixed方向では正しく組版されません。 sideways-lr値(Level 4)ではこれらのスクリプトを正しく表示できます。

OpenTypeのvrt2機能は混合方向組版用ですが、CSSでは使用されません。 グリフの方向決定はフォント設計者に委ねられています。 CSSは代わりに[UAX50]に従い、必要に応じてグリフを横倒しまたは立てて表示します。

5.1.3. 廃止: SVG1.1 glyph-orientation-verticalプロパティ

名前: glyph-orientation-vertical
値: auto | 0deg | 90deg | 0 | 90
初期値: n/a
適用対象: n/a
継承: n/a
パーセンテージ: n/a
算出値: n/a
標準順序: n/a
Animatable: n/a

一部のSVGユーザーエージェントは、廃止されたSVG glyph-orientation-verticalプロパティを含む文書を処理する必要があります。 このプロパティはautoキーワードおよび<angle><integer>(90°の倍数)値を受け付けるよう定義されていました。 このプロパティへの対応は任意ですが、 対応するUAはglyph-orientation-verticaltext-orientationのショートハンドとして以下のようにエイリアスしなければなりません:

ショートハンドglyph-orientation-verticalロングハンドtext-orientation
auto mixed
0deg upright
0 upright
90deg sideways
90 sideways

UAはglyph-orientation-verticalプロパティに対するその他の値はすべて無視し、無効として扱わなければなりません。 またglyph-orientation-horizontalプロパティ全体も無効として扱います。

注: 180deg270deg、ラジアン・グラジアン値、 およびglyph-orientation-horizontalプロパティは、 既知の利用ケースや大量の依存コンテンツがないためCSSの一部ではなく、SVGからも除外されています。

6. 抽象ボックス用語

CSS2.1 [CSS2]はCSSのボックスレイアウトモデルを 詳細に定義していますが、 対象はhorizontal-tb書字モードのみです。レイアウトは horizontal-tb以外の書字モードでも同様ですが、方向 および寸法に関するCSS2.1の用語は抽象化し、 適切に対応付け直す必要があります。

この節では、他の書字モードにおけるボックスレイアウトを定義し、 将来の仕様がレイアウト の概念を抽象的に定義するための用語を提供するために、抽象的な方向および寸法に関する用語と それらの対応付けを定義します。(次の節では、これらを CSS2.1のレイアウト計算に適用する方法と、直交フローを処理する方法を説明します。) これらの抽象的な対応付けはテキストの挙動に由来しますが、 行ボックスを一つも含まないボックスにも存在します。 これらはwriting-modeおよびdirectionプロパティの値から直接算出されます。

CSSには3組の方向用語があります:

物理
ページを基準に解釈され、書字モードには依存しません。 物理 方向は、、およびです。
フロー相対
内容のフローを基準に解釈されます。 フロー相対方向は始端および 終端、 または寸法も曖昧である場合はブロック始端ブロック終端インライン始端、およびインライン終端です。
行相対
行ボックスの向きを基準に解釈されます。 行相対方向は行左行右行上、および行下です。

物理寸法は、および高さであり、 それぞれx軸水平寸法)およびy軸垂直寸法)に沿った測定に 対応します。抽象寸法は、フロー相対用語と 行相対用語のどちらでも同一であるため、 これらの用語の集合は1つだけです。

注記: [CSS3-FLEXBOX] では、フレックス相対用語も定義しており、 これらはフレックスレイアウトの説明に使用されます。

6.1. 抽象寸法

抽象寸法は以下の通り定義されます:

ブロック寸法
行内のテキストの流れに対して垂直の寸法。すなわち、横書きでは縦方向寸法、縦書きでは横方向寸法
インライン寸法
行内のテキストの流れに平行な寸法。すなわち、横書きでは横方向寸法、縦書きでは縦方向寸法
ブロック軸
ブロック寸法の軸。 横書きではy軸、 縦書きではx軸
インライン軸
インライン寸法の軸。横書きではx軸、縦書きではy軸
ブロックサイズ
論理高さ
ブロック寸法での測定値。 横書きでは物理的な高さ(縦方向寸法)、縦書きでは物理的な幅(横方向寸法)を指します。
インラインサイズ
論理幅
インライン寸法での測定値。 横書きでは物理的な幅(横方向寸法)、縦書きでは物理的な高さ(縦方向寸法)を指します。

6.2. フロー相対方向

フロー相対方向block-startblock-endinline-startinline-endは、ページ上のコンテンツの流れに対して定義されます。 LTRhorizontal-tb書き方モードでは、それぞれ上、下、左、右方向に対応します。 定義は以下の通りです:

block-start
ブロックフロー方向において、より早く現れる側。writing-modeプロパティで決定されます。 horizontal-tbモードでは物理的な上、 vertical-rlでは右、vertical-lrでは左です。
block-end
block-startの反対側。
inline-start
インライン基準方向のテキストが始まる側。 direction値がltrの場合はline-left側、 direction値がrtlの場合はline-right側。
inline-end
startの反対側。

文脈的に明確または両方の意味を含む場合、 startendblock-start/inline-startおよび block-end/inline-endの代わりに使うことがあります。

block-startblock-end側はwriting-modeプロパティだけで決まりますが、 inline-startinline-end側は writing-modeプロパティだけでなく directionプロパティにも依存します。

英語テキストレイアウトにおける物理/論理用語の対応
中国語テキストレイアウトにおける物理/論理用語の対応

6.3. 行相対方向

行方向は、行ボックスの論理的「上」(アセンダー側)がどちらかを決定します。 writing-modeプロパティによって決まります。 通常、行相対の「上」はblock-start側に対応しますが、常にそうとは限りません。 モンゴル語組版(vertical-lr モード)では、行相対の「上」はblock-end側に対応します。 そのため、区別された用語が必要です。

モンゴル語と英語の混植例

主にモンゴル語の文書(上図)は、縦行が左から右へ積み重なり、ラテン文字はグリフの上部が右側を向きます。これによりモンゴル語と同じインライン方向(上から下)で流れ、他の東アジアの縦書き(右から左に積み重なる)と同じ向きになりますが、グリフの上部が行スタックの下側を向くため、英語段落では上下逆転します。(モンゴル語テキストレイアウト図参照)

'vertical-align: top'のようなものを対応付けるための行相対の“上”と“下”に加えて、 CSSではtext-align: leftのようなものを対応付けるため、行相対の “左”と“右”を参照する必要もあります。 したがって、4つの行相対方向があり、 行の 向きを基準として次のように定義されます:

over または line-over
名目上、行ボックスのアセンダー側、すなわち「上」側。(通常オーバーラインが描画される側。)
under または line-under
overの反対側。行相対の「下」、デセンダー側。(通常アンダーラインが描画される側。)
line-left
行ボックスの「左」側。名目上、LTRテキストが始まる側。
line-right
行ボックスの「右」側。名目上、RTLテキストが始まる側。(line-leftの反対側。)

物理方向と行相対方向の厳密な対応については以下の表を参照してください。

行方向コンパス

horizontal-tbでの行方向

縦書きでの典型的な方向

vertical-rlおよびvertical-lrでの行方向

立てて表示されたグリフのベースラインは上中央から垂直に描画される

立てて表示グリフの縦ベースライン

text-orientation: uprightの場合、 ベースラインは垂直方向になり、フォントの縦ベースラインが使われるか、フォントが提供しない場合は合成されます。

ベースラインが垂直なので、上記mixedsidewaysの定義も適用されます。つまり、line-overは右、line-underは左です。

この挙動はOpenTypeなどのフォントシステムと一致しており、縦メトリクスでアセンダーは右、デセンダーは左と定義されています。

6.4. 抽象-物理マッピング

以下の表は抽象-物理マッピングの概要です(useddirectionwriting-modeに基づく):

抽象-物理マッピング
writing-mode horizontal-tb vertical-rl vertical-lr
direction ltr rtl ltr rtl ltr rtl
block-size height width
inline-size width height
block-start top right left
block-end bottom left right
inline-start left right top bottom top bottom
inline-end right left bottom top bottom top
over top right
under bottom left
line-left left top
line-right right bottom

注: used directionは、算出writing-modetext-orientationに依存します。 縦書きモードでは、 text-orientation値がuprightの場合、usedのdirectionltrになります。

7. 抽象ボックスレイアウト

7.1. 縦書きモードのレイアウト原則

縦書きモードのCSSボックスレイアウトは、横書きモードのレイアウトと類似しており、以下の原則に従います:

横書きモードで横方向に適用されるレイアウト計算ルール(CSS2.1、10.3節など)は、縦書きモードでは縦方向に適用されます。 同様に、横書きモードで縦方向に適用されるレイアウト計算ルール(CSS2.1、10.6節など)は、縦書きモードでは横方向に適用されます。 つまり:

例えば、縦書きモードではテーブルの行は縦方向、列は横方向です。 vertical-rl mixed rtlテーブルでは、 最初の列は下側(inline-start側)、 最初の行は右側(block-start側)に配置されます。 テーブルのmargin-rightmargin-leftは テーブルの右(前)・左(後)のマージンと相殺され、 margin-topmargin-bottomがauto値の場合は、縦方向に中央寄せされます。

縦書きvertical-rl mixed rtlテーブルの図(行・セル・列の順序を示す)

vertical-rl RTL書き方モードのテーブル

テキスト整列、フロート、リストマーカー位置など、主に行ボックスの左右やその縦方向の並びに関係し、上下の対応がない機能では、line-leftline-right側がそれぞれ左・右の基準となります。

また、下線や上線、ベースライン整列(不適切な名称ですがvertical-align)など、主に行ボックスの上下やその横方向並びに関係し、左右の対応がない機能では、line-overline-under側がそれぞれ上・下の基準となります。

これらのマッピングの詳細は以下で説明します。

7.2. 寸法マッピング

一部のプロパティは論理的に次のように動作します:

heightプロパティ(heightmin-heightmax-height)は物理的な高さを指し、widthプロパティ(widthmin-widthmax-width)は物理的な幅を指します。ただし、ボックス寸法や位置計算のルールは論理的です。

例えば、CSS2.1 10.3節の計算ルールはインライン寸法に適用されます。 inline size (物理幅または物理高さのいずれか)やinline-startinline-endのマージン、パディング、ボーダーに適用されます。 同様に、CSS2.1 10.6節の計算ルールはブロック寸法に適用され、 block sizeblock-startblock-endのマージン、パディング、ボーダーに適用されます。[CSS2]

結果として、margin/paddingプロパティのパーセンテージ値は、CSS2.1では常に包含ブロックの幅に対して計算されますが、CSS3では包含ブロックのinline sizeに対して計算されます。

7.3. 直交フロー

本節は特に複雑なので、ご意見を歓迎します。

ボックスのwriting-modeが包含ブロックと異なる場合、2通りあります:

ボックスが包含ブロックと直交する書き方モードを持つ場合、それは直交フローを確立すると言います。

この場合、CSSのレイアウト計算は「サイズ決定フェーズ」と「配置フェーズ」に分かれます:

autoマージンは包含ブロックの 書字モードと整合するように解決されるため、直交フローを確立するボックスは、 サイズ設定後、autoマージンを使用することで、 他のブロックレベルボックスと同様に包含ブロック内で整列または中央配置できます。

2つの横書きフローボックスの間に縦書きフローボックスが配置されている図。

直交フローの例

例えば、縦書きブロックを横書きブロック内に配置した場合、 子ブロックの物理的な高さ(インラインサイズ)を算出するとき、 親ブロックの物理的な高さが 子の包含ブロックのインラインサイズとして使用されます。 これは、親ブロックの物理的な高さがブロックサイズであり、インラインサイズではないにもかかわらずです。

一方、 包含ブロックは横書きモードにあるため、 子の垂直方向のマージンはマージンの相殺に関与します。 これは、そのマージンが子のインライン軸上にある場合も同様です。 また、水平方向のautoマージンは包含ブロックを埋めるように広がります。 これは、そのマージンが子のブロック軸上にある場合も同様です。

この節では、 ブロック軸方向で自動サイズ設定される子ボックスが 直交フローを確立する場合、 子の使用ブロックサイズを その内容に合わせて算出し、 その結果得られる内容ベースのサイズを 親のインライン軸における最小コンテンツサイズおよび 最大コンテンツサイズへの入力として使用することが要求される点に注意してください。

これは、inline-block、フロート、またはtable-cellなどのボックスに シュリンクトゥフィット式を適用する際、 その子が直交フローを確立する場合、 計算の依存関係を変更して、 子のサイズ設定段階が先に実行され、 その使用ブロックサイズが 親のインラインサイズの シュリンクトゥフィット式への入力となるようにしなければならないことを意味します。

7.3.1. 直交フローの利用可能な空間

CSSでは、包含ブロックが確定したインラインサイズを持つ一方、 確定したブロックサイズを持たないことが一般的です。 これは通常、CSS2.1で、 包含ブロックのheightがauto である場合に発生します。 例えば、その幅は10.3.3の計算によって与えられますが、 そのブロックサイズは内容に依存します。 このような場合、利用可能なインライン空間は、 包含ブロックのインラインサイズとして定義されますが、 利用可能なブロック空間は、 通常なら包含ブロックのブロックサイズとなるところ、 無限です。

ボックスを直交フローに配置すると、逆の状況、すなわち、 ボックスの利用可能なブロック空間は確定している一方、 その利用可能なインライン空間は不確定となることがあります。 このような場合、包含ブロックのインラインサイズに対するパーセンテージは定義できず、 インライン軸の計算は 解決できません。 このような場合、 追加のフォールバックサイズが、 利用可能なインライン空間の代わりに、確定した 利用可能なインライン空間を必要とする計算で使用されます: このサイズは次のうち最小のものです:

[css-sizing-3]を参照すると、CSSの サイズ設定に関する用語および概念の詳細を確認できます。

7.3.2. 直交フロールートの自動サイズ調整

インライン軸における自動サイズは、ブロックレベルまたはブロックコンテナ直交フローについて、 (すなわち、その優先サイズプロパティautoの場合に使用されるサイズ) そのフィットコンテンツサイズとして算出されます。すなわち、 min(max-content inline size, max(min-content inline size, stretch-fit inline size)、 ここで、利用可能な空間は、ストレッチフィットインラインサイズの算出に使用されるものであり、 包含ブロックのサイズ(そのサイズが確定している場合)、 またはフォールバックサイズ上記で定義されたもの)のいずれかです。

自動サイズ設定については、直交するマルチカラムコンテナ(両軸) および上記で言及されていないその他の表示型の場合、 この仕様では定義されません。

注記: CSS Writing Modes Level 4も参照してください。

7.3.3. 直交フローの分割

この節は参考情報です。

分割(fragmentation)に関しては、縦書きモードおよび直交フローでもCSS2.1のルールが有効です:改行可能箇所は行ボックス内では発生せず、行ボックス間でのみ発生します。 [CSS3COL]をサポートするUAは、(幅0の場合もある)カラム間の隙間で改行できます。

ルート要素が確立したページネーションストリームをはみ出した内容については、UAは印刷する必要がありません。 異なる書き方モードを混在し、長いテキストストリームを使用したい著者は、すべての内容が文書のページネーション方向に流れるよう、CSSカラムを使うことを推奨します。

つまり、画面上にスクロールバーが2つ必要な文書はおそらく全部印刷されません。レイアウトを修正してください。例えばカラムを使い、スクロール(したがってページネーション)方向を一方向にまとめることで、すべて印刷されるようにできます。T字型文書は印刷に不向きです。

7.4. フロー相対マッピング

フロー相対方向は、ボックスの包含ブロックの書き方モードに基づいて計算され、 ボックスプロパティ(マージン、ボーダー、パディング)や、ボックスを包含ブロック内で位置決めするプロパティ(floatcleartopbottomleftrightcaption-side)など、レイアウトルールを抽象化するために使われます。 インラインレベルボックスについては、親ボックスの書き方モードが使われます。 (left/right/top/bottom系のプロパティ・値自体は物理的にマッピングされますが、 caption-sideのみ特例で、 top/top-outsidebottom/bottom-outside値が、テーブルのblock-startblock-end側に対応します。)

例えば、ボックスのインライン寸法が過剰制約されたときにドロップされるマージンは、包含ブロックの書き方モードで決定されるendマージンです。

マージン 相殺規則は、上マージンをブロック始端マージンに、下マージンをブロック終端マージンに置き換えて、 そのまま適用されます。 同様に、ブロック始端のパディング とボーダーが 上パディングと上ボーダーの代わりに使用され、ブロック終端のパディングと ボーダーが下パディングと下ボーダーの代わりに使用されます。 これは、相殺される可能性があるのはブロック始端ブロック終端のマージンだけであることを意味します。

フロー相対方向はボックス自身の書き方モードに基づいて計算され、 ボックス内容のレイアウトにも抽象化して使われます:

7.5. 行相対マッピング

行相対方向overunderline-leftline-rightです。 LTRhorizontal-tb書き方モードでは、 それぞれ上、下、左、右方向に対応します。

line-rightline-left方向は、ボックス自身の書き方モードに基づいて計算され、 次のプロパティのleftright値の解釈に使われます:

line-rightline-left方向は、ボックスの包含ブロックの書き方モードに基づいて計算され、 次のプロパティのleftright値の解釈に使われます:

overunder方向は、ボックス自身の書き方モードに基づいて計算され、 行ボックスの「top(over)」「bottom(under)」側の定義に使われます:

7.6. 純粋な物理マッピング

以下の値は定義上完全に物理的であり、writing-modeの変更には反応しません:

8. 主要書き方モード

文書の主書字 モード は、ルート要素の使用値としてのwriting-modedirection、および text-orientationの値 によって決定されます。 この書字モードは、例えば、 スクロール方向 およびデフォルトのページ進行方向を決定するために使用されます。

HTML文書を処理するための特例として、 ルート要素が body 子要素[HTML]を持つ場合、 使用値は、ルート要素のwriting-modeおよびdirectionプロパティについて、 該当する最初の子要素の 算出値であるwriting-modeおよびdirectionから取得され、 ルート要素自身の値からは取得されません。 UAは任意でtext-orientationの値もこの 方法で伝播させてもよい。 これは、writing-modedirection、またはtext-orientationの、ルート要素自体における算出値には影響しないことに注意してください。

注記: 伝播は算出値ではなく使用値に対して行われます。 これはスタイル算出の他の側面、 例えば継承論理 プロパティのマッピングロジック、 または長さ値の算出を妨げないためです。

8.1. 初期包含ブロックへの伝播

主要書き方モード初期包含ブロックおよびビューポートに伝播され、 ルート要素のレイアウトやビューポートのスクロール方向に影響します。

8.2. ページフロー: ページ進行方向

ページメディアではCSSはすべてのページを左ページまたは右ページとして分類します。 ページ進行方向([CSS3PAGE]参照)は、 見開きの中でどちらのページが先になるか、最初のページがデフォルトで左か右かを決定しますが、 これは主要書き方モードによって次のように決まります:

主要書き方モード ページ進行
horizontal-tbltr 左から右
horizontal-tbrtl 右から左
vertical-rl 右から左
vertical-lr 左から右

注:特に指定がなければ、文書の最初のページは見開きの後半、つまり左から右ページ進行では右ページから始まります。

9. グリフ合成

9.1. 縦中横合成: text-combine-uprightプロパティ

名前: text-combine-upright
値: none | all
初期値: none
適用対象: 置換されていないインライン要素
継承: はい
パーセンテージ: 該当なし
算出値: 指定キーワード
標準順序: 該当なし
アニメーション型: アニメーション不可

このプロパティは複数のtypographic character unitを、 1つのtypographic character unitの空間に合成します。 合成テキストが1emより広い場合、UAは内容を1em内に収めなければなりません(下記参照)。 合成結果はレイアウトや装飾の観点では単一の立てて表示されたグリフとして扱われます。 このプロパティは縦書きモードのみ効果があります。値の意味は以下の通りです:

none
特別な処理は行いません。
all
ボックス内の連続するtypographic character unitをすべて横組みで合成し、 縦行ボックス内で1つのtypographic character unitの空間に収めます。

東アジア文書では、text-combine-upright効果がよく使われ、 日付の一部や略語のラテン文字列などを、行のwriting-modeに関係なく常に横組みで表示します:

縦中横の図。日付の2桁数字を縦書き行内で横並びに配置する例

縦中横の例 縦中横

この図は次のルールの結果です

date span { text-combine-upright: all; }

および以下のマークアップ:

<date>平成<span>20</span>年4月<span>16</span>日に</date>

日本語ではこの効果は縦中横と呼ばれます。

将来のCSS Writing Modesでは、よく使われるシーケンスを自動検出する値が導入されます。 例えば、CSS Writing Modes Level 4では、数字列を合成するdigits値が導入されます。

9.1.1. 合成テキストランのルール

レンダリングやレイアウトの複雑さを避けるため、text-combine-uprightは プレーンテキストのみ合成できます。 すなわち、ボックス境界で途切れない連続するtypographic character unitのみが対象です。

ただし、このプロパティは継承するため、UAは合成を行うボックスの内容が他の合成可能なシーケンスの一部になっていないことを保証すべきです。 もしそうなら、テキストは通常通りにレイアウトされ、text-combine-uprightnoneであるかのように扱われます。

例えば、次のルール

tcy { text-combine-upright: all; }

および次のマークアップの場合:

<tcy>12<span>34</span></tcy>

テキストは合成されません。

9.1.2. レイアウトルール

text-combine-upright: allの場合と同様にテキストを結合すると、 結合されたテキストのグリフは双方向分離され、水平方向に組版されます (letter-spacingおよびあらゆる強制改行を無視し、 指定されたフォント設定を使用します)。 これはinline-blockボックスの内容と同様であり、 そのボックスは横書きモードを使用し、line-height1emです。 文書の空白が結合テキストに含まれる場合の処理は、 このレベルでは定義されていません。 合成結果の実効サイズは1em四方であると仮定され、 その正方形の外側にあるものはレイアウト上の寸法測定には含まれません。 UAは、グリフを測定対象となる1em四方の領域内で水平方向および垂直方向の中央に配置するべきです。

結果として得られる合成のベースラインは、正方形が 親インラインボックスのtext-overベースラインとtext-underベースラインの間で中央に位置するように選択しなければなりません。この選択は、ベースライン整列による 移動(vertical-align)より前に行います。 双方向並べ替えでは、合成結果はタイポグラフィ文字単位text-orientation: uprightを持つもの)と同様に扱われます。 合成結果の前後での改行処理では、実際の 内容を持つ通常のインラインとして扱われます。 その他のテキストレイアウト目的、 例えば圏点、text-decoration、間隔 などでは、結果として得られる合成は、オブジェクト置換文字U+FFFCを 表す単一のグリフとして扱われます。

9.1.3. 圧縮ルール

UAは、合成の進行幅が1em以内になるように、必要に応じて合成テキストを圧縮しなければなりません。 (これはグリフ自体が必ず1emに収まることを意味するものではありません。グリフによっては幾何学的境界外に描画されるものもあります。) OpenType実装は、合成内のすべてのtypographic character unitに幅指定のバリアント(OpenType機能hwid/twid/qwidfwidpwidなど他の幅機能は含みません)が利用可能な場合は、それらを使って圧縮しなければなりません。 そうでない場合、UAはフォントが提供する半角・三分幅・四分幅グリフの代替、水平圧縮用フォント機能、幾何学的な縮小、またはそれらの組み合わせなど、任意の方法でテキストを圧縮しても構いません。

例えば、単純なOpenTypeベースの実装では、次のようにテキストを圧縮できます:

  1. 1/n幅のグリフを、n個のタイポグラフィ文字単位からなる結合テキストに対して有効にする(すなわち、OpenTypeの hwidを2個のタイポグラフィ文字 単位に、twidを3個のタイポグラフィ文字単位に使用するなど)。 タイポグラフィ文字単位の数が > 1の場合。 タイポグラフィ文字 単位の数 ≠ Unicodeコードポイントの数であることに注意してください!
  2. 結果が1emより幅広い場合、結果を水平方向に1emへスケーリングする。

OpenTypeレイアウト機能を利用する別の実装では、 まず通常のグリフでテキストを組版し、それで収まるかを確認してから、 利用可能で必要な場合には半幅形または3分の1幅形に置き換え、 利用可能なグリフ置換に応じて、手法を調整したり、 スケーリング操作と組み合わせたりすることもあります。

一部のフォントでは、表意文字グリフが1em幅だが高さは1em未満になるなど圧縮設計となっています。 このようなフォントに対応するため、UAは合成結果を指定フォント設定で描画した「水」U+6C34の進行高さに合わせて垂直方向にスケーリングしても構いません。 その場合、合成結果の高さは1emではなく「水」U+6C34の進行高さとなります。

9.1.3.1. 全角文字

テキストを1emに圧縮する際に組版上の色調を維持するため、 結合テキストが複数のタイポグラフィ文字単位からなる場合、 全角のタイポグラフィ文字単位はすべて、 まず対応する非全角文字へ変換するべきです。 これを行うには、text-transform: full-widthについて[CSS-TEXT-3]で定義されたアルゴリズムを逆に適用してから、他の圧縮手法を適用します。

グリフの選択に影響するプロパティ、 例えばfont-variantおよびfont-feature-settingsプロパティ([CSS3-FONTS]で定義)は、 結合テキストランに含まれる文字のバリアント選択に影響を与える可能性があります。 作者には、これらのプロパティをtext-combine-upright と併用する際、慎重に使用することが推奨されます。

10. プライバシーとセキュリティに関する考慮事項

本仕様は新たなプライバシーリークや、 「正しく実装すること」以外のセキュリティ考慮事項を導入しません。

変更点

2019年9月 CSS Writing Modes Module Level 3 Candidate Recommendation以降の変更点

実質的な変更なし。細かな編集修正(429342724273参照)。

2019年7月 CSS Writing Modes Module Level 3 Candidate Recommendation以降の変更点

2018年5月 CSS Writing Modes Module Level 3 Candidate Recommendation以降の変更点

2017年12月 CSS Writing Modes Module Level 3 Candidate Recommendation以降の変更点

2015年12月 CSS Writing Modes Module Level 3 Candidate Recommendation以降の変更点

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

2014年3月 CSS Writing Modes Module Level 3 Candidate Recommendation以降の変更点

謝辞

L. David Baron, Brian Birtles, James Clark, John Daggett, Nami Fujii, Daisaku Hataoka, Martin Heijdra, Laurentiu Iancu, Richard Ishida, Jonathan Kew, Yasuo Kida, Tatsuo Kobayashi, Toshi Kobayashi, Ken Lunde, Shunsuke Matsuki, Nat McCully, Eric Muller, Paul Nelson, Kenzou Onozawa, Chris Pratley, Xidorn Quan, Florian Rivoal, Dwayne Robinson, Simon Sapin, Marcin Sawicki, Dirk Schulze, Hajime Shiozawa, Alan Stearns, Michel Suignard, Takao Suzuki, Gérard Talbot, Masataka Yakura, Taro Yamamoto, Steve Zilles

付録A: Unicodeにおける縦書きスクリプト

この節は参考情報です。

この付録では、Unicode 6.0 [UNICODE] における縦書きのみスクリプトと両方向型スクリプト、およびそれらの横→縦変換について一覧します。 明示的に記載されていないスクリプトは横書きのみとみなします。 Unicode文字のスクリプト分類は[UAX24]で与えられています。

Unicodeにおける縦書きスクリプト
コード 名称 変換(時計回り) 固有縦書き方向
Bopo 注音字母 ttb
Egyp エジプト象形文字 ttb
Hira ひらがな ttb
Kana カタカナ ttb
Hani 漢字 ttb
Hang ハングル ttb
Merc メロエ文字草書体 ttb
Mero メロエ象形文字 ttb
Mong モンゴル文字 90° ttb
Ogam オガム文字 -90° btt
Orkh 古代トルコ文字 -90° ttb
Phag パスパ文字 90° ttb
Yiii イ文字 ttb

例外: 本仕様では、全角(F)およびワイド(W)文字は縦書きスクリプトに属するものとし、半角文字(H)は横書きスクリプトに属するものとします。[UAX11]

縦書きのみ文字(モンゴル・パスパ文字など)は、Unicodeコードチャートで縦書き方向で表示されています。 横書きテキストでは、これらの向きから90°反時計回りに回転して組版されます。

Unicode Technical Report 50およびCSS Writing Modesの現状の機能制限により、 縦書きmixed組版ではオガム文字・古代トルコ文字の自動処理はできません。 これらのスクリプトにはsideways-lrCSS Writing Modes Level 4)を使うことで組版可能です。

適合性

文書上の規約

適合要件は記述的な断言と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"で規範テキストから区別して示されます:

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

助言(advisement)は注意喚起のために特別なスタイルで示される規範節であり、下記のように他の規範テキストから区別されます: UAはアクセシブルな代替手段を必ず提供しなければなりません。

適合クラス

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

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

スタイルシートが本仕様に適合するためには、このモジュールで定義された構文を使う全ての記述が、汎用CSS文法および各機能の個別文法に従って有効でなければなりません。

レンダラーが本仕様に適合するためには、スタイルシートを適切な仕様どおり解釈するだけでなく、本仕様で定義された全機能を正しくパースし、文書をそれに従ってレンダリングできなければなりません。ただし、デバイスの制限によってUAが文書を正しくレンダリングできない場合でも、UAが非適合と見なされるわけではありません。(例:モノクロモニターで色のレンダリングは必須ではありません。)

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

CSSの責任ある実装への要件

以下の節では、CSSを現在および将来にわたり相互運用性を促進する形で責任を持って実装するための適合要件を定義します。

部分実装

著者がフォールバック値を割り当てるために前方互換パース規則を利用できるよう、CSSレンダラーは、サポートレベルが有効でない任意のatルール、プロパティ、プロパティ値、キーワード、その他構文要素を無効と見なして (適切に無視する)必要があります。 特に、ユーザーエージェントは、サポートされないプロパティ値だけを選択的に無視し、単一のマルチバリュー宣言内でサポートされる値だけを適用してはなりません。 いずれかの値が無効(サポート外の値は必ず無効)と見なされる場合、CSSではその宣言全体を無視する必要があります。

不安定・独自機能の実装

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

CRレベル機能の実装

仕様がCandidate Recommendation段階に達したら、実装者は仕様どおり正しく実装できるCRレベル機能について非プレフィックス版をリリースすべきであり、プレフィックス付きのバリアントは公開しないようにすべきです。

CSSの相互運用性を実装間で確立・維持するため、CSS WGは実験的でないCSSレンダラーが非プレフィックス実装をリリースする前に、W3Cに実装レポート(必要ならそのテストケースも)を提出することを求めます。提出されたテストケースはCSS WGによってレビュー・修正される場合があります。

テストケース・実装レポート提出方法の詳細はCSS WGのウェブサイト https://www.w3.org/Style/CSS/Test/ で確認できます。 質問は public-css-testsuite@w3.org メーリングリストまで。

索引

本仕様で定義される用語

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

参考文献

規範参考文献

[CSS-BOX-3]
Elika Etemad. CSS Box Model Module Level 3. 2018年12月18日. WD. URL: https://www.w3.org/TR/css-box-3/
[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr.. CSS Cascading and Inheritance Level 4. 2018年8月28日. CR. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2019年7月11日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-IMAGES-3]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS Images Module Level 3. 2019年10月10日. CR. URL: https://www.w3.org/TR/css-images-3/
[CSS-INLINE-3]
Dave Cramer; Elika Etemad; Steve Zilles. CSS Inline Layout Module Level 3. 2018年8月8日. WD. URL: https://www.w3.org/TR/css-inline-3/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS Masking Module Level 1. 2014年8月26日. CR. URL: https://www.w3.org/TR/css-masking-1/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2018年7月31日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-RUBY-1]
Elika Etemad; Koji Ishii. CSS Ruby Layout Module Level 1. 2014年8月5日. WD. URL: https://www.w3.org/TR/css-ruby-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Intrinsic & Extrinsic Sizing Module Level 3. 2019年5月22日. WD. URL: https://www.w3.org/TR/css-sizing-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS Text Module Level 3. 2019年11月13日. WD. URL: https://www.w3.org/TR/css-text-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2019年6月6日. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2019年1月31日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2019年7月30日. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS2/
[CSS3-BREAK]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3. 2018年12月4日. CR. URL: https://www.w3.org/TR/css-break-3/
[CSS3-TEXT-DECOR]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 3. 2019年8月13日. CR. URL: https://www.w3.org/TR/css-text-decor-3/
[CSS3BG]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2017年10月17日. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS3COL]
Håkon Wium Lie; Florian Rivoal; Rachel Andrew. CSS Multi-column Layout Module Level 1. 2019年10月15日. WD. URL: https://www.w3.org/TR/css-multicol-1/
[CSS3PAGE]
Elika Etemad; Simon Sapin. CSS Paged Media Module Level 3. 2018年10月18日. WD. URL: https://www.w3.org/TR/css-page-3/
[HTML]
Anne van Kesteren; 他. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[RFC6919]
R. Barnes; S. Kent; E. Rescorla. Further Key Words for Use in RFCs to Indicate Requirement Levels. 2013年4月1日. Experimental. URL: https://tools.ietf.org/html/rfc6919
[SVG11]
Erik Dahlström; 他. Scalable Vector Graphics (SVG) 1.1 (Second Edition). 2011年8月16日. REC. URL: https://www.w3.org/TR/SVG11/
[UAX11]
Ken Lunde 小林劍󠄁. East Asian Width. 2019年1月25日. Unicode Standard Annex #11. URL: https://www.unicode.org/reports/tr11/tr11-36.html
[UAX24]
Ken Whistler. Unicode Script Property. 2019年2月6日. Unicode Standard Annex #24. URL: https://www.unicode.org/reports/tr24/tr24-29.html
[UAX50]
Koji Ishii 石井宏治; Ken Lunde 小林劍󠄁. Unicode Vertical Text Layout. 2019年2月4日. Unicode Standard Annex #50. URL: https://www.unicode.org/reports/tr50/tr50-22.html
[UAX9]
Mark Davis; Aharon Lanin; Andrew Glass. Unicode Bidirectional Algorithm. 2019年2月4日. Unicode Standard Annex #9. URL: https://www.unicode.org/reports/tr9/tr9-41.html
[UNICODE]
The Unicode Standard. URL: https://www.unicode.org/versions/latest/

参考文献(非規範)

[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4. 2018年12月18日. WD. URL: https://www.w3.org/TR/css-break-4/
[CSS-FONTS-4]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 4. 2019年11月13日. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS3-FLEXBOX]
Tab Atkins Jr.; 他. CSS Flexible Box Layout Module Level 1. 2018年11月19日. CR. URL: https://www.w3.org/TR/css-flexbox-1/
[CSS3-FONTS]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 3. 2018年9月20日. REC. URL: https://www.w3.org/TR/css-fonts-3/
[HTML401]
Dave Raggett; Arnaud Le Hors; Ian Jacobs. HTML 4.01 Specification. 2018年3月27日. REC. URL: https://www.w3.org/TR/html401/
[UTN22]
Elika J. Etemad. Robust Vertical Text Layout. 2005年4月25日. Unicode Technical Note #22. URL: https://unicode.org/notes/tn22/

プロパティ索引

名称 初期値 適用対象 継承 パーセンテージ アニメ可 アニメーション型 標準順序 算出値
direction ltr | rtl ltr すべての要素 はい 該当なし アニメーション不可 該当なし 指定値
glyph-orientation-vertical auto | 0deg | 90deg | 0 | 90 該当なし 該当なし 該当なし 該当なし 該当なし 該当なし 該当なし
text-combine-upright none | all none 置換されていないインライン要素 はい 該当なし アニメーション不可 該当なし 指定キーワード
text-orientation mixed | upright | sideways mixed テーブル行グループ、行、列グループ、列を除くすべての要素 はい 該当なし アニメーション不可 該当なし 指定値
unicode-bidi normal | embed | isolate | bidi-override | isolate-override | plaintext normal すべての要素(詳細は本文参照) いいえ 該当なし アニメーション不可 文法による 指定値
writing-mode horizontal-tb | vertical-rl | vertical-lr horizontal-tb テーブル行グループ、テーブル列グループ、テーブル行、テーブル列、ルビベースコンテナ、ルビ注釈コンテナを除くすべての要素 はい 該当なし アニメーション不可 該当なし 指定値