この文章は、CSS Writing Modes Module Level 3(W3C Working Draft 1 September 2011)を、独自に翻訳したものです。
この仕様書の正式なものは W3C のサイトにある英語版であり、その著作権は W3C が保有しています。また、翻訳に誤りがある可能性に留意してください。また、読みやすさを考慮して、スタイルやレイアウトを変更している箇所があります。ご注意下さい。
文中では日本語組版の用語を用いております。日本語組版については日本語組版処理の要件(日本語版)に目を通しておくことをおすすめいたします。
その他の仕様書の翻訳は、CSS 日本語レイアウト関連仕様 日本語翻訳からご覧下さい。
公開開始日: 2011.09.11
更新日: 2011.11.07(翻訳完了)
Copyright © 2011 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
CSS3 Writing Modesは左から右(ラテン語やインド語)、右から左(ヘブライ語やアラビア語)、双方向(ラテン語とアラビア語の同時使用)、縦組(アジア言語の文章)のような、世界各国の組方向をサポートするCSSの機能を定義している。
根本的に下から上へ進む文章はこのバージョンでは扱われない。関連する問題は[UTN22] を参照のこと。
このセクションは、公開時点でのこの文書の位置付けについて述べている。他の文書がこの文書を置き換えることがある。W3Cが現在公開しているリストとテクニカルレポートの最新版は、W3C technical reports index (http://www.w3.org/TR/)で見つけることができる。
Working Draftでの公開は W3Cメンバーの支持を意味するものではない。下書きのドキュメントであり、いつでも更新、他のドキュメントによる置き換えや廃止扱いにされうる。これは、進行中の作業以外のものとしてこのドキュメントを引用することは不適切である。
(アーカイブされている) 公開メーリングリスト www-style@w3.org (参加手順はこちら) をこの仕様の議論に推奨している。eメールを送る際には、サブジェクトに “css3-writing-modes” を追加してほしい。できれば “[css3-writing-modes] …summary of comment…”のように。
このドキュメントはCSS Working Group ( Style Activityの一環)で製作された。
このドキュメントは2004年2月6日のW3C特許ポリシーに従うグループによって製作された。W3Cはグループの成果を結びつけて作られたあらゆる開示特許の公開リストを管理しており、ここには特許開示の指示も含まれている。 本質的な特許請求の範囲に含まれると思われる特許について実際の知識を持っている人は、 W3C特許ポリシーの第6章に従い、情報を公開しなければならない。
以下の機能は抜ける恐れがあるもので、おそらくCRまでには落とされるだろう:
text-orientation
’の‘use-glyph-orientation
’text-combine-horizontal
’の値である ‘ascii-digits
’, ‘digits
’, ‘alpha
’, ‘latin
’, そして ‘alphanumeric
’ text-combine-mode
’ プロパティCSS3 Writing Modesは左から右(ラテン語やインド語)、右から左(ヘブライ語やアラビア語)、双方向(ラテン語とアラビア語の同時使用)、縦書き(アジア言語の文章)のような、世界各国の組方向をサポートするCSSの機能を定義している。
CSSのwriting modeは、‘writing-mode
’, ‘direction
’,
‘text-orientation
’ のプロパティによって決定される。writing modeでは、
inline base direction(字詰め方向:1つの行で、1つの文字から次の文字へと続く方向)と
block flow direction(行送り方向:1つの行から次の行へと続く方向)によって定義されている:
inline base directionは、両端に開始と終了がある行の上に並べられたコンテンツの主方向である。
The ‘direction
’
プロパティは要素の字詰め方向を指定し、‘unicode-bidi
’ プロパティやテキスト固有の方向とともに、行内のinline-level contentの順序を決定している。
block flow directionは、
ブロックコンテナ内での、ブロックレベルボックスを積む方向や、行ボックスを積む方向である。
‘writing-mode
’
プロパティは行送り方向を決定している。
horizontal writing mode(横書き) はテキストの水平行を持つ。そして上方向や下方向へ行送りする。 vertical writing mode(縦書き) はテキストの垂直行を持つ。そして右方向か左方向へ行送りする。
これらの言葉はvertical block flow (上方向や下方向への行送り)や horizontal block flow (左方向や右方向への行送り)と混同すべきではない。 混乱を避けるため、CSSの仕様ではこの後者の用語セットを用いていない。
Writing systemsは通常1つか2つのnative writing modesを持っている。いくつか例を示す:
writing modeの ‘text-orientation
’ コンポーネントは、 line
orientation と typesetting modeを決定し、glyph orientation
のようなテキストレイアウトの詳細を制御している。
writing modeとvertical textのさらに深い導入は、Unicode Technical Note #22 [UTN22] (HTML version)を参照のこと。
このモジュールは[CSS21]のセクション8.6と9.10で定義されている ‘unicode-bidi
’
と ‘direction
’ の機能を置き換え、拡張する。
本仕様は[CSS21]に書かれたCSS property definition conventions(CSSプロパティの定義規則)に従っている。 本仕様で定義されていない値の型は、CSS Level 2 Revision 1[CSS21]で定義されている。[CSS3COLOR]を例に挙げると、このモジュールを組み合わせて使うと、本仕様の中でも <color> の値の型の定義が拡張される。
これらの定義にリストアップされたプロパティの固有値に加えて、本仕様で定義されている全プロパティでも、これらのプロパティの値のように inherit keyword(キーワード継承)を受け入れる。読みやすさを考慮して、本件は明示的に繰り返さない。
ほとんどの文字が左から右に書かれている一方で、いくつかの文字は右から左に書かれている。一部の文章、特にアラビア語かヘブライ語の文字で書かれ、その中に複数言語が混在する文脈があると、単一の(視覚的に表示された)ブロック内のテキストで複数方向が混在することがある。この現象はbidirectionality(双方向性), もしくは短く "bidi(バイダイ)"と呼ばれる。
Unicode standard (Unicode Standard Annex #9)
では、双方向テキストの適切な方向を決定するための複雑なアルゴリズムを定義している。このアルゴリズムは文字のプロパティの他に、埋め込みや上書きの明確なコントロールに基づいた暗黙的な部分で構成されている。CSSは適切な双方向レンダリングを実現するために、このアルゴリズムを頼りにしている。
‘direction
’ と ‘unicode-bidi
’
のプロパティは、作者にドキュメント言語の要素と属性を、このアルゴリズムとどうマッピングするか指定できるようにしている。
双方向性をもったテキストをサポートするユーザーエージェントは、強制 (bidi class B) 改行かブロック境界で中断されない全てのインラインボックスの配列に対しUnicode双方向アルゴリズムを適用しなくてはならない。この配列は双方向アルゴリズムでのparagraph(段落)単位を形成する。
‘unicode-bidi
’の‘plaintext
’が有効な場合を除き、段落埋め込みレベルはUnicodeアルゴリズムのP2とP3にあるヒューリスティックに得られたものよりも、むしろ段落中要素の‘direction
’プロパティの値に応じて設定されている。通常、段落中要素は包含ブロックであるが、isolation(分離した)バイダイを含む段落では、分離したインライン要素がその代わりとなる。
テキストの書字方向が文章の構造と意味に依存していることから、ほとんどの場合
‘direction
’と‘unicode-bidi
’のプロパティは、マークアップ中でのバイダイ情報と、適合するCSSスタイルとを割り当てるべきである。ドキュメント言語がバイダイをコントロールするマークアップ機能を提供するのであれば、作者とユーザーはそれらの機能を使うべきであり、これらを上書きするCSSのルールを指定すべきではない。
HTML 4の仕様 ([HTML401], section 8.2) では、双方向性はHTML要素のふるまいであると定義している。HTML4の仕様には双方向性における問題の詳細情報が含まれている。
HTMLのユーザーエージェントがCSSのスタイル機能をOFFにすることができるので、スタイルシートが無い状態でも正しい双方向レイアウトを保証するため、我々はHTML作者に‘dir
’属性と<bdo> 要素を使うよう忠告している。
direction
’ プロパティ名称: | direction |
---|---|
値: | ltr | rtl |
初期値: | ltr |
適用対象: | 全ての要素 |
継承: | される |
パーセンテージ: | N/A |
メディア: | visual |
算出値: | 指定した値 |
このプロパティはテキストと行内の要素の書字方向、Unicode双方向アルゴリズムで使われる埋め込みと上書き (‘unicode-bidi
’を参照) の方向を指定している。加えて、table(表)の行レイアウト順序、水平overflow(はみ出し)の方向、行内のテキストのデフォルトの並べ方、他に字詰めの基本方向に依存するものに作用している。
このプロパティの値の意味を以下に示す:
‘direction
’プロパティは、‘unicode-bidi
’
プロパティの値が ‘normal
’であるインライン要素に指定されたバイダイの並び替えには何の影響も与えない。
ルート要素の‘direction
’プロパティの値も初期包含ブロックへ伝搬され、‘writing-mode
’プロパティの値と共にドキュメント全体の基本となる組方向を決定する (こちらを参照)。
注: HTML BODY要素の‘direction
’プロパティはビューポート(コンテンツが表示される領域)に伝搬されない。この特殊な振る舞いはbackgroundとoverflowのプロパティにのみ適用される。
表のcolumn要素に指定された‘direction
’ プロパティは、ドキュメントツリーにおいて列がセルの祖先でないため、列内のセルへは継承されない。このように、CSSは[HTML401]のsection 11.3.2.1.に書かれている "dir" 属性の継承ルールを簡単に取得することができない。
unicode-bidi
’ プロパティ名称: | unicode-bidi |
---|---|
値: | normal | embed | [ isolate || bidi-override ] | plaintext |
初期値: | normal |
適用対象: | 全ての要素(しかしproseを参照のこと) |
継承: | されない |
パーセンテージ: | N/A |
メディア: | visual |
算出値: | 指定した値 |
このプロパティの値の意味を以下に示す。
direction
’プロパティにより与えられる。要素の中では、並び替えは暗黙で行われる。これは、要素の始めだと、‘direction: ltr
’に対しては LRE (U+202A)か、‘direction: rtl
’に対しては RLE (U+202B)の追加に相当し、要素の終わりでは、 PDF (U+202C) の追加に相当する。この値はインライン要素でない場合、何の影響も及ぼさない。
direction
’プロパティによって書字方向が指定された段落の中にあるとされている。
そして(もし、あれば)バイダイ段落を含むバイダイ解決のために、要素自身がObject Replacement Character (U+FFFC) のように扱われる。(要素が複数行にわたって改行された場合、要素の各ボックスはObject Replacement Characterとして扱われる。)
direction
’
プロパティに従った順序に厳密であることを意味しており、双方向アルゴリズムの暗黙の部分は無視される。これは、要素の始めでは、‘direction: ltr
’ に対しては LRO (U+202D)が、‘direction: rtl
’ に対しては RLO (U+202E)の追加に相当し、要素の終わりでは PDF (U+202C) の追加に相当する。
Unicode双方向アルゴリズムのために、要素が包含ブロックを形成するためにあるバイダイ段落の書字方向は、通常、要素が計算した‘direction
’では決定されない。しかし、ヒューリスティックなUnicodeアルゴリズムのルールP2とP3には従う。インライン要素では、ブロックコンテナを除き、この値は ‘isolate
’と同様に振る舞う。字詰め方向は‘direction
’の値ではなく、Unicodeのヒューリスティックなものを用いて決定される。
各バイダイ段落の中にある文字の最終的な順序は、上記のようにバイダイのコントロールコードが埋め込まれているものと同じであり、マークアップは削除されており、結果として得られる文字の順序は、スタイル付きテキストと同じ改行が生成されたplain text用のUnicode双方向アルゴリズム実装に渡されている。
このプロセスでは、‘unicode-bidi
’プロパティが‘normal
’以外の値、つまり要素に指定された‘direction
’で強い文字(文字自身に方向を持つ)として扱われるような場合を除き、‘display:inline
’で置換される要素はニュートラルな文字(右から左でも、左から右でも使用できる文字)として扱われる。他のアトミックなインラインレベルボックスは全て常にニュートラルな文字として扱われる。
インライン要素がバイダイ段落境界の周辺で分解された場合(例えば、ブロックや強制段落改行により分離された場合)、要素の終わりに相当するバイダイのコントロールコードは分解箇所の前に追加され、要素の開始に相当するコントロールコードは分解箇所の後ろに追加される。(言い換えれば、要素のどんな追加レベルや上書きも、段落改行で閉じられ、もう一方で再び開く。)
Unicodeアルゴリズムは追加レベルの制限が 61レベルであるため、適切な場合を除き、値が‘normal
’以外の‘unicode-bidi
’プロパティを使わないよう注意すること。 特に値が‘inherit
’の場合は注意を払うこと。しかし、しかし、一般的に、ブロックとしての表示を意図している要素は、displayをinlineに変更しつつ、要素を維持するため‘unicode-bidi: isolate
’ とするのが好ましい。(以下のサンプルを参照)
双方向テキストのXMLを使ったXMLドキュメントの例を以下に示す。これは重要な設計原理を説明している。ドキュメント言語の設計者は言語の適正さ(要素と属性)と添付されたスタイルシートの双方で、バイダイを考慮に入れるべきである。スタイルシートはバイダイのルールがスタイルのルールと分離されるように、またドキュメント言語のバイダイの振る舞いが保護されるよう、記述したルールが他のスタイルシートで上書きされないように設計されるべきである。
この例では、小文字が左から右で使われる文字を表し、大文字が右から左で使われる文字を表す。text streamはバッキングストア内の順で表示される。
<HEBREW>
<PAR>HEBREW1 HEBREW2 english3 HEBREW4 HEBREW5</PAR>
<PAR>HEBREW6 <EMPH>HEBREW7</EMPH> HEBREW8</PAR>
</HEBREW>
<ENGLISH>
<PAR>english9 english10 english11 HEBREW12 HEBREW13</PAR>
<PAR>english14 english15 english16</PAR>
<PAR>english17 <HE-QUO>HEBREW18 english19 HEBREW20</HE-QUO></PAR>
</ENGLISH>
これは任意のXMLであるので、スタイルシートは書字方向の設定に関与している。これはこのようなスタイルシートとなる:
/* Rules for bidi */ HEBREW, HE-QUO {direction: rtl; unicode-bidi: embed;} ENGLISH {direction: ltr; unicode-bidi: embed;} /* Rules for presentation */ HEBREW, ENGLISH, PAR {display: block;} EMPH {font-weight: bold;}
HEWREW要素は、書字方向が右から左のブロックである。ENGLISH要素は書字方向が左から右のブロックである。PARは親要素から書字方向を継承するブロックである。よって、最初の2つのPARは右上から読まれ、最後の3つPARは左上から読まれる。HEBREWとENGLISHは話をわかりやすくするためだけに選ばれた要素名であることに注意すること。一般的に、要素名は言語を参照せずに構造を伝える必要がある。
EMPH要素はインラインレベル要素で、‘unicode-bidi
’の値は‘normal
’(初期値)であるので、テキストの順序には影響しない。一方、HE-QUO要素は埋め込みを行う。
行の長さが長い場合、このテキストの書式は次のようになる:
5WERBEH 4WERBEH english3 2WERBEH 1WERBEH 8WERBEH 7WERBEH 6WERBEH english9 english10 english11 13WERBEH 12WERBEH english14 english15 english16 english17 20WERBEH english19 18WERBEH
HE-QUOの埋め込みが、english19の右にHEBREW18を持ってきていることに注意すること。
行が改行されているなら、次のようになる:
2WERBEH 1WERBEH -EH 4WERBEH english3 5WERB -EH 7WERBEH 6WERBEH 8WERB english9 english10 en- glish11 12WERBEH 13WERBEH english14 english15 english16 english17 18WERBEH 20WERBEH english19
HEBREW18がenglish19の前で読まれるべきなので、HEBREW18はenglish19の上の行にある。前の書式から長い行を改行するだけではうまくいかない。english19の最初のシラブルは前の行に収まっているが、右から左の方向を持つ文中の左から右の方向を持つ言葉のハイフン、もしくはその逆のハイフンは、通常、行の途中にハイフンを表示させないために抑制されていることに注意すること。
バイダイの再配置は論理的に連続しているテキストを分割して並び替えできるので、双方向テキスト行中のインラインボックスも分割・並び替えされうる。
インラインボックスを同じ方向にフロー(流し込み)できるようにするために(全て左から右か、全て右から左)、匿名のインラインボックスが生成されることに注意すること。
各ラインボックスのために、ユーザーエージェントは各要素に生成されたインラインボックスを取得し、マージン・ボーダー・パディングを表示順序(論理的な順序ではない)に従い描画しなければならない。要素が登場する最初のラインボックスにあるstart-most box(最初のボックス)は、start edge's margin(開始マージン)、border(ボーダー)、padding(パディング)を持つ。要素が登場する最後のラインボックスにある end-most box(最後のボックス)は、end edge's margin(終了マージン)、 border(ボーダー)、padding(パディング)を持つ。例えば、writing modeプロパティが‘horizontal-tb
’の場合:
direction
’プロパティが‘ltr
’なら、要素が登場する最初のラインボックスでは、一番左に生成されたボックスは左マージン、左ボーダー、左パディングを持つ。要素が登場する最後のラインボックスでは、一番右に生成されたボックスは右パディング、右ボーダー、右マージンを持つ。
direction
’プロパティが‘rtl
’なら、素が登場する最初のラインボックスでは、一番右に生成されたボックスは右マージン、右ボーダー、右パディングを持つ。要素が登場する最後のラインボックスでは、一番左に生成されたほとんどのボックスは左パディング、左ボーダー、左マージンを持つ。
これと似たルールが縦組を保っている。
‘box-decoration-break
’プロパティは、各ボックス両サイドにて装飾を描画するために、この振る舞いを上書きすることができる。[CSS3BG]
この章は参考である。
CSS2.1の双方向テキストサポート拡張に加えて、このモジュールはCSSでの縦書きレイアウトサポートに必要なルールとプロパティを導入している。
主に水平の文字を配置していくラテン系の文字を使用した言語とは違い、中国語や日本語のようなアジア圏の言語は文字を垂直に配置する。下の日本語の例は、同じテキストを水平と垂直それぞれに配置したものである。水平の場合は、テキストは左から右に、そして上から下へ読まれる。垂直の場合は、テキストは上から下へ、そして右から左へ読まれる。左から右へ進む水平の場合における左端からのインデントは、上から下へ進む垂直の場合に変換すると、上端からのインデントになる。
中国語と日本語の行は右から左、もしくは上から下へ並べられる。しかしモンゴル語と満州語は左から右へ並べられる。
横書きから縦書きへの変更による影響はレイアウトだけではない。組版にも影響を与えている。例えば、spacing boxに含まれる句読点は横書きから縦書きへ変更することができるが、その場合は違うグリフが使われることがある。
ラテン文字や、その他普通は横書きされる文字のテキストを含む縦書きのテキストは、その横書きされるテキストを様々な方法で表示することができる。例えば、ラテン文字を横向きに回転させたり、各文字を上向きに並べることができる:
日付の2桁数字のような特殊なケースでは、テキストが縦書き一文字分のキャラクターボックスにぴったり詰めこまれる:
レイアウトにはよく縦書きと横書きの要素が混ざったものがある:
縦書きレイアウトでも双方向テキストレイアウトの処理が必要となる。例えば、時計回りに回転されたアラビア語は、下から上にレイアウトされる。
writing-mode
’ プロパティ名称: | writing-mode |
---|---|
値: | horizontal-tb | vertical-rl | vertical-lr |
初期値: | horizontal-tb |
適用対象: | 表の行グループ、表の列グループ、表の行、表の列を除く全要素 |
継承: | される |
パーセンテージ: | N/A |
メディア: | visual |
算出値: | 指定した値 |
このプロパティは行送り方向を設定する。指定可能な値は以下:
The ‘writing-mode
’プロパティは行送り方向を決定している。これがブロック書式付けコンテキストにあるブロックレベルボックスの進行を決定している。インラインを含むブロックコンテナのラインボックスの進行と、表の行の進行である。ラインボックスを積む方向が決定されるおかげで、
‘writing-mode
’プロパティは、このようにラインボックスが横組なのか縦組なのかも決定している。
‘writing-mode
’プロパティは
‘direction
’プロパティと共にroot要素に設定されると、ドキュメント全体のprincipal writing mode(基本となる組方向)を決定する。
この組方向は、基本となるページ進行方向を決定したりする。([CSS3PAGE]を参照) root要素の ‘writing-mode
’
の値は初期包含ブロックにも伝播し、初期ブロック書式付けコンテキストの行送り方向を設定している。
HTML BODY要素の‘writing-mode
’プロパティはビューポートに伝播されないことに注意すること。この特別な振る舞いはbackground と overflow プロパティにのみ適用される。
もし要素がその包含ブロックと異なる行送り方向を持っていた場合は:
display
’ を ‘inline
’ にしているのなら、その ‘display
’ は ‘inline-block
’ となる。 [CSS21]
display
’ を ‘run-in
’ にしているのなら、その ‘display
’ は ‘block
’ となる。 [CSS21]
そのような要素がブロックコンテナの場合、新しいブロック書式付けコンテキストを作り出す。
置き換えられた要素のコンテンツはwriting modeによって回転しない。例では、imageは直立したままである。しかし、ユーザーエージェントがコンテンツを置換する縦書きをサポートしていた場合は、テキストを含む要素(MathMLやform要素など)の置き換えは、置き換えられた要素の組方向と行の向きに一致しなければならない。
下の例は、image(2)によって分割されている2つのブロック要素(1と3)を様々な行送り組方向で示したものである。
横書きの場合 (writing-mode:
horizontal-tb
):
一般的に東アジア圏で使われる右から左の縦書きの場合 (writing-mode: vertical-rl
):
そして最後に、満州語やモンゴル語で使われる左から右の縦書きの場合 (writing-mode: vertical-lr
):
以下の例は、‘vertical-rl
’ writing mode のブロック内でいくつかのフォームを表示させたものである。フォームの表示は writing mode と一致している。
<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>
この例は、擬似要素 ‘::marker
’を使い、‘writing-mode
’ でリストマーカーを直立にしたものである。vertical alignmentは、長い数値(桁数が多い数値)がテキストの最初の行の右側へ配置されるようになる。[CSS3LIST]
::marker { writing-mode: horizontal-tb; vertical-align: text-top; color: blue; }
writing-mode
’
の値SVG1.1 [SVG11]
ではいくつかの値が追加で定義されている: ‘lr
’, ‘lr-tb
’, ‘rl
’, ‘rl-tb
’,
‘tb
’, ‘tb-rl
’である。
これらの値は、SVG1の文章を除くコンテキストでは 非推奨とされている。CSSのコンテキストでこれらをサポートする実装は,その値を次の表のように扱う必要がある:
SVG1/Obsolete | CSS |
---|---|
‘lr ’
| ‘horizontal-tb ’
|
‘lr-tb ’
| |
‘rl ’
| |
‘tb ’
| ‘vertical-rl ’
|
‘tb-rl ’
|
SVG1.1の値は、CSS ‘writing-mode
’の以前のリビジョンに存在していて、本仕様で廃止された。以前のリビジョンに存在していた値 ‘tb-lr
’ は、‘vertical-lr
’に置き換えられる。
SVG1.1では、これらの値がinline progression direction(行内の進行方向)を設定している。言い換えると、グリフが追加される度に現在のテキストの位置が進む方向である。これはバイダイの再配置後に起こる幾何学的プロセスなので、 ‘direction
’ プロパティ(‘writing-mode
’ から独立している)の解釈には何の影響も及ぼさない。(Relationship with bidirectionalityを参照のこと。[SVG11])
このプロセスが "writing-mode: rl" に対して、単にテキストの文字列をシフトさせているのか、それともテキスト中の全グリフ順序を逆にしているのかは、様々な解釈がある。
異なる種類のインライン要素コンテンツが同じ行に配置されると、コンテンツのベースラインと ‘vertical-align
’ プロパティの設定が、ラインボックスの横軸の中でインライン要素コンテンツをどう配置するかを制御する。この章では、ベースラインがどのようなもので、その見つけ方や、インライン要素の並び方を決定する ‘vertical-align
’ プロパティと共にどのように使われるかを述べている。
本章は参考である。
A baseline(ベースライン)は、テキストの個々のグリフが配置されたラインボックスのinline axis(インライン軸)に沿ったラインである。ベースラインはフォントのグリフをデザインするガイドになり(例えば、大半のアルファベット文字の底は大抵アルファベットのベースラインと一致している)、また、組版時に異なるフォントやフォントサイズのものとグリフをどう配置するかのガイドにもなる。
異なる表記法は異なるベースラインテーブルを選択する。
うまく構成されたフォントには、フォントデザインの座標空間にある1つ以上のベースラインの位置を示す ベースラインテーブルが含まれている(デザイン座標空間はフォントサイズにより見積もられる)。
ベースラインテーブルはフォントのプロパティであり、様々なベースラインの位置はフォントの全グリフに適用される。
縦書きテキストと横書きテキストでは、異なるベースラインテーブルが提供されうる。ユーザーエージェントは、縦組では縦組用のテーブルを、横組では他のテーブルを使うべきである。
この仕様では、以下のベースラインだけが考慮されている:
将来のCSSモジュールでは、さらに細かいベースラインを扱い、他の優先されるベースラインと配置オプションを選択できるようにする予定である。
もし atomic inline(原子的なインライン) (インラインブロックやインラインテーブル、もしくはインライン要素に置き換えられたもの) が自身のベースライン情報を提供出来ない場合は、ユーザーエージェントはこのようにベースラインテーブルを合成する:
CSSでは、dominant baseline(優先ベースライン) (writing modeに基づいて変更可能) の配置時の使われ方は2つのケースがある:
baseline
’の値が‘vertical-align
’なら、子は親の箇所に、親の優先ベースラインと子の同じベースラインを一致させ配置される(例えば、親の優先ベースラインがalphabeticの場合、子の優先ベースラインがalphabeticベースライン以外であったとしても、子のalphabeticベースラインは親のalphabeticベースラインに合わされる)。‘sub
’, ‘super
’,
‘<length>
’, ‘<percentage>
’の場合、ベースラインは ‘baseline
’と同様に配置されるが、子は、 ‘vertical-align
’ の値により与えられたオフセットに応じてシフトされる。
以下のマークアップをして:
<p><span class="outer">Ap <span class="inner">ji</span></span></p>
スタイルが次の場合:
span.inner { font-size: .75em; }
親のベースラインテーブル (.outer
) と子のベースラインテーブル (.inner
) )はフォントサイズが異なるため一致しない。優先ベースラインがalphabeticベースラインなので、子のボックスは親のalphabeticベースラインに合わせて配置される。
上の例で、 ‘vertical-align:
super
’ を .inner
の要素に適用した場合、親と同じ配置ルールが子の .inner
にも使われる。唯一の違いは、ベースラインの配置に加えて、子が上付き文字の位置にシフトされることである。
span.inner { vertical-align: super; font-size: .75em; }
どの筆記体型にも本来のテキストの方向が1つ以上ある。ゆえに、近代の書記方法はテキストの方向について3つに分類することができる:
近代の組版では、全グリフが水平方向に配置される。これはテキストを水平に配置するときに使われている。テキストを垂直に配置するためには、ユーザエージェントはテキストを水平方向から変換する必要がある。この変換はbi-orientational transform(bi-orientationalにおける変換)であり、2つのタイプがある:
本来のテキスト方向として縦方向を持つ書記方法には固有のbi-orientational変換があり、それは縦書きでの方向を訂正する。例えばCJK(中国/日本/韓国)の文字変換があり、文字は常に直立状態にされる。モンゴル文字等の他の書記方法では回転させる。(固有の両方向変換は付録Bを参照)
本来のテキスト方向として縦方向を持たない書記方法は、回転(横倒しにセットされる)か変換(直立状態にセットされる)のどちらも可能である。使用される変換は、正しさよりはむしろテキストの使われ方に応じたスタイルが優先される。‘text-orientation
’ プロパティの ‘upright-right
’ と ‘upright
’ の値は、水平のみのテキストを回転するのか、それとも変換するのかを指定するために用意されている。
‘text-orientation
’ の値である ‘sideways-left
’, ‘sideways-right
’, ‘sideways
’ は装飾的なレイアウト効果のために、そして下から上へよむ文章のCSSサポート制限を回避するために提供されている。
理想的には、句読点は主要な書記方法が水平のみか垂直かに応じて、横倒しか直立状態にとなるべきである。しかし、この情報(書字方向のようなコンテンツのプロパティ)を我々は利用できない(縦書きのコンセプトが使われているUTN 22では、この問題に対応すべく、‘direction
’ 経由やHTMLの dir
属性で情報が与えられる)。現在の仕様では、East Asian Widthプロパティを使うことで問題に対処している。しかし、このアプローチは縦書きの書記方法が横書きのみの書記方向と句読点を共有していない場合しか有効でない。
text-orientation
’ プロパティ名称: | text-orientation |
---|---|
値: | upright-right | upright | sideways-right | sideways-left | sideways | use-glyph-orientation |
初期値: | upright-right |
適用対象: | 表の行グループ、表の列グループ、表の行、表の列を除く全要素 |
継承: | される |
パーセンテージ: | N/A |
メディア: | visual |
算出値: | 指定した値 |
このプロパティは行中の文字の向きを指定し、行の向きを設定する。現在の値はvertical writing modeの時のみ有効である。
読みやすさを考慮し、本章ではcharacter(文字)という言葉を extended grapheme cluster(書記素クラスタ) の意味で使用する。Characters and Propertiesに詳細が記述されている。
この値の意味を以下に示す:
縦書きでは、horizontal-onlyの表記方法で使われていた文字は横倒しになる。言い換えると、横書きの一般的な文字の向きから90度時計回りに回転される。
縦書きでは、この値はvertical typographic modeの要素に設定され、これが縦書きの表記方法の主要なレイアウトの典型例となる。
縦書きでは、horizontal-onlyの表記方法で使われていた文字は直立状態となる。言い換えると、これは横書きの一般的な文字の向きでである。これらの表記方法からの文字整形は孤立した形となる。垂直の表記方法で使われている文字はそれ固有の文字方向に設定され、形も普通である。可能であれば、縦書き用グリフと縦書きフォントのメトリクスがテキストに設定される。ユーザーエージェントは何も持たない書記素クラスタのために、縦書き用フォントのメトリクスを合成しなければならない。
バイダイの再配置のために、この値は全ての文字をstrong LTRとして扱わせている。この値は、‘direction
’ の値 ‘ltr
’ が使われる原因となっている。
縦書きでは、この値はvertical typographic modeの要素に設定される。
縦書きでは、この値はテキストを水平レイアウト(横書き用グリフとメトリクスを使用する)にセットするが、時計回りに90度回転される。この値は horizontal typographic modeの要素に設定される。
縦書きでは、この値はテキストを水平レイアウト(横書き用グリフとメトリクスを使用する)にセットするが、反時計回りに90度回転される。この値はhorizontal typographic modeの要素に設定される。
親が ‘sideways-left
’ でないものがインライン非置換要素に設定された場合は、bidi isolationが強制される: ‘unicode-bidi
’ の値が ‘normal
’ と ‘embed
’ なら、算出値は ‘isolate
’ となり、‘bidi-override
’ なら算出値は ‘bidi-override isolate
’ となる。インラインの先祖(ブロックコンテナのルートインラインを含む)から伝播したテキスト装飾の位置は鏡像関係にならないが、要素によって導入されたテキスト装飾には鏡像関係となったベースラインテーブルを用いて位置付けが行われる。
同様に、要素のインライン子要素の ‘text-orientation
’ の値が ‘sideways-left
’ 以外であった場合、相似の変換(そしてbidi isolation)が適用される。
この値はwriting modeが ‘vertical-rl
’ の場合に ‘sideways-right
’ を指定したとき、またwriting modeが ‘vertical-lr
’ の場合に ‘sideways-left
’ を指定したときと同じである。横組のみのドキュメントを縦組にするときに役立つ。
[SVG11] ではテキストの方向をコントロールすることを目的とした ‘glyph-orientation-vertical
’ プロパティと ‘glyph-orientation-horizontal
’ プロパティを定義している。これらのプロパティは非推奨とされており、非SVGエレメントには適用されない。実装がこれらのプロパティをサポートしている場合、SVG要素に ‘use-glyph-orientation
’ が設定されると、SVGの ‘glyph-orientation-vertical
’ プロパティと ‘glyph-orientation-horizontal
’ プロパティがテキストのレイアウトをコントロールする。これらを実装したユーザーエージェントは、SVG用のデフォルトユーザーエージェントスタイルシートとして、 ‘text-orientation: glyph-orientation
’ を全てのSVGテキストコンテンツ要素に設定しなければならない。
その他全てのコンテンツと、glyph orientation プロパティをサポートしていない実装においては、‘use-glyph-orientation
’ は ‘upright-right
’ と同様に振る舞う。
この値は抜ける恐れがあるもので、おそらくCRまでには落とされるだろう。
一般的なもの、継承されたもの、未知のカテゴリの文章に属する文字の向きはAppendix Cに定義されている。このルールに対するフィードバックを募集しています
フォントのデータに依存しない全ユニコード文字の向きに関する定義の明快な標準定義が必要である。
横組のみのドキュメントのルート要素に、 ‘sideways
’ が設定された例を以下に示す。制作者はテキストが ‘vertical-rl
’ か ‘vertical-lr
’ かを気にすることなく、ドキュメントの ‘writing-mode
’ を適切に設定することができる。
:root { text-orientation: sideways; } caption { caption-side: left; writing-mode: vertical-lr; } thead th { writing-mode: vertical-lr; } h1.banner { position: absolute; top: 0; right: 0; writing-mode: vertical-rl; }
[CSS21] では、ボックスレイアウトモデルが詳細に定義されている。しかし、writing modeが ‘horizontal-tb
’ の場合しか定義していない。方向と次元を抽象的かつ適当に置き換えていれば、‘horizontal-tb
’ 以外のwriting modeでのCSSボックスレイアウトはCSS2.1のボックスレイアウトと似たものになる。本章では他のwriting mode用ボックスレイアウトを定義するために抽象的な方向と次元の用語、そしてそれらのマッピングを定義し、レイアウトの概念を抽象化する将来の機能のための用語を提供する。
left, right, top, and bottom という用語は、例えばページとは独立した組方向に対しても、常に物理的に解釈される。2つの抽象的なマッピングはこれらの方向を可能にする。line-relativeとflow-relativeである。定義を以下に示す。
これらの用語はテキストの振る舞いに由来するが、これらの方向を表す言葉はラインボックスを全く含まないボックスのためにも存在している。これらは ‘writing-mode
’ プロパティ、‘text-orientation
’ プロパティ、‘direction
’ プロパティの値から直接算出される。
‘writing-mode
’ により決まる行送り方向は、行の方向が水平か垂直かを決定するが、それは行内のコンテンツがどう配置されるかについて何も決定していない。
line-relative directions にはover, under, line-left, line-rightがある。 ‘text-orientation
’ と ‘writing-mode
’との組み合わせから得られる line orientationは、行のどちら側が "top" であるかを決定する。よって、行のunder (ascender側)と over (descender側)が決まる。行の方向は行の横軸における配置(‘vertical-align
’)に影響する。
行の方向が垂直であるline boxには、over と under に加え、"left" と "right" がある。それらがボックスの端である line-left と line-right である(行の物理的な左側と右側とは異なる)。ボックスの line-left の端は名目上 LTR のテキストが開始される端となっている。ボックスの line-right の端は名目上 RTL のテキストが開始される端となっている。 ‘writing-mode
’ プロパティと ‘text-orientation
’ プロパティによって、ボックスのline-left側は物理的な左、上、下となりうる。
over と under の directions はよく before と after を同じ方向にマッピングするが、そのマッピングは ‘writing-mode
’ と ‘text-orientation
’ の組み合わせによって逆になることに注意すること。
flow-relative directions(送り相対の方向) は before, after, start, endからなる。LTR ‘でwriting modeが horizontal-tb
’ であれば、対応するdirectionはそれぞれtop、bottom、left、rightとなる。
ボックスの before の端は、名目上ブロック進行の手前の端になり、‘writing-mode
’ プロパティで決定される。同様に after の端はブロック進行の後ろ端になる。
ボックスの start の端は、名目上テキストの字詰めが始まる端になる。‘direction
’ の値が ‘ltr
’であるボックスでは、line-left の端になる。‘direction
’ の値が ‘rtl
’であるボックスでは、line-right の端になる。startの端と向かい合わせが end の端になる。
‘writing-mode
’ プロパティだけに依存してボックスの before と after を決定しているが、ボックスの start と end の端は ‘writing-mode
’ プロパティだけでなく ‘direction
’ プロパティと ‘text-orientation
’ プロパティにも依存していることに注意すること。
英語のブロック (LTR-TB):
<----- width / measure -----> top side/ before side +------------------------------+ A left side/ | ---inline direction ---> | right side/ | start side | | | end side | | | block * horizontal * | height/ | | direction *writing mode* | extent | V | | +------------------------------+ V bottom side/ after side
日本語の縦書きブロック (TTB-RL):
<----- width / extent ------> top side/ start side +------------------------------+ A left side/ | <---block direction--- | right side/ | after side | | | before side | | * vertical * inline| | height/ | *writing mode* direction| | measure | V | | +------------------------------+ V bottom side/ end side
抽象と物理をマッピングし要約した表を以下に示す:
‘writing-mode ’
| ‘horizontal-tb ’
| ‘vertical-rl ’
| ‘vertical-lr ’
| |||||||
---|---|---|---|---|---|---|---|---|---|---|
‘text-orientation ’
| — | ‘sideways-left ’
| *right | ‘sideways-left ’
| *right | |||||
‘direction ’
| ‘ltr ’
| ‘rtl ’
| ‘ltr ’
| ‘rtl ’
| ‘ltr ’
| ‘rtl ’
| ‘ltr ’
| ‘rtl ’
| ‘ltr ’
| ‘rtl ’
|
extent | height | width | ||||||||
measure | width | height | ||||||||
before | top | right | left | |||||||
after | bottom | left | right | |||||||
start | left | right | bottom | top | top | bottom | bottom | top | top | bottom |
end | right | left | top | bottom | bottom | top | top | bottom | bottom | top |
over | top | left | right | left | right | |||||
under | bottom | right | left | right | left | |||||
line-left | left | bottom | top | bottom | top | |||||
line-right | right | top | bottom | top | bottom |
縦組でのCSSボックスレイアウトは横組のレイアウトに似ており、以下に示す原則の概要に従う:
横組にて水平次元に適用されるレイアウトの算出ルール(CSS2.1のSection 10.3のものなど)は、縦組の垂直次元へ適用される。同様に、横組にて垂直次元に適用されるレイアウト算出ルール(CSS2.1のSection 10.6のものなど)は、縦組の水平次元に適用される。従って:
幅を参照するレイアウトルールは、代わりに高さを使用する。その逆も同様。
‘*-left
’ と ‘*-right
’ のボックスプロパティ(border, margin, padding)を参照するレイアウトルールは、代わりに ‘*-top
’ と ‘*-bottom
’ を使用する。その逆も同様。ボックスのどちらのサイドのプロパティは、変更せずに適用される。値を入力した側のみレイアウトの算出値が変化する。例えば、‘margin-left
’ プロパティはまだ左側のマージンに影響している。しかし、writing modeが ‘vertical-rl
’ の場合は ‘margin-bottom
’ の代わりにmargin collaspe(マージンの折りたたみ)が発生する。
左と右のどちらかを選択する ‘direction
’ プロパティに依存するレイアウトルール(例えば、overflow、overconstraint resolution、‘text-align
’ の初期値、表の列順序)は、start と end に抽象化されて、適切に適用される。
例えば、縦組では表の行が垂直で、表の列が水平になる。‘vertical-rl
’ ‘upright-right
’ ‘rtl
’の表では、最初の列が底辺(the start side)になり、最初の行が右(the before side)になる。表の ‘margin-right
’ と ‘margin-left
’ はbefore側(右側)のマージンとafter側(左側)のマージンとしてそれぞれ折りたたまれる。もし表が ‘margin-top
’ と ‘margin-bottom
’ の値を ‘auto
’ としていたなら、行送り方向からみて垂直にセンタリングされる。
たとえばテキストの配列、フローティング、リストマーカーの配置のような、主にラインボックスの右側や左側、横方向の平行線を参照するために、topやbottomに相当するものを持っていない機能は、line left と line right を右側と左側としてそれぞれ参照している。
同様に、アンダーライン、オーバーライン、baseline alignment (残念ながら名前は ‘vertical-align
’)のような、主にラインボックスの上側や下側、縦方向の水平線を参照するために、左や右に相当するものをもっていない機能は、over と under を上側と下側としてそれぞれ参照している。
マッピングの詳細は以下を参照のこと。
いくつかのプロパティは以下のように論理的に振る舞う:
border-spacing
’ プロパティの1つめと2つめの値は、それぞれ行と列の間のスペースを表し、水平方向と垂直方向のスペーシングであるとは限らない。[CSS21]
line-height
’ プロパティは常に論理的な高さを参照している。[CSS21]
高さのプロパティ(‘height
’,
‘min-height
’, ‘max-height
’)は物理的な高さを参照しており、幅のプロパティ(‘width
’,
‘min-width
’, ‘max-width
’)は物理的な幅を参照している。しかし、ボックスの次元を算出する際に使われるルールは論理的なものである。
CSS2.1 Section 10.3の算出ルールがインライン次元の寸法に使われている場合、そのルールは寸法(物理的な幅または物理的な高さの場合がある)、開始と終了のマージン、およびborderに適用される。同様に、CSS2.1 Section 10.6の算出ルールがブロック次元の寸法に使われている場合、そのルールは範囲、beforeマージン、afterマージン、パディング、borderに適用される。[CSS21]
当然の結果として、CSS2.1では包含ブロック幅から常に相対的に算出されている、マージンとパディングのプロパティにおけるパーセンテージは、CSS3では包含ブロックの measure(寸法)から相対的に算出されることになる。
writing-mode
’ を持つケースは2つ考えられる:
vertical-rl
’ と ‘vertical-lr
’)
horizontal-tb
’ と ‘vertical-rl
’)
2つめのケースを取り扱うため、CSSのレイアウト算出は2フェーズに分かれる: ボックスのサイズ決定と、そのflowの中でのボックスの配置である。サイズ決定フェーズ—ボックスの幅と高さの算出を行う—では、ボックスの次元と包含ブロックが、measure、extent、要素のwriting modeに応じて計算された算出値にマッピングされる。配置フェーズ—オフセット、マージン、ボーダー、パディングの算出を行う—では、ボックスの次元と包含ブロックが、measure、extent、包含ブロックのwriting modeに応じて計算された算出値にマッピングされる。
例えば、縦組のブロックが横組のブロックの中に配置されている場合は、小ブロックの物理的高さ(measureである)が算出されるとき、親ブロックの物理的高さはmeasureではなくextentであるにもかかわらず、親ブロックの物理的高さがこの包含ブロックのmeasure算出に利用される。
auto marginは包含ブロックのwriting modeと矛盾がないように解決されているので、送り方向が直交するブロックは、ちょうどauto marginを利用する別のブロックレベル要素のように、包含ブロックの中で一度サイズを決定し、整列かセンタリングを実施することができる。
CSSにおける包含ブロックでは一般的にmeasureが定義されているが、extentは定義されていない。これは通常CSS2.1で包含ブロックのheightが ‘auto
’ のときに発生する。例を挙げると、10.3.3によって幅が計算されるが、extentはその内容に依存する。このようなケースでは available measure が包含ブロックのmeasureとして定義される。しかし、available extent(なければ包含ブロックのextent)は無限になる。
送り方向が直交する場合は、反対の事象が発生するようになる。 available extent が定義されるが、available measure は無限になる。このようなケースでは、包含ブロックのmeasureにおけるパーセンテージは定義できないので、初期包含ブロックのサイズがこのようなパーセンテージを計算するための fallback measure として代わりに使用される。
送り方向が直交する要素のmeasureが ‘auto
’ の場合は、measureは初期包含ブロックのavailable measureサイズを使った fit-content (shrink-to-fit(縮めて合わせる)) で計算される。
ユーザエージェントがマルチカラムをサポートしているなら [CSS3COL]、要素のextentかavailable extentが定義されているが、要素のmeasureが ‘auto
’の場合は以下のようになる:
column-count
’ と ‘column-width
’ が両方とも ‘auto
’ なら、使用される ‘column-width
’ は available measure の fallback measure として使っている fill-available measure として計算される。
結果、マルチカラム要素で使用されるmeasureが計算される。マルチカラム要素内で、コンテンツの折り返しや改ページもない場合は、使用されるmeasureは要素のコンテンツの max-content measure となる。そうでなければ使用される列幅、列数、列間の幅から計算される。
要素で使用されるextentは、使用される列のextent(もし複数カラムが使われて居たなら)か、コンテンツの max-content extent のどちらかとなる。
これはオーバーフローしたコンテンツを除き、前のセクションで定義したオートサイジングのアルゴリズムと同じ振る舞いをすべきである。包含ブロックの側から離れていこうとする代わりに、包含ブロックの送り方向が列としてひとまとめにされることで、T字型のドキュメントとなるのを回避している。
この章は参考である。
改ページについては、CSS2.1のルールが縦組や送り方向が直交する場合においてもそのまま使われている: ラインボックス内で改ページの機会はなく、改ページはラインボックス間のみである。 しかし、[CSS3COL] をサポートするユーザーエージェントは、列の間(幅が0となる可能性がある)で改行することがある。
もしルート要素によって作られた改ページの流れからコンテンツが外に溢れた場合は、ユーザエージェントはそのコンテンツを表示する必要がないことに注意すること。長いテキストで組方向を混在させたい作者は、ドキュメントの改ページ方向に送られる全てのコンテンツを表示させるために、CSS columnsの利用を推奨する。
言い換えると、あなたのドキュメントが2つのスクロールバーを必要とする場合、その文書はおそらく全て表示されない。全てを確実に表示させたいなら、例えば columns を利用してレイアウトの固定し、全てのスクロール(そして改ページも)を1つの方向にすること。T字型のドキュメントはうまく印刷されない傾向がある。
送り相対方向は要素の包含ブロックのwriting modeを考慮して算出され、ボックスプロパティ(margins, borders, padding)に関する相対レイアウトルール、包含ブロック無いのボックス配置に関連する各種プロパティ(‘float
’, ‘clear
’, ‘top
’, ‘bottom
’, ‘left
’, ‘right
’)で使われる。 インライン要素では、親要素のwriting modeが代わりに使われる。
例えば、ボックスのインライン次元が over-constrainedの時にドロップされるマージンは、包含ブロックのwriting modeによって決定されるend marginである。
margin collapsing rules は top margin の代わりにbefore margin へ、bottom margin の代わりに after margin へ、厳密に適用される。同様に before padding と before border は top padding と top border の代わりに、after padding と after border は bottom padding と bottom borderの代わりとなる。これは毎回のbefore marginとafter marginの折りたたみのみを意味することに注意すること。
送り相対方向は要素のwriting modeを考慮して算出され、要素のコンテンツに関する相対レイアウトに用いられる:
text-align
’ プロパティの初期値はラインボックスのstart edgeを配置する。
text-indent
’ プロパティはラインボックスのstart edgeからのインデントを行う。
line-relative direction(行相対方向)には over, under, line-left, line-right がある。LTR ‘horizontal-tb
’ のwriting modeでは、それぞれtop, bottom, left, right 方向に対応している。
line-right direction と line-left direction は要素のwriting modeを考慮して算出され、以下のプロパティの値である ‘left
’ と ‘right
’ の解釈に使用される:
text-align
’ プロパティ [CSS21]
line-right direcrion と line-left direction は要素の包含ブロックのwriting modeを考慮して算出され、以下のプロパティの値である ‘left
’ と ‘right
’ の解釈に使用される:
over direction と under direction は要素のwriting modeから算出され、以下のように、ラインボックスの "top" (over edge) と "bottom" (under edge) の解釈を定義するために使用される:
vertical-align
’ プロパティでは、ラインボックスの "top" は over edgeであり、 "bottom" は under edge である。正の長さとパーセンテージの値は、ベースラインを over edge 方向へシフトする。[CSS21]
text-decoration
’ プロパティでは、underlineがテキストの下側に、overlineがテキストの上側に描かれる。[CSS21]CSS Text Moduleはこの点を詳しく定義し、underline と overline の配置を制御する機能を提供している。[CSS3TEXT]
以下の値はその定義において純粋に物理的であり、writing modeの変化に対応しない:
clip
’ プロパティの ‘rect()
’ [CSS21]
box-shadow
’ プロパティと ‘text-shadow
’ プロパティのオフセット
caption-side
’ keywordsProperty: | ‘caption-side ’
|
---|---|
新しい値: | ‘before ’ |
‘after ’
|
初期値: | before |
適用範囲: | CSS2.1と同じ |
継承: | CSS2.1と同じ |
パーセンテージ: | CSS2.1と同じ |
メディア: | CSS2.1と同じ |
算出値: | 指定した値 |
このモジュールは新しい2つの値を ‘caption-side
’ プロパティに導入する: ‘before
’ と ‘after
’ である。これらはそれぞれテーブルボックスの前と後ろにキャプションを配置する。‘horizontal-tb
’ writing modeの表では、これらはそれぞれ ‘top
’ と ‘bottom
’ が存在する場合と同じである。[CSS21]
‘top-outside
’ と ‘bottom-outside
’ をサポートする実装のために、‘before-outside
’ と ‘after-outside
’ への対応も同様に導入されるだろう。
‘caption-side
’ プロパティの値 ‘top
’ と ‘bottom
’ をサポートするが、side caption(例えば、横組における ‘left
’ と ‘right
’ のキャプション)をサポートしない実装は、縦組において ‘top
’ と ‘bottom
’ を ‘before
’ として扱わなければならない。
side caption(例えば、古い CSS 2.0 仕様 [CSS2]の ‘left
’ と ‘right
’ の値)をサポートする実装では、このモジュールはこれと同様に動作し、table要素のwriting modeを考慮して算出したテーブルボックスのキャプションを、stat sideかend sideに配置するよう、‘start
’ と ‘end
’ の値を導入する。このような実装のために、‘top
’ と ‘bottom
’ の値はキャプションを表のtop sideとbottom sideにそれぞれ配置すべきである。
CSS2.0のside caption model にはいくつかの問題があり、CSS3では異なる定義がされることになるだろう。
CSS2.1のpaged mediaは全てのページを右ページか左ページに分類している。ページの進行方向は、見開きで最初にめくるページか左か右かを決定し、また最初のページがデフォルトで左か右かを決定している。これらは以下に示すwriting directionに依存する。
writing-mode
’ が ‘vertical-rl
’ か、同じくルート要素の ‘writing-mode
’ が ‘horizontal-tb
’ で ‘direction
’ が ‘rtl
’ の場合、ページ進行方向は右から左になる。
writing-mode
’ が ‘vertical-lr
’ か、同じくルート要素の ‘writing-mode
’ が ‘horizontal-tb
’ で ‘direction
’ が ‘ltr
’ の場合、ページ進行方向は左から右になる。
(無効化されない限り、文書の最初のページは見開きの後半から始まっている。例えば、ページ進行方向が左から右だと、右から始まる。)
text-combine-horizontal
’ プロパティName: | text-combine-horizontal |
---|---|
値: | none | all | [ [digits <integer> | ascii-digits <integer> ] || [ alpha <integer> | latin <integer> ] || alphanumeric <integer> ] |
初期値: | none |
適用範囲: | 置換不能なインライン要素 |
継承: | される |
パーセンテージ: | N/A |
メディア: | visual |
算出値: | 指定した値 |
このプロパティは1文字分のスペースに複数文字を合成可能にするものである。このプロパティは縦組でのみ効果がある。値の意味を以下に示す:
text-combine-horizontal: none
’ として扱われる。
text-combine-horizontal: all
’ のインラインボックスであるかのように扱われる。このプロパティでは、horizontal digit は vertical script に属していない、Number category (N*)に属する任意の文字である。
text-combine-horizontal: all
’ のインラインボックスであるかのように扱われる。この定義は単純化のために ‘digits
’ へ置き換えられる予定である。
text-combine-horizontal: all
’ のインラインボックスであるかのように扱われる。このプロパティでは、horizonal letter は vertical script に属していない、Letter category (L*)に属する任意の文字である。
text-combine-horizontal: all
’ のインラインボックスであるかのように扱われる。このプロパティでは、Latin letter はラテン文字に属しており、 Letter category (L*)に属する任意の文字である。
この定義は単純化のため ‘alpha
’ へ置き換えられる予定である。
text-combine-horizontal: all
’ のインラインボックスであるかのように扱われる。
‘all
’ と ‘none
’ を除く全ての値は仕様から落ちる可能性がある。我々は、CRにどれを採用すべきなのか?
‘text-combine-horizontal: all
’ によってテキストが合成されると、テキストが合成されたグリフは、横組でline-heightが1emのインラインボックスのコンテンツのように水平方向にスタックされる(改行やletter-spacing(文字間隔)などを除くが、指定されたフォントの設定を使用する)。合成物の実サイズは1em四方であると仮定され、四角からはみ出たものはレイアウト時に測定されない。ユーザーエージェントはグリフを1emの四角の中で水平および垂直方向にセンタリングすべきである。このような四角で選択される合成物のベースラインは、baseline alignment shiftより先に、親インラインボックスのtext-over baselineとtext-under baselineとの間でセンタリングされる。バイダイ配置、改行、圏点、テキスト装飾などのテキストレイアウト目的で、合成物はObject Replacement CharacterのU+FFFCを表す1つのグリフとして扱われる。
いくつかのフォントにおいては、表意グリフが、幅1emだが高さ1em未満のような圧縮されたデザインとなっている。そのようなフォントに対応するため、ユーザエージェントは水 U+6C34のadvance heightに合わせて合成物のコンテンツを垂直方向へスケーリングする。
CSSのfullwidth transformation(‘text-transform: full-width
’ [CSS3TEXT] か ‘font-variant-east-asian-width: full-width
’ [CSS3FONT])は、1文字以上の合成テキストのためにオフになる。
東アジアのドキュメントでは、‘text-combine-horizontal
’ の効果が日付の構成文字や頭文字語のようなLatin-baseの文字列表示によく使われており、行の組方向に関係なく横組となる:
この図は以下のCSSの結果である。
date { text-combine-horizontal: digits 2; }
マークアップは次のようになる:
<date>平成20年4月16日に</date>
日本では、この効果は 縦中横として知られる。
以下の例は ‘text-combine-horizontal: digits 2
’ を、数字だと判明しているコンテンツの一部ではなく、ドキュメント全体に適用したもので、意図しない結果を招く可能性がある。
<p>あれは10,000円ですよ!</p>
text-combine-mode
’ プロパティ名称: | text-combine-mode |
---|---|
値: | auto | compress | [ no-compress || use-glyphs ] |
初期値: | auto |
適用範囲: | 置換不能なインライン要素 |
継承: | される |
パーセンテージ: | N/A |
メディア: | visual |
算出値 | 指定した値 |
このプロパティは、‘text-combine-horizontal
’ を用いて1文字分のスペースへの文字合成が指定されたときに、複数文字がどのように合成されるのかをコントロールする。値の意味を以下に示す:
利用可能な分数幅のグリフを持つフォントでも、全ての文字に対して分数幅グリフを持っているわけではないので、必要とされる送り幅と一致しない場合、ユーザエージェントは個別に各グリフを圧縮するかパディング(両側均等に)して、‘use-glyphs
’ で想定される送り幅を確保しなければならない。(このステップは ‘no-compress
’ が指定されている場合には適用されない)
use-glyphs
’ で合成するときは、サイズ要求に合わないと ‘use-glyphs
’ ごとにグリフを置換するが、グリフの圧縮は行わない。この値では、グリフが大幅に行をオーバーフローする可能性がある。
主な変更点は次のとおり:
unicode-bidi
’ で許容される値の組み合わせを変更し、同様にインライン要素で発見的手法を使えるように ‘plaintext
’ を定義
text-orientation
’ の値であった ‘vertical-right
’ の名称を ‘upright-right
’ へ変更
text-orientation
’ の値であった ‘rotate
’ の名称を ‘sideways
’ へ変更
text-orientation
’ の値であった ‘auto
’ の名称を ‘use-glyph-orientation
’ へ変更し、at-risk(仕様から落ちる可能性がある)とした
vrt2
機能への参照を削除するために縦組のためのルールを微調整し、synthesis rules 等の様々な記述の誤りと記載漏れを修正
text-combine
’ プロパティの名称を ‘text-combine-horizontal
’ へ変更し、character class にて auto-combine 機能を追加
text-combine-mode
’ プロパティを追加
適合性要件は、記述的な断定とRFC 2119の用語とを組み合わせて表現される。この文書の標準的パーツにある “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” のキーワードは、RFC 2119表記のように解釈される。だが、読みやすさを考え、本仕様においてこれらのキーワードは全てを大文字にしない。
本文用の全てのテキストは、明示的な非標準、例、注のマークがある箇所を覗いて標準に即している。[RFC2119]
本文用の例は “for example” という言葉を使うか、class="example"
を使って標準的文書と分けて紹介される。例えば次のようになる:
This is an example of an informative example.
参考情報となる注は “Note” で始まるか、class="note"
を使って標準的文書と分離される。例えば次のようになる:
Note, this is an informative note.
CSS Writing Modes Level 3 の適合クラスには次の3つが定義されている:
スタイルシートは、このモジュールに定義されたプロパティを使用する宣言が、全て包括的なCSS文法およびこのモジュールの中で与えられるプロパティ個々の文法に対してvalidな値を持っている場合、CSS Writing Modes Level 3に準拠している。
レンダラは、適切な仕様によって定義されるスタイルシートの解釈に加え、CSS Writing Mides Level 3 で定義される全ての機能を正しくパースし、それに応じてドキュメントをレンダリングすることでサポートした場合、CSS Writing Modes Level 3に準拠している。しかし、デバイスの制限によってがユーザーエージェントが正確にレンダリングできない場合、ユーザーエージェントが非準拠となる。(例えば、ユーザーエージェントがモノクロのモニタでカラーをレンダリングする必要の無い場合)
オーサリングツールは、一般的なCSS文法および本モジュールにおける機能の個々の文法に従って構文的に正しくスタイルシートを書き、本モジュールで説明されているスタイルシートの他全ての適合性要件を満たしている場合、CSS Writing Modes Level 3に準拠している。
ドキュメント制作者がフォールバックの値としてforward-compatible parsing rules(上位互換の解析規則)を活用出来るように、CSSレンダラは規則、プロパティ、プロパティの値、キーワード、その他使用可能なサポートのレベルがない構文要素を、invalid(そして必要に応じて無視)として扱う必要がある。特に、ユーザーエージェントは1つの複数値プロパティ宣言において、サポートされていないコンポーネントの値と、尊重されサポートされている値を選択的に無視してはならない。もし任意の値がinvalidと見なされている(サポートされていない値はそうでなければならない)場合、CSSは宣言全体が無視されている必要がある。
将来のCSS機能との衝突を避けるために、CSS2.1仕様では、CSSの独自かつ実験的な拡張用に prefixed syntax を用意している。
W3CプロセスのCandidate Recommendation(CR、勧告候補)へ仕様が到達するまでは、CSS機能の全実装は実験的なものとみなされる。CSS Working Group は、実装がそのような機能(W3C Working Draft のものを含む)向けにベンダプレフィックスの構文を使用するよう推奨している。これでドラフトの将来的な仕様変更による非互換性を回避することができる。
仕様が Candidate Recommendation の段階に達すると、非実験的な実装が可能になり、実装者は、仕様に対して正しく実装したことを実装できる任意のCR段階の機能を、プレフィックスのない実装としてリリースする必要がある。
CSSの実装ごとの相互運用性を確立し維持するために、CSS Working Group は非実験的なCSSレンダラに対し、非実験的なCSS機能をリリースする前に、実装レポート(そして、もし必要なら、実装レポートで使用したテストケース)を W3C へ提出するよう求めている。W3Cへ提出されたテストケースは、CSS Working Groupによるレビューと修正の対象となる。
テストケースと実装レポートの提出に関する詳細情報は、CSS Working Groupのウェブサイト( http://www.w3.org/Style/CSS/Test/ ) にある。質問は直接 public-css-testsuite@w3.org メーリングリストまで。
この仕様を Proposed Recommendation(PR、勧告案)にするためには、各機能で少なくとも2つの独立した、相互運用可能な実装がなくてはならない。各機能は、プロダクトの別のセットによって実装されてもよく、すべての機能が1つの製品で実装される必要はない。この基準のために、我々は以下の用語を定義する:
仕様は、少なくとも6ヶ月の間はCandidate Recommendationのままである。
John Daggett, Martin Heijdra, Yasuo Kida, Tatsuo Kobayashi, Toshi Kobayashi, Ken Lunde, Nat McCully, Paul Nelson, Kenzou Onozawa, Michel Suignard, Taro Yamamoto, Steve Zilles
Unicode は、CSS Writing Modesで参照される3つの codepoint-level プロパティを定義している:
いくつかのセクションでは(前述したように)、character という言葉は[UAX29] にて extended grapheme cluster(拡張書記素クラスタ) として定義されている。これは、言語を使う人が文字や文章の基本的な単位と考えているものとほぼ等価である(単一のUnicode codepointではない可能性がある)。ユーザーエージェントはUnicodeで許容されている定義をさらに調整してもよい。
Unicodeは文字のプロパティを定義しているが、‘text-orientation
’ と Vertical Typesetting Synthesis については、書記素クラスタのプロパティを決定する必要がある。CSS Writing Modes用に、書記素クラスタのプロパティはそのBase Character(先行する文字に結合したりしない文字で、制御文字などでもないもの。基底文字)から与えられる—次の2つのケースを除いて。
このセクションは規範である。
この付録では、Unicode 6.0 [UNICODE] におけるスクリプトの方向プロパティについて書いている。明示的に掲載されていないスクリプトは、水平方向のみであるとみなされる。Unicode 文字のスクリプトの分類は、[UAX24] で与えられる。
Code | Name | Transform |
---|---|---|
Bopo | Bopomofo | translate |
Egyp | Egyptian Hieroglyphs | translate |
Hira | Hiragana | translate |
Kana | Katakana | translate |
Hani | Han | translate |
Hang | Hangul | translate |
Mong | Mongolian | rotate |
Phag | Phags Pa | rotate |
Yiii | Yi | translate |
例外:この仕様のために、全ての fullwidth (F) と wide (W) の文字は、双方向変換によって translate された垂直方向のスクリプトに属するものとして扱われる。全ての halfwidth (H) 文字は双方向変換で rotate された垂直スクリプトに属する者として扱われる。一般的なスクリプトに属する [UAX11] の Neutral (N), narrow (Na), ambiguous (A) Letters (L*) は、水平方向のみのスクリプトに属するものとして扱われる。
オガム文字もまた回転する双方向スクリプトである。しかし、下から上へ進むスクリプトであるため、本仕様の目的のために、左から右への横書きとして扱われる。CSSの将来バージョンでは、下から上へ進むスクリプトを適切な取り扱いが定義される予定である。制作者は ‘text-orientation
’ の値である ‘sideways-left
’ のサポート欠如を回避することができる。
このセクションでは垂直方向テキストの自動組版のためのアルゴリズムを定義している。本セクションでは読みやすさのため、extended grapheme cluster を character に置き換えて使用している。詳細は Characters and Properties を参照のこと。
このセクションは慎重なレビューが必要である。特に U+2016–U+205F の範囲について、改善のためのフィードバックや提案を送ってほしい。
‘text-orientation
’ が ‘upright-right
’ か ‘upright
’ のどちらか一方の場合、以下の設定が推奨される:
よって、1/3スペース (U+2004) は、インライン方向に1/3文字文前進し、括弧はコンテンツを包含することが期待できる。
text-orientation
’ と Appendix B の要求どおりに設定する。
‘text-orientation
’ が ‘upright-right
’ の場合、上記で指定されていない文字には以下の設定が推奨される:
‘text-orientation
’ が ‘upright
’ なら、特に上記で指定が無い場合、全ての文字を直立に設定する。
Opentypeでは、 vertical font setting は vhea
, vmtx
, VORG
のテーブルだけでなく、vert
と vrt2
GSUBの機能により提供される。これらのいずれかが存在する場合、フォントは vertical font setting を持っているとみなされる。
ScriptExtensions.txt が、上記にリストされているものを例外として、エーゲ数字と共通インド文字を含んでいないのは、ユニコードの間違いである。これが修正されれば、特別な対応は必要ない。
このセクションは規範である。
CSSのレイアウトは、様々なレイアウト計算に使用されている自動サイジングについて、いくつかの異なるコンセプトを持っている。このセクションでは、本仕様にでのレイアウトの振る舞いと他のモジュールで使われている計算とを結びつけられるよう、より正確な用語をいくつか定義する。そして、制作者がこれらのサイズ計算に起因する次元を要素を割り当てることを可能にする、width と height のプロパティための、いくつかの新しいキーワードを定義する。
プロパティ: | ‘width ’, ‘min-width ’, ‘max-width ’, ‘height ’, ‘min-height ’, ‘max-height ’
|
---|---|
新しい値: | ‘min-content ’ | ‘max-content ’ |
‘fill-available ’ | ‘fit-content ’
|
初期値: | [CSS21] で定義されている |
適用対象: | [CSS21] で定義されている |
継承: | [CSS21] で定義されている |
パーセンテージ: | [CSS21] で定義されている |
メディア: | [CSS21] で定義されている |
算出値: | キーワードが指定されていれば指定された値、そうでなければ[CSS21] の定義どおり |
CSSには自動サイズ決定に4つのタイプがある(上記で定義されているキーワードにより、width と height のプロパティで表されているものである):
max(min-content, min(max-content, fill-available))
として定義されている。fit-content extent はブロック次元に適用されるものと同じ式から算出される。
CSS2.1のレイアウトモデルでは、非置換要素の min-content extent と max-content extent の両方がコンテンツの範囲として、CSS2.1§10.6.3 と CSS2.1§17.5.3で ‘height: auto
’ とした要素向けに定義されている。
置換要素向けには、min-content と max-content のサイズが同じであり、width と height を ‘auto
’ にして算出した置換要素のサイズと一致している。
マルチカラム要素での min-content と max-content のサイズは [CSS3COL] で定義されていない。将来仕様では定義されるであろう。
プロパティ: | ‘column-width ’
|
---|---|
新しい値: | ‘min-content ’ | ‘max-content ’ |
‘fill-available ’ | ‘fit-content ’
|
初期値: | [CSS3COL] で定義されている |
適用対象: | [CSS3COL] で定義されている |
継承: | [CSS3COL] で定義されている |
パーセンテージ: | [CSS3COL] で定義されている |
メディア: | [CSS3COL] で定義されている |
算出値: | キーワードが指定されていれば指定された値、そうでなければ [CSS3COL] の定義どおり |
‘column-width
’ の値として使用する場合は、新しいキーワードは最適なカラム幅を指定する:
min-content
’
max-content
’
fill-available
’
fit-content
’
max(min-content, min(max-content, fill-available))
にて最適なカラム幅を指定する。
HTML Strict な doctype 向けの [HTML401] で指定された バイダイの振る舞いを実現するスタイルシートのルールを以下に示す:
/* HTML dir attribute creates an embedding */ *[dir="ltr"] { direction: ltr; unicode-bidi: embed; } *[dir="rtl"] { direction: rtl; unicode-bidi: embed; } /* BDO element creates an override */ bdo[dir="ltr"] { direction: ltr; unicode-bidi: bidi-override; } bdo[dir="rtl"] { direction: rtl; unicode-bidi: bidi-override; } /* HTML4.01:8.2.6 - preserve bidi behavior if 'display' is changed */ html, body, div, address, blockquote, p, ul, ol, li, dl, dt, dd, fieldset, form, h1, h2, h3, h4, h5, h6, { unicode-bidi: isolate; }
プロパティ | 値 | 初期値 | 適用対象 | 継承 | パーセンテージ | メディア |
---|---|---|---|---|---|---|
direction | ltr | rtl | ltr | all elements | yes | N/A | visual |
‘caption-side’ | ‘before’ | ‘after’ | before | same as CSS2.1 | same as CSS2.1 | same as CSS2.1 | same as CSS2.1 |
‘column-width’ | ‘min-content’ | ‘max-content’ | ‘fill-available’ | ‘fit-content’ | as defined in [CSS3COL] | as defined in [CSS3COL] | as defined in [CSS3COL] | as defined in [CSS3COL] | as defined in [CSS3COL] |
‘width’, ‘min-width’, ‘max-width’, ‘height’, ‘min-height’, ‘max-height’ | ‘min-content’ | ‘max-content’ | ‘fill-available’ | ‘fit-content’ | as defined in [CSS21] | as defined in [CSS21] | as defined in [CSS21] | as defined in [CSS21] | as defined in [CSS21] |
text-combine-horizontal | none | all | [ [digits <integer> | ascii-digits <integer> ] || [ alpha <integer> | latin <integer> ] || alphanumeric <integer> ] | none | non-replaced inline elements | yes | N/A | visual |
text-combine-mode | auto | compress | [ no-compress || use-glyphs ] | auto | non-replaced inline elements | yes | N/A | visual |
text-orientation | upright-right | upright | sideways-right | sideways-left | sideways | use-glyph-orientation | upright-right | all elements except table row groups, rows, column groups, and columns | yes | N/A | visual |
unicode-bidi | normal | embed | [ isolate || bidi-override ] | plaintext | normal | all elements, but see prose | no | N/A | visual |
writing-mode | horizontal-tb | vertical-rl | vertical-lr | horizontal-tb | All elements except table row groups, table column groups, table rows, and table columns | yes | N/A | visual |