selectedcontent要素の使い方
HTMLのselectedcontent要素は、選択メニューで選ばれている項目の内容を、メニューのボタンにも表示するための要素です。たとえば、選択肢の中に名前と小さな説明があるとき、選んだ項目を閉じたメニューにも同じように表示できます。
先に結論
selectedcontentは、対応するselectの先頭にあるbuttonの中に置きます。タグの中は空のままにします。ブラウザーが、現在選ばれているoptionの中身をコピーして表示します。
この仕組みは1つだけ選ぶメニュー向けです。選んだ値をフォームへ送る役目は、引き続きselectとoptionが持ちます。
最小の例
<label for="plan">プラン</label>
<select id="plan" name="plan" class="plan-select">
<button>
<selectedcontent></selectedcontent>
</button>
<div>
<option value="basic">
<span>ベーシック</span>
</option>
<option value="pro" selected>
<span>プロ</span>
<small>おすすめ</small>
</option>
</div>
</select>
ページを開くと「プロ」と「おすすめ」が選ばれた項目として表示されます。選択肢とボタンに別々の文を用意しなくても、選んだoptionの中身がボタンに反映されます。
選んだ項目の中身をコピーする
ブラウザーは選ばれたoptionの子要素をselectedcontentへコピーします。元のoptionは選択肢の一覧に残ります。コピーされるのは中身であり、optionのvalueではありません。
optionにlabel属性を付けた場合、その属性の文字はselectedcontentにはコピーされません。表示する内容はoptionの中に書き、フォームで送る値はvalueに書くと役割を分けやすくなります。
見た目を変える
selectedcontentを使うと、選んだ項目の中にある文字や飾りをボタン側でも整えられます。ブラウザーによって対応状況が異なるため、使うブラウザーで表示と操作を確認してください。
@supports (appearance: base-select) {
.plan-select,
.plan-select::picker(select) {
appearance: base-select;
}
}
このCSSは対応しているブラウザーで選択メニューの見た目を調整するための入口です。CSSを使わなくてもselect自体の選択と送信の役目は変わりません。
よくある間違い
selectedcontentの中に表示したい文を書く。表示内容は選ばれたoptionからコピーされます。selectedcontentがフォームの値を送ると思う。フォーム値は選ばれたoptionのvalueから決まります。multipleを付けたselectでも使えると思う。複数選択の内容をこの方法で表示する仕組みではありません。- 対応状況を確かめずに公開する。使うブラウザーで選択、表示、キーボード操作を確認しましょう。
関連する要素
selectedcontentは単独では選択メニューを作りません。メニュー全体の役目はselect要素、選択肢はoption要素が担当します。仕様の条件やブラウザーの実測を詳しく知りたい場合は、Yugien Atlasのselectedcontentページを参照してください。