#?SuikaWiki/0.9 * dir 属性 (HTML, XHTML 1) [1] [[HTML]] のほとんどの[[要素型]]で定義されている [DFN[[CODE(HTMLa)[dir]] [[属性]]]]は、 [[書字方向]]に関して中立な文 ([[固有方向性]]を有しない文) の[[基底方向]]を規定します。 また、[[表]]関連の要素で使うと、やや特殊な意味を持ちます。 ( 参照。) [2] 属性値: ,値 ,意味 ,[CODE(HTML)[[[ltr]]]] ,左から右へ ,[CODE(HTML)[[[rtl]]]] ,右から左へ [[HTML4]] では、大文字・小文字を区別しません。 [[XHTML]] では、大文字・小文字を区別します。 HTML 4 や XHTML 1 のように [[DTD]] で[[列挙型]]として定義されている版の HTML では、[[属性値表記]]内で実際の値の前後に[[空白]]を入れることができますが、 互換性のためにそうするべきではありません。 [3] HTML 4 は、 [[Unicode]] の [ABBR[[[bidi]]] [bidirectonal]] 算法に従うことになっています。 文書に右から左の文字を1文字も含まないときには、 HTML 4 適合 UA は必ずしもこの算法に従う必要はありませんが、 文書が右から左の文字を1文字でも含むなら、 HTML 4 適合 UA は Unicode bidi 算法に従わなければなりません。 Bidi 算法では著者の意図した通りの書字方向にならないときには、 適宜 [CODE(HTMLa)[dir]] 属性や [CODE(HTMLe)[[[bdo]]]] 要素を使って陽に指定することができます。 なお、 HTML 4 仕様書によれば、 [CODE(HTMLa)[dir]] 属性をある要素に指定することは、 その前後に[[制御文字]] [CODE(char)[[[LRE]]]] や [CODE(char)[[[RLE]]]] や [CODE(char)[[[PDP]]]] を記述するのと同じことです。 [9] ちなみに、 HTML 4 は [CODE(HTMLa)[[[lang]]]] 属性で書字方向を決定することを禁じています。 [19] HTML 4 仕様書は、[[著者]]および[[著述ソフトウェア]]の設計者に、 [CODE(HTMLa)[dir]] 属性と Unicode 文字による指定が衝突し得ることに注意を促しています。 意図しない結果となってしまわないように、どちらかの方法のみを使用するべきです (should)。どうしても両方を使用する必要があるときには、 適当に埋め込み・上書き (override) の関係が入れ子になるように気をつけるべきです (should)。そうでない場合のレンダリング結果は未定義です。 [[#comment]] ** 属性値の継承 [4] [[ブロック水準要素]]の [CODE(HTMLa)[dir]] 属性の値は、 bidi 算法でいうところの、[[文ブロック]]の基底文方向 (ブロック全体としての方向性) を指定するものです。 ブロック水準要素の [CODE(HTMLa)[dir]] 属性の値は、 上位のブロック水準要素の [CODE(HTMLa)[dir]] 属性の値を継承します。 最上位である [CODE(HTMLe)[[[html]]]] 要素に [CODE(HTMLa)[dir]] 属性が明示されていないときの既定値は [CODE(HTML)[ltr]] です。 [5] 一方、[[行内要素]]の [CODE(HTMLa)[dir]] 属性の値は継承しません。 [CODE(HTMLa)[dir]] 属性が示された要素は、 bidi 算法的には新しい深さの埋め込み水準となります。 [6] HTML 4 仕様書 によれば、ブロック水準要素・行内要素の区別は既定の表現によります。 つまり、たとえ [[CSS]] で [CODE(CSS)[[[display]]]] を変えるようなことをしても、 HTML の水準で行われる [CODE(HTMLa)[dir]] 属性の継承値決定には影響しないということです。 たぶんこれが、 HTML 4 が [CODE(CSS)[display]] 変更を非推奨としている理由でしょう。 [20] これに関して、 には更に注意があります。 (便宜上 [[CSS]] の言葉を使って説明します。) [CODE(HTMLa)[dir]] 属性を持たない [[ブロック水準要素]]を [CODE(CSS)[display: inline]] としたときには、 [CODE(HTMLa)[dir]] 属性値を、直近のブロック要素から継承します。 [CODE(HTMLa)[dir]] 属性を持たない行内要素を [CODE(CSS)[display: block]] としたときには、 [CODE(HTMLa)[dir]] 属性の継承値を陽に指定した場合と同じ結果が得られるべきです (should)。 [7] HTML 的には属性の存在だけを提供して、あとはスタイル言語に任せることにでもしておけばうまくいったかもしれませんけど、 [[CSS2]] と HTML 4 の時間的関係を考えればやむを得ないと言うか何と言うか。 [WEAK[(スタイル言語によって異なる bidi 算法を採用していたりしたら面倒なことになりそうだよなぁ。)]] [21] [CODE(HTMLe)[[[title]]]] 要素などではどう継承するのでしょう? 属性値ではどうなのでしょう? >>7 [Q[スタイル言語によって異なる bidi 算法を採用していたりしたら]>>7]、そのスタイル言語のスタイル・シートで表示するときは HTML 4 不適合になるのだろうなあ (>>3)。 ([[名無しさん]]) [[#comment]] * 例 [10] [SAMP[english1 4WERBEH 3WERBEH 2WERBEH english5]] のように表示されるべき段落があるとします。段落自体は[[ラテン文字]]の英文ですから、 左から右に向かうべきですが、中に[[ヘブライ文字]]で書かれた文を引用しています。 この部分は右から左に向かうべきです。 このとき、 HTML [[マーク付け]]としては - [11] [SAMP(HTML)[

english1 HEBREW2 HEBREW3 HEBREW4 english5

]] - [12] [SAMP(HTML)[

english1 HEBREW2 HEBREW3 HEBREW4 english5

]] - [13] [SAMP(HTML)[

english1 [CODE(char)[RLE]]HEBREW2 HEBREW3 HEBREW4[CODE(char)[PDP]] english5

]] のどれでも OK です。 (>>13 では [CODE(HTMLe)[[[q]]]] のタグを書いていません。 [CODE(char)[RLE]] と [CODE(char)[PDP]] を [CODE(HTMLe)[q]] 要素に含めるべきか否かよくわからないからです。 視覚的マーク付けと意味的マーク付けは相性が悪い。) >>11 だけでも、 bidi 算法がヘブライ文字を見つけて右から左に向かうことを勝手に判断しますから、普通は期待通りの結果が得られます。 [14] ここで、 [SAMP[english1 4WERBEH english3 2WERBEH english5]] を考えます。ややこしいことに、引用するヘブライ文字の文が更にラテン文字の英語を含んでしまっています。 - [15] [SAMP(HTML)[

english1 HEBREW2 english3 HEBREW4 english5

]] - [16] [SAMP(HTML)[

english1 HEBREW2 english3 HEBREW4 english5

]] - [17] [SAMP(HTML)[

english1 [CODE(char)[RLE]]HEBREW2 [CODE(char)[LRE]]english3[CODE(char)[PDP]] HEBREW4[CODE(char)[PDP]] english5

]] >>15 はうまくいきません。 Bidi 算法はそもそも[[平文]]を想定しているので、 マーク付けによって木構造があっても特に取り計らってくれません。 [SAMP[HEBREW2]] と [SAMP[HEBREW4]] をそれぞれ別の埋め込み文とみなして、 [SAMP[english1 2WERBEH english3 4WERBEH english5]] としてしまいます。 このように、2階層以上に左から右、右から左の入れ子関係があるときには、 >>16 か >>17 のように陽にこれを示さなければいけません。 [18] はっきりいってこの方式は駄目ですね。 折角の木構造を生かせていない。 [[#comment]] * メモ