以下を考慮してください。
<label>Range from
<input name='min_value'/> to
<input name='max_value' />
</label>
W3C勧告では、ラベルが正確に 1つのフォームコントロールに関連付けられていると記載されているため、これは意味的に正しいですか?
2番目の入力をクリックすると、すぐに最初の入力にフォーカスが移動しますか?これを防ぐことはできますか?
2つの入力が一緒に属していることを示すために、最小/最大入力の組み合わせをどのようにマークアップしますか?
いいえ、それは正しくありません(お気づきのとおり、label
はoneフォーム入力に正確に関連付けられているためです)。
一緒に属する入力のグループにラベルを付けるには、<fieldset>
と<legend>
を使用します。
<fieldset>
<legend>Range</legend>
<label for="min">Min</label>
<input id="min" name="min" />
<label for="max">Max</label>
<input id="max" name="max" />
</fieldset>
参照:
受け入れられた答えが述べているように、それは正しくありませんが、それを行うためのより良い方法があると思います。
アクセス可能な代替手段:
オプション1(aria-label
属性を使用):
Range:
<input ... aria-label='Range start' />
<input ... aria-label='Range end' />
オプション2(非表示のlabel
タグを使用):
<label for='start'>Range start</label>
<input type='text' id='start' />
<label for='end' class='hidden'>Range end</label>
<input type='text' id='end' />
.hidden
クラスは スクリーンリーダーでのみ読み取り可能 です。
オプション3(aria-labelledby
属性を使用):
<label id='lblRange'>Range</label>
<input type='text' id='start' aria-labelledby='lblRange' />
<input type='text' id='end' aria-labelledby='lblRange' />
オプション#1の利点:各input
には、他の提案(「to」ラベルの追加など)にはない優れた説明があります。オプション#2と#3はこの特定のケースには最適ではないかもしれませんが、同様のケースに言及する価値があります。
ラベル内に2つの入力を配置するのは間違っているという多くの回答があります。これは、実際にはhtml5の誤ったステートメントです。標準では明示的に許可されています: http://www.w3.org/TR/html5/forms.html#the-label-element
For属性が指定されていないが、ラベル要素にラベル付け可能な要素の子孫がある場合、ツリー順のfirstそのような子孫はラベル要素のラベル付きコントロールです。
ラベル要素にそのラベル付きコントロール以外のインタラクティブコンテンツがある場合、それらのインタラクティブコンテンツの子孫およびそれらの子孫を対象とするイベントのラベル要素のアクティブ化動作は何もしない必要があります。
ただし、Safariはここでhtml5標準を尊重しません(iOS 11.3でテスト済み)。そのため、Safariとの互換性を望んでいる人は、ここで回避策を使用するか、Appleがブラウザを修正するまで待つ必要があります。
これはどう:
<label> Range from <input name='min_value'> </label>
<label> to <input name='max_value'> </label>
this -によれば、ラベルはonly oneコントロールに関連付ける必要があるため、1つの入力のみを含めることができます。ラベル内に入力を置くことは、for
属性を削除することを意味します(自動リンク)。
したがって、single入力をラベルに入れるか、入力for
とdon 'を指すid
属性を指定する必要があります。 t入力をラベルに入れます。
1ラベル= 1入力!!!
LABEL内に2つの入力を配置すると、Safari(およびiPadとiPhone)では機能しません...