概要
- カテゴリー
- 配置できる場所
-
- 上記カテゴリーの要素が置ける場所。
- 内容モデル
-
- 下記のいずれか。混在も可。
- 0個以上の
option
要素。 - 0個以上の
optgroup
要素。 - 0個以上の
hr
要素。
- 0個以上の
- 上記に、0個以上のScript-supporting contentの混在も可。
- 下記の条件をすべて満たす場合は、選択肢セットの中にプレースホルダーラベルオプションを含まなければならない。
required
属性が指定されている。multiple
属性が指定されてない。size
属性値が1
である(デフォルトで1
である場合も含む)。
- 補足:プレースホルダーラベルオプションとは、下記の条件をすべて満たす
option
要素である。- 祖先要素に
optgroup
要素がない。 select
要素による選択肢セットの中の最初の選択肢である。- 当該
option
要素の送信値が空文字列である。
- 祖先要素に
- 下記のいずれか。混在も可。
- 属性
-
- グローバル属性
name
→送信用名前文字列。選択されたoption
要素の送信値とセットでフォーム送信される。属性値にisindex
を指定してはならない。autocomplete
→on
、off
、その他。デフォルトは、所属フォームの設定値、それがない場合は、on
。自動補完機能の設定。disabled
→ブーリアン属性。指定されたフォームコントロールは無効となる(操作できなくなり、送信値はフォーム送信されない)。この状態は、スクリプトを用いないと解除できない。form
→同一HTML文書内にあるform
要素のid
属性値。所属フォームを指定する。multiple
→ブーリアン属性。複数の選択肢を選択可能とする場合に指定。required
→ブーリアン属性。その項目の入力が必須の場合に指定。size
→0を除く非負整数。表示する選択肢数を指定。デフォルトは、multiple
属性がある場合は4
、そうでなければ1
。1
の場合は通常はドロップダウンボックスになる。
- HTML構文におけるタグの省略
-
- 省略不可。
- WAI-ARIA
-
multiple
属性が指定されてなく、かつ、size
属性値が1
である(デフォルトで1
である場合も含む)場合は、- そうでない場合は、
disabled
属性が指定されている場合は、aria-disabled
属性を指定すべきではない。disabled
属性が指定されている場合は、aria-disabled
属性値にfalse
を指定してはならない。required
属性が指定されている場合は、aria-required
属性を指定すべきではない。required
属性が指定されている場合は、aria-required
属性値にfalse
を指定してはならない。aria-multiselectable
属性を指定すべきではない。
- 視覚系ブラウザのデフォルトとして期待されるCSS
-
select { letter-spacing: initial; word-spacing: initial; line-height: initial; text-transform: initial; text-indent: initial; text-shadow: initial; text-align: initial; box-sizing: border-box; appearance: auto; } select:autofill {field-sizing: fixed !important;}
- 視覚系ブラウザにおいて期待されるレンダリング
-
field-sizing
プロパティの適用が期待される。multiple
属性がある場合は、複数選択リストボックスを、inline-block
ボックスで表示。size
属性値が1
より大きくて、かつ、multiple
属性がない場合は、単数選択リストボックスを、inline-block
ボックスで表示。- リストボックスの場合は、幅は選択項目の最大ラベル幅を表示するにたる分に加えてスクロールバーの幅分。
- リストボックスの場合、その高さは
field-sizing
プロパティの計算値がcontent
の場合は、すべての項目を表示できる行数分。size
属性がない場合及びsize
属性値が非妥当値の場合は、4行分。- 前二項以外の場合は、
size
属性値で指定された行数分。
size
属性値が1
(デフォルトで1
である場合も含む)で、かつ、multiple
属性がない場合は、高さ一行分のドロップダウンボックスとなる。これは、展開可能ウィジェットである。この場合において、展開された表示の場合又はappearance
プロパティの計算値がmenulist-button
の場合は、ドロップダウンボタンを含むドロップダウンボックスとなる。- ドロップダウンボックスの場合、その表示幅は
field-sizing
プロパティの計算値がcontent
の場合は、選択項目のラベルテキストの文字幅。- 前項以外の場合は、すべての選択項目のラベルテキストのうち最大のものの文字幅。
- 選択項目においては、
optgroup
要素、option
要素のラベルを表示する。 - プレースホルダーラベルオプションは、有効な選択肢ではないことを伝えるような方法で描画される。
optgroup
要素がある場合は、その内容であるoption
要素のラベルは、当該optgroup
要素のラベルの下に字下げして表示する。select
要素の内容として一つ以上の連続したhr
要素がある場合は、単一の区切りとしてレンダリングされてもよい。
- 制約検証
-
- 原則として、制約検証の対象。
disabled
属性があれば、制約検証の対象から除外。required
属性があれば、必須の入力がなされてるかどうかチェック。この場合、プレースホルダーラベルオプションのみが選択されている場合は、必須の入力がされているとはみなされない。
- ユーザーエージェントに対する特記事項
-
- ユーザーがその選択にしたがって
autocomplete
属性による設定を無視することができるようにすることができる。
- ユーザーがその選択にしたがって
- 意味・用法
-
選択肢のセットの中から選択させるためのフォームコントロールを表す。
アクセシビリティ関連
autocomplete
属性値のその他は、ユーザーエージェントが入力目的を機械的に特定するためにも有用である(Techniques for WCAG 2.1 : H98)。
私見・補足
プレースホルダーラベルオプションの趣旨は充分に理解できるけど、選択肢の一つが完全に「無」というのは気味が悪い。
disabled
の状態のときのレンダリングについては、HTML Living Standardには明記がないようなのだが、HTML4.01仕様のフォーム関連の規定では、ユーザーエージェントによるものとされていたので、それに基づいて実装しているブラウザが多いと思われる。
表示確認
- ソース1
-
<label>select要素→ <select> <option selected="selected">optionその1</option> <optgroup label="optgroupその1"> <option>optionその2</option> <option>optionその3</option> <option>optionその4</option> </optgroup> </select> </label>
- 表示結果1
- ソース2
-
<label>select要素→ <select multiple="multiple"> <option selected="selected" label="optionその1" value="op1"></option> <option label="optionその2" value="op2"></option> <option label="optionその3" value="op3"></option> <option label="optionその4" value="op4"></option> <option label="optionその5" value="op5"></option> </select> </label>
- 表示結果2
option
要素のlabel
属性に対応してないブラウザもあるようだ。
- ソース3:
disabled
属性の指定 -
<label>select要素1→ <select> <optgroup label="optgroupその1"> <option selected="selected">optionその1</option> <option disabled="disabled">optionその2</option> <option>optionその3</option> </optgroup> <optgroup label="optgroupその2" disabled="disabled"> <option>optionその4</option> <option>optionその5</option> <option>optionその6</option> </optgroup> </select> </label> <label>select要素2→ <select disabled="disabled"> <option selected="selected">optionその1</option> <option>optionその2</option> <option>optionその3</option> </select> </label>
- 表示結果3
- ソース4:プレースホルダーラベルオプションあり
-
<label>select要素→ <select required="required"> <option selected="selected" value="">--↓以下から選択してください。--</option> <option>optionその1</option> <option>optionその2</option> <option>optionその3</option> <option>optionその4</option> </select> </label>
- 表示結果4