* accesskey 属性 (HTML, XHTML 1) [7] [[HTML]] の [DFN[[CODE(HTMLa)[accesskey]] 属性]]は、 要素にアクセス鍵を割当てます。 [31] :状態:[[W3C]] [[勧告]]、[[WHATWG]] [[WD]] :[[要素型]]: [CODE(HTMLe)[[[a]]]], [CODE(HTMLe)[[[area]]]], [CODE(HTMLe)[[[button]]]], [CODE(HTMLe)[[[input]]]], [CODE(HTMLe)[[[label]]]], [CODE(HTMLe)[[[legend]]]], [CODE(HTMLe)[[[textarea]]]], [CODE(HTMLe)@en[[QN[[[select]]] [http://www.w3.org/1999/xhtml]]]] :[[属性名]]:[CODE(HTMLa)@en[[[accesskey]]]] ([Q@en[accessibility key character]] ([Q[[[アクセス可能性]][[鍵]][[文字]]]]) からか?) :[[属性値]]:1[[文字]] (>>10) :[[既定値]]:特段の指定なし (>>13) [8] 仕様書: - [[HTML 4]] ([[Web Forms 1.0]]) -- [CITE[17.11.2 Access keys]] - [[Web Forms 2.0]] -- [CSECTION@en[2.5. Extensions to existing attributes]] ** 代替 [9] アクセス鍵は[[スタイル・シート]]で指定できます。 スタイル言語によっては、 HTML より遥かに柔軟に自由な打鍵列を指定できます。 [[#comment]] ** 属性値 [10] この属性の値は [CODE(SGML)[%[[Character]]]] です。 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。 アクセス鍵は[[文書文字集合]]から何か1文字です。 大文字・小文字の区別に対しては中立です。 [SRC[HTML 4 17.11.2]] [11] 文字を入力するものでない鍵や複数の鍵の組合せを指定することはできません。 [Q[大文字・小文字の区別に中立]]というのも意味不明気味なのですが、 仕様書の記号の説明によれば、[Q[文書文字集合からの一文字]]は [Q[大文字・小文字変換の対象ではない]]という意味なのだそうです。 多くのシステムはアクセス鍵の大文字・小文字を区別しませんが、 そのようなシステムと整合的な実装が適当なのか不適当なのか実装依存なのか、 もう少し説明が欲しいところです。 [12] 著者は、読者がアクセス鍵を指定する際の入力方法を考慮するべきです。 [SRC[HTML 4]] この注意は、 例えば多くの日本語環境で漢字をアクセス鍵としても実質的に意味を成さないようなことを指摘しているのでしょう。 また、歴史的に日本語用計算機・ソフトウェアでは仮名鍵盤によるアクセス鍵を使ったものもありましたが、 [SAMP(HTML)[accesskey="イ"]] のように指定したところで相互運用上の問題が発生することでしょう。 なお、 [CODE(HTMLa)[accesskey]] 値は文書文字集合、すなわち [[UCS]] の1文字と定義されていますが、必ずしも UCS の[Q[[[文字]]]]と日常的、 あるいは1打鍵という意味での[Q[文字]]とは一致しません。 具体的には、[[結合文字]]などで望む1[Q[文字]]が1[Q[文字]]で指定できない虞があります。 これも >>11 とあわせて仕様の限界でしょう。 (といっても、実際にアクセス鍵として使われた実績がある文字ではおそらく問題はないと思われます。) [13] この属性は省略可能です。 [[#comment]] ** UA による利用 [14] 要素に割当てられたアクセス鍵を押すと、[[焦点]]がその要素に与えられます。 要素に焦点が移った時の動作は要素に依存します。 例えば、利用者が [CODE(HTMLe)[[[a]]]] 要素によって定義される[[リンク]]を[[活性化]]したら、 通常はリンクをたどります。利用者がラジオ・ボタンを活性化したら、 利用者エージェントはラジオ・ボタンの値を変更します。 利用者が文章入力欄を活性化したら、入力を認めます。 [SRC[HTML 4 17.11.2]] [18] アクセス鍵の呼出しはシステムに依存します。 例えば、 [[Windows]] では、通常アクセス鍵と一緒に [KEY[[[Alt]]]] 鍵を押します。 [[Apple]] のシステムでは、通常アクセス鍵と一緒に [KEY[[[Cmd]]]] 鍵を押します。 [SRC[HTML 4 17.11.2]] [[携帯電話]]のブラウザでは、アクセス鍵だけを押す実装が普通です。 [19] アクセス鍵のレンダリングは UA 依存です。 著者はアクセス鍵を名札文に含めることが推奨されています。 UA はアクセス鍵の値を、その役割を強調しつつ他の文字と区別するような方法 (例: 下線) でレンダリングするべきです。 [SRC[HTML 4 17.11.2]] [[Windows]] では例えば [SAMP[File]] でアクセス鍵が [SAMP(char)[F]] なら [SAMP[''F''ile]] の [SAMP(char)[''F'']] だけ下線を引くという界面が標準的です。 仕様書はそのようにレンダリングするのがよろしいと言っているのでしょう。 もっとも、この方法は名札にアクセス鍵文字が含まれていないときには問題が起こります。 特に、[[ラテン文字]]を使わない時には大問題で、日本語版 Windows では[SAMP[ファイル (''F'')]] のようなみっともない表記が採用されています。 このように、 HTML 文書のレンダリングに限った問題ではありませんが、 アクセス鍵を分かりやすく、見栄え良く伝える方法は整備されていません。 [20] アクセス鍵を打鍵した時の挙動は、 UA によって異なることがあります。詳しくは[[焦点]]の説明をご覧ください。 [32] [CODE(HTMLa)@en[[[accesskey]]]] [[属性]]が [CODE(HTMLe)@en[[[label]]]] [[要素]]に対して与えられた場合、 その [CODE(HTMLe)@en[[[label]]]] が関連付けられている[[要素]]に直接 [CODE(HTMLa)@en[[[accesskey]]]] を与えた場合と同じように動作[['''しなければなりません''']]。 [SRC@en[WF2 2.5]] [[#comment]] ** アクセス可能性と可用性 [26] この属性は、元々[[連結]]や[[フォーム]]の[[制御子]]などへの[[鍵盤]]など [WEAK[([[鼠]]以外)]] への[[アクセス可能性]]や[[可用性]]を向上させることを目的に採り入れられました。 しかし、これまでに様々な問題があることが分かっており、 使い方によってはかえってアクセス可能性や可用性を低下させることになり兼ねません。 [27] '''実装と鍵盤の種類による差異''': [[HTML]] [[利用者エージェント]]は様々な実装がありますし、 それを使用する[[環境]]も様々です。また、その環境で使用する[[鍵盤]] [WEAK[(や同様の[[装置]])]] も実に様々です。 この様々な環境の従来の慣習や実現上の制限のため、 [[HTML]] の仕様上は [CODE(HTMLa)[accesskey]] 属性値を実際にどういう打鍵の組合せに対応させるかを定めていません。 [CODE(HTMLa)[accesskey]] が [SAMP(char)[1]] であれば、 [KEY[1]] という鍵を押せば良いだけの実装もありますし、 [KEY[[[Ctrl]]]] と一緒に押す実装もあります。あるいは [KEY[[[Alt]]]] と一緒に押させる実装もあります。 同じ [SAMP(char)[1]] でも、鍵盤本体と数字鍵盤で2つ鍵があって、 どちらかしか使えないという実装も、両方使えるという実装もあり得ます。 [[利用者]]が特定の実装にだけ慣れていれば問題ありませんが、 複数の実装を使っていると混乱の元です。 [[著者]]としても、 [CODE(HTMLa)[accesskey]] があることとその使い方を説明しようにも、 考えられる方法を列挙するか特定の[[利用者エージェント]]に限って解説するかしかありません。 鍵盤の鍵の種類は鍵盤の種類によって様々です。 ある鍵盤に存在している鍵が他の鍵盤に存在するとは限りません。 また、打鍵のしやすさも鍵盤の配置によって変わりますから、 なんとも言えません。[[可用性]]を追求すると [[HTML]] の装置非依存性が犠牲になります。 [CODE(HTMLa)[accesskey]] に限ったことではありませんが、 [CODE(HTMLa)[accesskey]] 属性では特に重大な問題といえます。 [28] '''操作の統一''': [CODE(HTMLa)[accesskey]] によってなされる操作はできるだけ文書を超えて統一されていることが望ましいと考えられます。 例えば、連続する文書群の次の文書へのリンクがある文書では [CODE(char)[N]] で、別の文書では [CODE(char)[X]] では[[利用者]]は不便で仕方がありません。 (この例の場合は [CODE(HTMLe)[[[link]]]] 要素で文書の関係を記述し、 [[利用者エージェント]]の機能で、または[[スタイル・シート]]で統一した [CODE(HTMLa)[accesskey]] を与えるのが正しい解でしょう。) 統一するべきなのは文書間だけではなく、使用している[[利用者エージェント]]や[[オペレーティング・システム]]などの[[環境]]自体ともです。 しかし、これを[[文書]]の側で実現するのは困難です。 環境の鍵盤操作の方法は多種多様であります。特定の環境に合わせると、 別の環境での[[可用性]]が低下することもあり得ます。 [29] '''存在の明示''': [CODE(HTMLa)[accesskey]] 属性が指定されていても、 それだけでは[[利用者]]はそのことを知り得ません。 何らかの方法で[[利用者]]に [CODE(HTMLa)[accesskey]] が設定されており、それがどの鍵であるのかを伝える必要があります。 >>27 な以上、これは[[利用者エージェント]]の役目のはずですが、 これを上手く実現している利用者エージェントはあまりありません。 ([[携帯電話]]の [[Webブラウザ]]では[[リンク]]の前に [CODE(HTMLa)[accesskey]] に応じた鍵の絵が表示されるものもあります。) [[著者]]の側で文書の一部として記述していることもありますが、 文章に上手く溶け込ませるのが難しかったり、[[言語]]によっては不可能だったりもします。 [[#comment]] ** 歴史 [33] [CODE(HTMLa)@en[[[accesskey]]]] [[属性]]は、 [[Web Forms 2.0]] で [CODE(HTMLe)@en[[[select]]]] [[要素]]にも追加され、 [[利用者エージェント]]は対応[['''して構いません''']]、 最低でも相当する [[DOM属性]]は ([[DOM]] を実装していれば) 実装[['''しなければなりません''']]、と規定されました [SRC@en[WF2 2.5]]。 それ以前はなぜか [CODE(HTMLe)@en[[[select]]]] [[要素]]には定義されていませんでした。 [34] また、 [[Web Forms 2.0]] は [[HTML 4]] で明記されていなかった、 [CODE(HTMLe)@en[[[label]]]] [[要素]]における動作についても規定しています (>>32)。 [[#comment]] ** 例 [16] [CODE(HTMLe)[input]] 制御子にアクセス鍵を割当てる例 [SRC[HTML 4 17.11.2]] [PRE(HTML)[

]PRE] アクセス鍵 [CODE(char)[U]] を打鍵すると、名札に関連付けられた入力欄に焦点が移ります。 [SRC[HTML 4 17.11.2]] [17] リンクにアクセス鍵を割当てる例 [SRC[HTML 4 17.11.2]] [PRE(HTML)[

Table of Contents ]PRE] 打鍵すると目次に飛びます [SRC[HTML 4 17.11.2]]。 [[#comment]] ** メモ - [1] ''Implement of accesskey in Opera 7 beta'' - [3] ''みんな、accesskeyってどうしてる? tabindexは?(仮)'' : 2ch スレのまとめサイト - [4] >>3 は消滅しちゃったらしい。残念。 - [2] ''HTML:accesskey と tabindex [flow] RC3.01'' - [6] [WEAK[2004-01-31 04:20:10 +00:00]] ''>>2'': リンク切れ、移転先不詳。''HTML:accesskey と tabindex [flow] RC3.01'' - [5] ブラウザの方の話ですけど、同じ [CODE(HTMLa)[accesskey]] の要素が複数あって、そのうちのどれかが [CODE(HTMLe)[[[form]]]] control のときで、かつ現在その含まれる [CODE(HTMLe)[form]] 内の control が活性なら、その [CODE(HTMLe)[form]] 内の [CODE(HTMLa)[accesskey]] 要素が反応してくれると嬉しいと思いません? たとえば、一頁内に複数の [CODE(HTMLe)[form]] があって、どれも「提出」ボタンが [KBD[M-S]] で効いてくれると気持ちがいい。 [15] どうして [CODE(HTMLe)[[[fieldset]]]] ではなくて [CODE(HTMLe)[[[legend]]]] に [CODE(HTMLa)[accesskey]] 属性があるのでしょうね? [21] >>3-4 その本スレ [CITE[みんな、accesskeyってどうしてる? tabindexは?]] ([[名無しさん]]) [22] [CITE[フォームとアクセシビリティ -- ごく簡単なHTMLの説明]] ([[名無しさん]]) [23] [CITE[accesskey=key - アクセスキー]] ラベルを使う時はラベルに [CODE(HTMLa)[accesskey]] を指定するのが[Q[作法]]だとしていますが、根拠が不明です。 ([[名無しさん]]) [24] [Q[ラベルを持つ入力コントロールの場合は、