* tabindex 属性 (HTML, XHTML 1) [2] [ABBR[[[HTML]]][Hypertext Markup Language]] の [DFN[[CODE(HTMLa)[tabindex]] 属性]]は、 その文書における当該要素の[DFN[タブ順序]]中の位置を指定します。 [CODE(HTMLa)[tabindex]] 属性を指定できる要素は次のものです。 :ハイパーリンク:[CODE(HTMLe)[[[a]]]], [CODE(HTMLe)[[[area]]]] :フォーム制御子:[CODE(HTMLe)[[[button]]]], [CODE(HTMLe)[[[input]]]], [CODE(HTMLe)[[[object]]]], [CODE(HTMLe)[[[select]]]], [CODE(HTMLe)[[[textarea]]]] [3] 仕様書: - [[HTML 4]] ([[Web Forms 1.0]]) -- [CITE[17.11.1 Tabbing navigation]] -- [CITE[B.6.1 Incremental display]] [[#comment]] ** 代替 [4] タブ順序は[[スタイル・シート]]で指定できます。 [5] [[CSS3]] などでは、 [SAMP(CSS)[[[nav-up]]]] のような特性を使ってより柔軟・容易にタブ順序を指定できます。 [[#comment]] ** 属性値 [6] この属性の値は [CODE(SGML)[[[NUMBER]]]] です。 値は [CODE(HTML)[0]] と [CODE(HTML)[32767]] ([CODE(math)[= 2[SUP[15]] − 1]]) の間の数でなければなりません。 [ABBR[[[UA]]][[[利用者エージェント]]]] は[[先導零]]を無視するべきです。 [SRC[HTML 4 17.11.1]] [Q[[RUBY[間][あいだ]]]]というのは曖昧ですが、一般には [CODE(HTML)[0]] と [CODE(HTML)[32767]] を''含む''と解釈されています。 [7] この属性は省略可能です。 [[#comment]] ** UA による利用 [8] [DFN[[RUBYB[タブ順序][tabbing order]]]]は、 利用者が[[鍵盤]]によって navigate する時の、 [[要素]]が[[焦点]]を受取る順序です。 タブ順序は他の要素内で入れ子になっている要素を含んでいても構いません。 [SRC[HTML 4 17.11.1]] 焦点を受取る要素は、次の規則に従って決めるべきです。 [SRC[HTML 4 17.11.1]] = [CODE(HTMLa)[tabindex]] 属性があり、正の値を割当てられている要素を最初に。 -- 小さな値のものから大きな値のものへ。 -- 値は連続している必要もないし、特定の値から始める必要もない。 -- 同じ値の要素は[[文書順]]に。 = [CODE(HTMLa)[tabindex]] 要素のない要素やあっても [CODE(HTML)[0]] なものを次に。 -- 文書順に。 - [[無効化]]されている要素はタブ順序に関わらない。 [11] 一番最初に文書中で [CODE(HTMLa)[tabindex]] が最小の要素に焦点を与えるのが良いように思えるかもしれませんが、 [ABBR[UA][利用者エージェント]]が文書を読み込みながら徐々にレンダリングしているのであれば、 文書を全部読み終わるまで[Q[最小]]の要素は決定しません。 文書を読み込み終わる前に [KEY[Tab]] が打鍵された場合は、 その時点で最小の [CODE(HTMLa)[tabindex]] の要素に焦点を与えるのが適当でしょう。 [SRC[HTML 4 B.6.1]] [10] 焦点を移動したり、要素を活性化したりする実際の打鍵列は、 [ABBR[UA][利用者エージェント]] の設定に依存します。 例えば、前者を [KEY[Tab]]、後者を [KEY[Enter]] とすることもできます。 [ABBR[UA][利用者エージェント]] は逆順で焦点を移動する打鍵列を定義することもできます。 タブ順序の最初や最後に来たときは、 [ABBR[UA][利用者エージェント]] は最後や最初に戻しても構いません。 [SRC[HTML 4 17.11.1]] [[Windows]] では、焦点移動を [KEY[Tab]]、逆移動を [KEY[Shift + Tab]]、 活性化を [KEY[Enter]] で行うのが普通です。 [[DOS]] 以前のシステムでは焦点移動を [KEY[Enter]] で行うものが多くあり、 現在でもそれに強く執着する人が少なからずいます。 特定の入力欄、例えば電話番号の入力欄では、 一定の内容が入力されたところで自動的に次の制御子に焦点が移動するような実装もあります。 しかし、他の種類の欄の挙動との整合性や値を修正したいときの動作をうまく作らなければ、 利用者の戸惑いの原因となる可能性が高いです。 [[#comment]] ** 不思議解釈 [1] [CODE(HTMLa)[tabindex]] の値は [CODE(HTML)[0]] 以上のはずなんですけど、 [CODE(HTML)[-1]] なんて値を指定してる人もいますね。仕様上は [CODE(HTML)[0]] でタブ順割当なしになるはずなのに、ならなくてなぜか [CODE(HTML)[-1]] ならなる [ABBR[UA][利用者エージェント]] がある (具体的にはどれかの版の [ABBR[[[WinIE]]][Internet Explorer (Windows 版)]]。) んだとか。 [[#comment]] ** 例 [9] 例 [SRC[HTML 4 17.11.1]] [PRE(HTML)[ A document with FORM ...some text...

Go to the W3C Web site. ...some more... ...some more...

]PRE] この例では、 [SAMP[get-database]] → [SAMP[field1]] → [SAMP[field2]] → [SAMP[submit]] → [SAMP(HTMLe)[a]] となります。 [[#comment]] ** メモ [[#comment]] * メモ