* label 要素型 (HTML, XHTML 1) [4] [[HTML]] の [DFN[[CODE(HTMLe)[label]] 要素]]は、 [[制御子]]に情報を添付するために使うことができます。 [19] 仕様書: - [[HTML 4]] ([[Web Forms 1.0]]) -- [CITE[17.9 Labels]] --[CITE[18.2.3 Intrinsic events]] - [[XHTML 1.0]] [20] :[[開始タグ]]:必須 :[[終了タグ]]:必須 :出現できる文脈:[CODE(SGML)[%[[formctrl]]]] な文脈 :[[内容模型]]:[CODE(SGML)[(%[[inline]])* −[CODE(HTMLe)[label]]]] :[[属性]]: ,属性名,属性値,既定値,説明,出典 ,[CODE(HTMLa)[[[accesskey]]]],[CODE(SGML)[%[[Character]]]],,,[HTML 4] ,[CODE(HTMLa)[[[class]]]],,(なし),[[級]],"[HTML 4] %[[coreattrs]] ⊂ %[[attrs]], [XHTML 1] [[Core]] ⊂ [[Common]]" ,[CODE(HTMLa)[[[dir]]]],,,[[書字方向]],"[HTML 4] %[[i18n]] ⊂ %attrs, [XHTML 1] [[I18N]] ⊂ Common" ,[CODE(HTMLa)[[[for]]]],[CODE(SGML)[[[IDREF]]]],,対象制御子,[HTML 4] ,[CODE(HTMLa)[[[id]]]],[CODE(SGML)[[[ID]]]],(なし),一意識別子,"[HTML 4] %coreattrs ⊂ %attrs, [XHTML 1] Core ⊂ Common" ,[CODE(HTMLa)[[[lang]]]],,,[[自然言語]],"[HTML 4] %i18n ⊂ %attrs" ,[CODE(HTMLa)[[[xml]]:lang]],,,自然言語 ,"[XHTML 1] I18N ⊂ Common" ,[CODE(HTMLa)[[[onblur]]]],[CODE(SGML)[%[[Script]]]],(なし),失焦点時,[HTML 4] ,[CODE(HTMLa)[[[onclick]]]] ,[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %[[events]] ⊂ %attrs, [XHTML 1] [[Events]] ⊂ Common" ,[CODE(HTMLa)[[[ondblclick]]]],[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onfocus]]]],[CODE(SGML)[%[[Script]]]],(なし),得焦点時,[HTML 4] ,[CODE(HTMLa)[[[onkeydown]]]] ,[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onkeypress]]]],[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onkeyup]]]] ,[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmousedown]]]],[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmousemove]]]],[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmouseout]]]],[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmouseover]]]],[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[onmouseup]]]] ,[CODE(SGML)[%[[Script]]]],(なし),,"[HTML 4] %events ⊂ %attrs, [XHTML 1] Events ⊂ Common" ,[CODE(HTMLa)[[[selected]]]],(真偽値属性),(偽),初期選択,[HTML 4] ,[CODE(HTMLa)[[[style]]]] ,,,スタイル情報 ,"[HTML 4] %coreattrs ⊂ %attrs, [XHTML 1] [[Style]] ⊂ Common" ,[CODE(HTMLa)[[[title]]]] ,,,注釈的題 ,"[HTML 4] %coreattrs ⊂ %attrs, [XHTML 1] Core ⊂ Common" [[#comment]] ** 制御子と名札 [21] [[制御子]]には、押しボタン系のように自動的に関連付けられた[RUBY[名札][ラベル]] ([DFN[[RUBYB[暗示的][implicit]]名札]]) を持つものと、 そうでないもの (文章入力欄、チェック箱、ラジオボタン、メニュー) があります。 暗示的名札を持つものでは UA はその名札を使うべきですが、 それ以外の制御子では [CODE(HTMLe)[label]] 要素を使って著者が名札を指定できます。 [SRC[HTML 4 17.9]] ところで、ファイル選択制御子 ([[[CODE(HTMLe)[input]]//[CODE(HTML)[file]]]]) や物体制御子 ([CODE(HTMLe)[[[object]]]]) などはどうなのでしょうかね? 暗示的名札は持たないように見えますが、 HTML 4 の[Q[そうでないもの]] は [Q[etc.]] などと書かれておらず、例示ではないように読めますが・・・。 [22] [CODE(HTMLe)[label]] 要素は、丁度1つのフォーム制御子と関連付けます。 - 陽に関連付けるには、 [CODE(HTMLa)[[[for]]]] 属性を使います。 (この方法を使うと、複数の [CODE(HTMLe)[label]] を同じ制御子に関連付けることができます。) - 陰に関連付けるには、制御子要素を [CODE(HTMLe)[label]] 要素の中に入れます。 1つの [CODE(HTMLe)[label]] に入れることができるのは、1つの制御子要素だけです。 名札自体は制御子の前後どこにあっても構いません。 [SRC[HTML 4 17.9.1]] 陰な方で前後両方にあっても構わないとは書かれていませんけど、どうなのでしょう。 [[#comment]] ** 出現する文脈 [30] [CODE(HTMLe)[label]] は、フォーム外でも使えます [SRC[HTML 4 18.2.3]]。 詳しくは[[制御子]]の説明をごらんください。 [31] [CODE(HTMLe)[label]] は、なんとなく、対象となる制御子と同じフォーム (または同じくフォーム外) に入れるものと思われていると感じますが、 少なくても HTML 4 仕様書には、そのような制限はありません。 ですから、他のフォームの制御子を参照してもかまわないはずです。 もっとも、一般にはそのような利用の仕方は利用者の混乱を招くだけでしょう。 役に立つことはあまりないと思われます。しかし、フォーム外の [CODE(HTMLe)[label]] からフォーム内へのリンクは、若干の需要はあるかもしれません。 (表の[[こま]]内に配置する場合など。) しかし、このような場合に、 [[DOM]] の [CODE(HTMLa)[[[form]]]] 属性を使ったスクリプト等が意図していない動作をするかもしれませんから、 一応注意は必要でしょう。 [[#comment]] ** 内容 [8] [CODE(HTMLe)[label]] 要素の子孫に [CODE(HTMLe)[label]] 要素は存在できません [SRC[HTML 4, XHTML 1.0]]。 また、定義上 (>>22)、制御子要素も高々1つしか入れることができません。 また、関連付けることのできる制御子は丁度1つなので、 [CODE(HTMLa)[for]] 属性を使う時は子孫に制御子要素を入れることができないはずです。 逆に [CODE(HTMLa)[for]] 属性を使わない時は1つ制御子を入れなければなりません。 [[#comment]] ** UA による利用 [23] [CODE(HTMLe)[label]] が[[焦点]]を受取ったら、 関連付けられた制御子に焦点を渡します。 [SRC[HTML 4 17.9.1]] [24] 名札は色々にレンダリングして構いません。 例: - 視覚的に [SRC[HTML 4 17.9]] - 発話合成器で読上げ [SRC[HTML 4 17.9]] - 文字色・背景色を他と変えて - 太字で - 対応する制御子が焦点を持っているときには普段と別な表示で (色を変えたり、枠線をつけたり) [[#comment]] ** 実装 [25] >>21 を厳密に解釈すると、押しボタンに [CODE(HTMLe)[label]] は使えないはずですが、実際の UA や文書では使える・使っていることがしばしばあります。 そのような UA の中には、名札が押されるとボタン自体が押されたのと同じことになるものがあります。 そのような動作は、見た目がボタン状でないものを押すだけでボタンが押されてしまうという、 利用者がおそらく意図していない結果になるので、好ましくありません。 [26] 多くの視覚 UA では、チェック箱やラジオ・ボタンの名札をマウスで[[かちっ]]すると、 その項目が選択された状態となります。 [[#comment]] ** 可用性とアクセス可能性 [28] チェック箱やラジオ・ボタンでは、 [CODE(HTMLe)[label]] 要素が存在することが使いやすさのために特に重要です。 多くの視覚 UA では、チェック箱やラジオ・ボタンは、 1文字分程度の大きさの記号によって表示され、 その記号をマウスで[[かちっ]]することで「入」・「切」 を切替えることができます。 しかし、その1文字程度の大きさにマウスを合わせることは面倒であり、 状況によっては困難です。ですから、 >>26 のような実装がなされていると、 多くの GUI 環境の一般的なチェック箱やラジオ・ボタンの実装と同様に、 記号のみならず説明文を[[かちっ]]することで状態を切替えられます。 [29] 名札として[[ハイパーリンク]]や任意の[[物体]]を配置することは仕様上は禁止されていません。 しかし、多くの UA で、名札を選択する動作とリンクをたどる操作などに同じ [Q[マウスのかちっ]]が割当てられています。ですから、 利用者にとって意図せぬ動作をしたり、操作しづらくなったりする可能性があります。 [[#comment]] ** 安全性 [32] 使用上は曖昧ですが、利用者エージェントによっては、 [[ハイパーリンク]]や[[ボタン]]に [CODE(HTMLe)[label]] を指定しても著者の意図した通りに機能します。しかも、 [[焦点]]が向けられるのみならず[[活性化]]されてしまうこともあります。 例えば、次の例を考えてみてください。 [PRE(example deprecated HTML)[ <[CODE(HTMLe)[p]]><[CODE(HTMLe)[label]] [CODE(HTMLa)[for]]="ANCHOR">いいことがあります。 <[CODE(HTMLe)[p]]><[CODE(HTMLe)[a]] [CODE(HTMLa)[href]]="something-bad" [CODE(HTMLa)[id]]="ANCHOR">わるいことがあります。 ]PRE] 先述のような利用者エージェントでは、[[利用者]]が[Q[いいこと]]を期待して [CODE(HTMLe)[label]] を活性化すると、実際には[Q[わるいこと]]が起こってしまいます。 [WEAK[(もちろんこの例は説明のためのものであり、実際にはいくらでもわかりにくく危険にできます。)]] この問題は利用者エージェントが [CODE(HTMLe)[label]] の活性化によって参照先まで活性化しないように実装をかえれば解決します。 それでも [CODE(HTMLe)[a]] の [CODE(HTMLa)[[[onfocus]]]] に[Q[わるいこと]]を仕込むのは可能ですが、これは [CODE(HTMLe)[label]] の問題というよりは[[スクリプト]]を使うことそのものによる問題といえます。 [[#comment]] ** 例 [5] 例えば、[SAMP[名前: __________]] という form 断片があったとすると、このうちの 「名前: 」の部分が [CODE(HTMLe)[label]] 要素となります。 [PRE(HTML)[ ]PRE] (または、 「______」の部分 ([CODE(HTMLe)[input]] 要素。) も含めて [CODE(HTMLe)[label]] 要素としても構いません。 [PRE(HTML)[ ]PRE] ) [[#comment]] ** メモ [6] >>5 後半 いまふと思ったんですけど、この2つの書き方って常に可能なんでしょうか? 構文的には多分問題ないですけど、意味的に。たとえば >>5 の例だと、入力欄の部分まで [Q[ラベル]]としてマーク付けすることの妥当性が疑問だなと。 [7] >>6 かといって一々入力欄に [CODE(HTMLa)[[[id]]]] 属性を与えるのも冗長ですよね。 [CODE(HTMLe)[[[form]]]] 要素内にある [CODE(HTMLe)[label]] 要素だったら [CODE(HTMLa)[[[for]]]] 属性の値は [CODE(HTMLa)[[[name]]]] 属性の値を指してもいい、 とかないんでしょうか? (でも [CODE(HTML)[[[radio]]]] で困るか。) [[#comment]] * option 要素 label 属性 (HTML, XHTML 1) [2] [[HTML]] の [CODE(HTMLe)[[[option]]]] 要素の [DFN[[CODE(HTMLa)[label]] 属性]]は、 [CODE(HTMLe)[option]] 要素の内容より短い選択肢の[RUBY[名札][ラベル]]を指定します。 [15] 仕様書: - [[HTML 4]] ([[Web Forms 1.0]]) -- [CODE(HTMLe)[option]] 要素 [CODE(HTMLa)[label]] 属性 -- 17.6 [[#comment]] ** 属性値 [16] この属性の値は [CODE(SGML)[%[[Text]]]] です。 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。 定義により、要素の内容よりも短いラベルを指定しなければなりません。 [17] この属性は省略可能です。 [[#comment]] ** UA による利用 [18] UA は、 [CODE(HTMLa)[label]] 属性が指定されていればこれを選択肢の[RUBY[名札][ラベル]]として使用するべきです。 また、指定されていなければ要素の内容を[RUBY[名札][ラベル]]として使用するべきです。 [SRC[HTML 4 17.6]] [[#comment]] ** メモ [3] >>2 HTML 4 仕様書読んでもなんのためにあるのかよくわかんない。 特に[Q[内容より短い]]という規定。 [CODE(HTMLa)[[[abbr]]]] 属性のような用途でもないようだし。。。 [[#comment]] * optgroup 要素 label 属性 [1] [[HTML]] の [CODE(HTMLe)[[[optgroup]]]] 要素の [DFN[[CODE(HTMLa)[label]] 属性]]は、選択肢群の[RUBY[名札][ラベル]]を指定します。 [9] 仕様書: - [[HTML 4]] ([[Web Forms 1.0]]) -- [CODE(HTMLe)[optgroup]] 要素 [CODE(HTMLa)[label]] 属性 -- 17.6.1 Pre-selected options [[#comment]] ** 属性値 [10] この属性の値は [CODE(SGML)[%[[Text]]]] です。 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。 [14] この属性は必須です。省略することはできません。 [[#comment]] ** メモ [[#comment]] * xlink:label 属性 (XLink) [11] [[XLink]] の [DFN[[CODE(XMLa)[[VAR[xlink:]]label]] 属性]]は、 [[資源]]の識別名を与えます。 この名前は、 [CODE(XML)[[[arc]]]] 型要素で資源を指定するために使用します。 仕様書: この属性は、 [CODE(XML)[[[resource]]]] 型または [CODE(XML)[[[locator]]]] 型の要素で使用できます。 この属性の値は [[XML名前空間]] (1.0) の [CODE(ABNF)[[[NCName]]]] です。 XLink 仕様書の [[DTD]] 例では [CODE(XML)[[[NMTOKEN]]]] として宣言されています。 [12] この属性の値は識別子ですが、一意識別子ではありません。 同じ親 [CODE(XML)[[[extended]]]] 型要素内の別の資源要素が同じ値を持っていても構いません。 [[#comment]] * hr 要素 label 属性 (HTML) [13] 1995年5月に [CODE(HTMLe)[[[hr]]]] に [CODE(HTMLa)[text]] 属性 (新設) で罫線に加えてレンダリングする文字列を指定することが提案され、 すぐに [[Emacs/W3]] で実装されました。 [CODE(HTMLa)[[[textalign]]]] 属性 (新設) で文字列のレンダリング位置を指定します。 - [[ietf-html]]: ''html-wg-95q2: text in the
tag'' - ''Emacs-w3 User's Manual - Supported Markup Languages'' [[#comment]] * メモ