[1] [ABBR[[[HTML]]] [Hypertext Markup Language]] のほとんどの[[要素型]]で定義されている [DFN[[CODE(HTMLa)[dir]] [[属性]]]]は、 [[書字方向]]に関して中立な文 ([[固有方向性]]を有しない文) の[[基底方向]]を規定します。 * 仕様書 - [55] [CITE[MathML Fundamentals]] ([TIME[2010-10-21 05:51:46 +09:00]] 版) * 意味 [33] [ABBR[[[HTML]]] [Hypertext Markup Language]] のほとんどの要素型の要素の [CODE(HTMLa)[dir]] 属性は、書字方向中立文 (固有方向性を持たない文) の基底方向を定義します。 これは、要素の[[内容]]や[[属性値]]に適用されます [SRC[HTML 4.01 8.2, A.1.1.6]]。 [32] [CODE(HTMLe)[bdo]] 要素の [CODE(HTMLa)[dir]] 属性は、他の要素の [CODE(HTMLa)[dir]] 属性と少し性質が違います。 [CODE(HTMLe)[[[bdo]]]] 要素の説明を参照してください。 [34] [CODE(HTMLe)[[[table]]]] 要素の [CODE(HTMLa)[dir]] 属性は、通常の意味に加えて、表の進行方向をも規定します。 [37] [ABBR[HTML] [Hypertext Markup Language]] 4.0 12.3.3 には [CODE(HTMLe)[[[link]]]] 要素で [CODE(HTMLa)[dir]] 属性を指定するとリンク先文書のことを記述しているように書かれていましたが、 誤りであるとして後に削除されました [SRC[HTML 4.01 A.1.1.8]]。 正しくは [CODE(HTMLe)[link]] 要素でも他のほとんどの要素型と同じく、 属性値にだけ適用されます。 [WEAK[([CODE(HTMLe)[link]] 要素は[[強制空要素]]なので、内容には適用のしようがありません。)]] ** [CODE(XMLe)@en[math]] 要素 [56] [[MathML]] の [CODE(XMLe)@en[[[math]]]] [[要素]]の [CODE(XMLa)@en[[[dir]]]] [[属性]]は、[[数式]]全体の方向性を指定します。 [SRC[>>55]] * 属性値 [2] この属性は[[列挙型]]です。 ,属性値 ,意味 ,[CODE(HTML)[[[ltr]]]] ,左から右へ ,[CODE(HTML)[[[rtl]]]] ,右から左へ [[HTML 4]] では、大文字・小文字を区別しません。 [ABBR[[[XHTML]]] [Extensible Hypertext Markup Language]] では、大文字・小文字を区別します。 [ABBR[HTML] [Hypertext Markup Language]] 4 や [ABBR[XHTML] [Extensible Hypertext Markup Language]] 1 のように [ABBR[[[DTD]]] [Document Type Definition]] で[[列挙型]]として定義されている版の [ABBR[HTML] [Hypertext Markup Language]] では、[[属性値表記]]内で実際の値の前後に[[空白]]を入れることができますが、 互換性のためにそうするべきではありません。 [22] [ABBR[XHTML [[m12n]]] [XHTML のモジュール化]] 仕様書の抽象モジュール定義に [Q[[CODE[dir''*'' ("ltr" | "rtl")]]]] とかいてある [WEAK[(属性名の後の [CODE[*]] は必須を表す)]] けど、 [ABBR[DTD] [Document Type Definition]] 実装と矛盾しているし、 誤植でしょうか? ** 既定値 [57] [[MathML]] の [CODE(XMLe)@en[[[math]]]] [[要素]]では、[[既定値]]は [CODE(XML)@en[[[ltr]]]] です。これは、[[bidi]] 未対応だった [[MathML 2.0]] 以前との互換性のためです。 [SRC[>>55]] * レンダリング [3] [ABBR[HTML] [Hypertext Markup Language]] 4 では、 [[Unicode]] の [ABBR[[[bidi]]] [bidirectonal]] 算法に従うことになっています。 文書に右から左の文字を1文字も含まないときには [ABBR[HTML] [Hypertext Markup Language]] 4 適合 [ABBR[UA] [利用者エージェント]] は必ずしもこの算法に従う必要はありませんが、 文書が右から左の文字を1文字でも含むなら、 [ABBR[HTML] [Hypertext Markup Language]] 4 適合 UA は Unicode [ABBR[bidi] [bidirectional]] 算法に従わなければなりません。 [ABBR[Bidi] [bidirectional]] 算法では著者の意図した通りの書字方向にならないときには、 適宜 [CODE(HTMLa)[dir]] 属性や [CODE(HTMLe)[[[bdo]]]] 要素を使って陽に方向を指定することができます。 なお、 [ABBR[HTML] [Hypertext Markup Language]] 4 仕様書によれば、 [CODE(HTMLa)[dir]] 属性をある要素に指定することは、 その前後に[[制御文字]] [CODE(char)[[[LRE]]]] や [CODE(char)[[[RLE]]]] や [CODE(char)[[[PDP]]]] を記述するのと同じことです。 [9] ちなみに、 [ABBR[HTML] [Hypertext Markup Language]] 4 は [CODE(HTMLa)[[[lang]]]] 属性で書字方向を決定することを禁じています。 [19] [ABBR[HTML] [Hypertext Markup Language]] 4 仕様書は、 [[著者]]および[[著述ソフトウェア]]の設計者に、 [CODE(HTMLa)[dir]] 属性と Unicode 文字による指定が衝突し得ることに注意を促しています。 意図しない結果となってしまわないように、どちらかの方法のみを使用する[RUBYB[べきです] [should]]。 どうしても両方を使用する必要があるときには、 適当に埋め込み・[RUBYB[上書き] [override]]の関係が入れ子になるように気をつける[RUBYB[べきです] [should]]。 そうでない場合のレンダリング結果は未定義です。 [42] [[並び]] ([CODE(HTMLe)[[[ul]]]], [CODE(HTMLe)[[[ol]]]], [CODE(HTMLe)[[[dl]]]]) の[[記号]]・[[数字]]・用語 ([CODE(HTMLe)[[[dt]]]]) をレンダリングする位置も方向性によって変わります。 左から右なら左側、右から左なら右側になります。 [SRC[SI 4281:1998 9.3]] [[#comment]] ** 属性値の継承 [4] [[ブロック水準要素]]の [CODE(HTMLa)[dir]] 属性の値は、 [ABBR[bidi] [双方向性]] 算法でいうところの[[文ブロック]]の[[基底文方向]] [WEAK[(ブロック全体としての方向性)]] を指定するものです。 ブロック水準要素の [CODE(HTMLa)[dir]] 属性の値は、 上位のブロック水準要素の [CODE(HTMLa)[dir]] 属性の値を継承します。 最上位である [CODE(HTMLe)[[[html]]]] 要素に [CODE(HTMLa)[dir]] 属性が明示されていないときの既定値は [CODE(HTML)[ltr]] です。 [5] 一方、[[行内要素]]の [CODE(HTMLa)[dir]] 属性の値は継承しません。 [CODE(HTMLa)[dir]] 属性が示された要素は、 [ABBR[bidi] [双方向性]] 算法的には新しい深さの埋め込み水準となります。 [6] [ABBR[HTML] [Hypertext Markup Language]] 4 仕様書 によれば、ブロック水準要素・行内要素の区別は既定の表現によります。 つまり、たとえ [ABBR[[[CSS]]] [Cascading Style Sheets]] で [CODE(CSS)[[[display]]]] を変えるようなことをしても、 [ABBR[HTML] [Hypertext Markup Language]] の水準で行われる [CODE(HTMLa)[dir]] 属性の継承値決定には影響しないということです。 たぶんこれが、 [ABBR[HTML] [Hypertext Markup Language]] 4 が [CODE(CSS)[display]] 変更を非推奨としている理由でしょう。 [20] これに関して、 には更に注意があります。 [WEAK[(便宜上 [ABBR[[[CSS]]] [Cascading Style Sheets]] の言葉を使って説明します。)]] - [CODE(HTMLa)[dir]] 属性を持たない [[ブロック水準要素]]を [CODE(CSS)[display: inline]] としたときには、 [CODE(HTMLa)[dir]] 属性値を、 直近のブロック要素から継承します。 - [CODE(HTMLa)[dir]] 属性を持たない行内要素を [CODE(CSS)[display: block]] としたときには、 [CODE(HTMLa)[dir]] 属性の継承値を陽に指定した場合と同じ結果が得られる[RUBYB[べきです] [should]]。 [7] [ABBR[HTML] [Hypertext Markup Language]] 的には属性の存在だけを提供して、 あとはスタイル言語に任せることにでもしておけばうまくいったかもしれませんけど、 [ABBR[[[CSS2]]] [Cascading Style Sheets, Level 2]] と [ABBR[HTML] [Hypertext Markup Language]] 4 の時間的関係を考えればやむを得ないと言うか何と言うか。 [WEAK[(スタイル言語によって異なる [ABBR[bidi] [双方向性]] 算法を採用していたりしたら面倒なことになりそうだよなぁ。)]] [21] [CODE(HTMLe)[[[title]]]] 要素などではどう継承するのでしょう? 任意の要素の属性値ではどうなのでしょう? >>7 [Q[スタイル言語によって異なる [ABBR[bidi] [双方向性]] 算法を採用していたりしたら]>>7]、 そのスタイル言語のスタイル・シートで表示するときは [ABBR[HTML] [Hypertext Markup Language]] 4 不適合になるのだろうなあ (>>3)。 [27] の説明によれば、 [CODE(HTMLe)[[[td]]]] はブロック水準要素型らしいです。 意味的に考えても、行内要素型以外はすべてブロック水準要素型と見なしてよいのではないでしょうか。 少なくても [CODE(HTMLa)[dir]] 属性の目的では。 [29] 表の中では [CODE(SGML)[%[[cellvalign]]]] と同じ継承規則が使われると [ABBR[HTML] [Hypertext Markup Language]] 4 では規定されています。 * 歴史 [31] - [[SI 4281]]:1998 -- [CSECTION[6.1.1 The dir Attribute]] -- [CSECTION[9.3 Lists]] - [[HTML 4]] -- [CITE[8.2 Specifying the direction of text and tables: the [CODE(HTMLa)[dir]] attribute]] -- [CITE[12.3.3 Links and search engines]] -- [CITE[HTML 4 Changes]] -- [CITE[HTML 4 Changes]] [50] [[XHTML2]] の2つ目の[[作業原案]]で、前の[[原案]]にあった [CODE(HTMLe)@en[[[bdo]]]] [[要素]]が廃止され、代わりに[[大域属性]]としての [CODE(HTMLa)@en[[[dir]]]] [[属性]]に値 [DFN[[CODE(HTML)@en[[[rlo]]]]]]、 [DFN[[CODE(HTML)@en[[[lro]]]]]] が追加されています。 ;; [CITE@en[- XHTML Attribute Collections]] ([TIME[2002-12-12 23:58:38 +09:00]] 版) [51] [[W3C]] [[国際化中核作業部会]]は、自動推定することを表す値 [DFN[[CODE(HTML)@en[[[auto]]]]]] を追加することを例示中でさり気なく提案しています。 ;; [CITE@en-US[Additional Requirements for Bidi in HTML]] ([TIME[2010-03-05 16:28:54 +09:00]] 版) ** MathML [58] [[MathML 3.0]] で [CODE(XMLe)@en[[[math]]]] [[要素]]に追加されました。 * 例 [10] [SAMP[english1 4WERBEH 3WERBEH 2WERBEH english5]] のように表示されるべき段落があるとします。段落自体は[[ラテン文字]]の英文ですから、 左から右に向かうべきですが、中に[[ヘブライ文字]]で書かれた文を引用しています。 この部分は右から左に向かうべきです。 このとき、 [ABBR[HTML] [Hypertext Markup Language]] [[マーク付け]]としては - [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

]] のどれでも [ABBR[OK]] です。 (>>13 では [CODE(HTMLe)[[[q]]]] のタグを書いていません。 [CODE(char)[RLE]] と [CODE(char)[PDP]] を [CODE(HTMLe)[q]] 要素に含めるべきか否かよくわからないからです。 視覚的マーク付けと意味的マーク付けは相性が悪い。) >>11 だけでも、 [ABBR[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 はうまくいきません。 [ABBR[Bidi] [双方向性]] 算法はそもそも[[平文]]を想定しているので、 マーク付けによって木構造があっても特に取り計らってくれません。 [SAMP[HEBREW2]] と [SAMP[HEBREW4]] をそれぞれ別の埋め込み文とみなして、 [SAMP[english1 2WERBEH english3 4WERBEH english5]] としてしまいます。 このように、2階層以上に左から右、右から左の入れ子関係があるときには、 >>16 か >>17 のように陽にこれを示さなければいけません。 [18] はっきりいってこの方式は駄目ですね。 折角の木構造を生かせていない。 [45] [[XHTML m12n]] では、[[双方向的文]][[モジュール]]に、 この[[モジュール]]を選択すると [[I18n]] [[属性集成]]に [CODE(HTMLa)@en[[[dir]]]] が追加される、とあります。 これはわかりにくい。 [[Anne]] たんが見落とすのも無理はない。 しかも、[Q@en[dir* ("ltr" | "rtl")]] と名前の後に星印がついている。 つまり必須。それはおかしい。 ([[名無しさん]] [WEAK[2006-08-06 05:24:05 +00:00]]) [46] [CITE['dir' attribute on BIDI inline elements and actual browsers from Helmut Wollmersdorfer on 2006-12-18 (www-html@w3.org from December 2006)]] ([[名無しさん]] [WEAK[2006-12-20 23:30:41 +00:00]]) [49] [CITE@fr[Denes Nad Makedonija - Wikipédia]] ([TIME[2008-06-04 06:14:58 +09:00]] 版) [PRE(HTML example code)[ Hymne national ]PRE] ;; The document element also has the [CODE(HTMLa)@en[[[dir]]]] attribute specified with the value of [CODE(HTML)@en[[[ltr]]]], therefore the [CODE(HTMLa)@en[[[dir]]]] attribute on the [CODE(HTMLe)@en[[[span]]]] element is redundant. ([[名無しさん]]) [[#comment]] ** table 要素 dir 属性 (HTML, XHTML 1) [26] [ABBR[HTML] [Hypertext Markup Language]] の [CODE(HTMLe)[[[table]]]] 要素の [CODE(HTMLa)[dir]] 属性は、 >>1- の通常の役割に加えて、表の方向を決定します。 [CODE(HTML)[ltr]] なら表は左から右へ、 [CODE(HTML)[rtl]] なら右から左へ進みます。 [CODE(HTMLe)[table]] はブロック水準要素型なので、 >>4- の通り、既定値は上位要素からの継承です。 [36] 仕様書: - [[SI 4281]]:1998 -- [CSECTION[9.2 Tables]] - [[HTML 4]] -- [27] 表が左から右に進むときは、最初の行は左側で、 次の行がその右に続きます。 右から左に進むときは、最初の行は右側で、次の行がその左に続きます。 どちらの場合も最初の列は上で、次の列が下に続きます。 [SRC[HTML 4, SI 4281:1998 9.2]] [41] このような効果があるのは、 [CODE(HTMLe)[table]] 要素だけです。 [CODE(HTMLe)[[[tbody]]]] や [CODE(HTMLe)[[[tr]]]] は通常通りの働きしか持ちません。 なお、 [CODE(HTMLe)[[[th]]]] や [CODE(HTMLe)[[[td]]]] の [CODE(HTMLa)[dir]] 属性は、通常通りそのこま内のレンダリングを制御します。 両要素型はブロック水準要素型らしいので、上位の指定を継承します。 [30] 表の中では行だけではなく列からも継承します。 [CODE(SGML)[%[[cellvalign]]]] の説明をみてください。 [[#comment]] ** メモ [[#comment]] * bdo 要素 dir 属性 (HTML, XHTML 1) [28] [CODE(HTMLe)[[[bdo]]]] 要素型の説明を参照してください。 * メモ [43] [CITE[Re: [Comment on its tagset WD] On (Bi)Directionality from Felix Sasaki on 2006-01-18 (www-i18n-comments@w3.org from January 2006)]] ([[名無しさん]] [WEAK[2006-01-28 02:48:57 +00:00]]) [47] [[ISO/IEC 19757]]-3:2006 は [DFN@en[[CODE(XMLe)@en[[QN[[[dir]]] [http://purl.oclc.org/dsdl/schematron]]]]]] [[要素]]を定義しています。 [CODE(XMLa)@en[[[value]]]] [[属性]]があって、 [CODE(XML)@en[[[ltr]]]] ([[左]]から[[右]]) または [CODE(XML)@en[[[rtl]]]] ([[右]]から[[左]]) の[[自然言語文]]を表すとだけ規定されています。 ([[名無しさん]]) [48] [CITE@en-US[Internationalization Tag Set (ITS) Version 1.0]] ([CODE[2007-04-03 18:11:18 +09:00]] 版) ([[名無しさん]]) [52] [CITE[IRC logs: freenode / #whatwg / 20100824]] ( ([TIME[2010-09-02 21:15:06 +09:00]] 版)) [53] [CITE@en[Web Applications 1.0 r5579 Try to clarify that directionality affects the use of the title outside the document.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10817]] ( ([TIME[2010-10-05 08:48:00 +09:00]] 版)) <http://html5.org/tools/web-apps-tracker?from=5578&to=5579> [54] [CITE@en[Web Applications 1.0 r5672 Revamp how dir='' is implemented; add dir=auto; update to recent CSS developments.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10808]] ( ([TIME[2010-11-09 09:57:00 +09:00]] 版)) <http://html5.org/tools/web-apps-tracker?from=5671&to=5672>