
UI/UX
公開 読了まで 約12分

「このドロップダウン(セレクトボックス)、アイコンと説明文も入れてください」。デザインを受け取って、div と JavaScript で作るか、ライブラリを入れるかで迷ったことはないでしょうか。自作するとキーボード操作、スクリーンリーダー、フォームの送信、モバイルでの挙動まで、全部こちらで面倒を見ることになります。
2026年9月の Safari 27.0 で、select を CSS で作り込める「カスタマイズ可能な select(Customizable Select)」が入り、10月の Safari 27.2 で手直しが入りました。Chrome は 135 から対応しているので、主要なエンジンの3つのうち2つで使えるようになったことになります。
ただ、Firefox ではまだ既定では使えません。この記事では、話題の機能の紹介で終わらせず、「本物の select で足りるかの判断」と「未対応のブラウザでも壊れない書き方」を、手元で動かして確かめたコードと一緒にまとめます。
変わりやすいところなので、この節にまとめます(2026年11月13日時点)。
| ブラウザ | 状況 | 出典 |
|---|---|---|
| Chrome(デスクトップ・Android)、Edge | 135 から対応 | Chrome の記事、blink-dev の Intent to ship、caniuse |
| Safari(macOS・iOS・iPadOS・visionOS) | 27.0 から対応。27.2 で ::field-content の追加などの手直し |
WebKit の Safari 27.0・27.2 の記事 |
| Firefox | 既定では使えない(実装のバグが開いたまま) | Bugzilla 1944403、caniuse |
Safari 27.2 の主な変更は3つです。<selectedcontent> を使わずに、選ばれている option の文字を整えられる ::field-content が加わったこと、<selectedcontent> がなくても開閉の印(picker icon)がいつも出るようになったこと、大きな選択肢の一覧が画面からはみ出さないよう safe の配置が使われるようになったことです。
ブラウザの既定の見た目(UA スタイル)は、WebKit が CSS の作業部会(CSS WG)に提示し、さらに議論して磨いている途中だと WebKit の記事にあります。既定の見た目に頼らず、必要なところは自分で指定しておくほうが、あとで見た目が変わったときに慌てずに済みます。
カスタマイズ可能な select は、<select> そのものの見た目を作り込める仕組みです。選んだ値はふつうの select と同じようにフォームで送られ、キーボード操作やスクリーンリーダーへの対応はブラウザが持ちます。その代わり、できることは「一覧から1つ選ぶ」の範囲です。

本物の select に向く場面
作り込まない、または別の部品を選ぶ場面
appearance: base-select にすると、モバイルの OS の部品は出なくなると Chrome の記事にあります。この場合は、作り込まないふつうの select のままにしますmultiple や size を付けたときの対応はブラウザごとに違うので、使う前にそれぞれ確かめてくださいデザイナーとは、作り込む前に「未対応のブラウザではふつうの select に見える」ことを合意しておくのがおすすめです。ここで合意できないなら、本物の select ではなく、自作かライブラリを選ぶことになります。
作り込みを始めるには、select 本体と、開いたときの一覧(::picker(select))の両方に appearance: base-select を指定します。MDN には、一覧だけを切り替えることはできない、とあります。
select,
::picker(select) {
appearance: base-select;
}
閉じているときの表示を差し替えたいときは、select の最初の子に <button> を置きます。その中の <selectedcontent> には、選ばれている option の中身の複製が入ります。
<label for="plan">プラン</label>
<select id="plan" name="plan" class="plan-select">
<button><selectedcontent></selectedcontent></button>
<option value="lite">
<img class="icon" src="lite.svg" alt="">
<span>ライト</span>
<span class="note">月10件まで</span>
</option>
<option value="pro" selected>
<img class="icon" src="pro.svg" alt="">
<span>プロ</span>
<span class="note">月100件まで</span>
</option>
<option value="team">
<img class="icon" src="team.svg" alt="">
<span>チーム</span>
<span class="note">月500件まで</span>
</option>
</select>
開いたときの一覧はポップオーバーで、最上位のレイヤー(top layer)に出て、CSS のアンカー配置で select に結び付けられます。そのため、親に overflow: hidden があっても一覧は切れにくく、手元の確認(後の節)でも切れませんでした。自作のドロップダウンでよく出会う「カードの中で一覧が切れる」問題が起きにくい作りです。
WebKit は「option には必ずテキスト(または代替テキスト)を入れる」ことをカスタマイズ可能な select の黄金律とし、作り込みは @supports (appearance: base-select) で囲んで、ふつうの文字を土台にするよう勧めています。MDN にも、対応していないブラウザではふつうの select に戻る、とあります。
/* 1. 未対応のブラウザでも読める、ふつうの select */
.plan-select {
font: inherit;
padding: 0.5rem 0.75rem;
}
/* 2. 対応しているブラウザだけ作り込む */
@supports (appearance: base-select) {
.plan-select,
.plan-select::picker(select) {
appearance: base-select;
}
.plan-select {
border: 1px solid #5c5c61;
border-radius: 8px;
background: #fff;
}
.plan-select::picker(select) {
border: 1px solid #5c5c61;
border-radius: 8px;
padding: 4px;
}
.plan-select option {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.5rem;
}
.plan-select option:checked {
background: #f4f4f5;
}
.plan-select .icon {
inline-size: 20px;
block-size: 20px;
}
/* 閉じているときは説明文を出さない */
.plan-select selectedcontent .note {
display: none;
}
}

書くときに気をつけたいのは次の3つです。
.visually-hidden)もアクセシビリティツリーには残る、と書いていますdisplay: none で隠しています::checkmark(選択中の印)と ::picker-icon(開閉の印)はアクセシビリティツリーに入りません。見た目の飾りとして扱います上の HTML と CSS を、Playwright 1.63.0 の Chromium 153(ヘッドレス)で動かしました。
CSS.supports('appearance: base-select') は true、select の計算値は base-selectlite に変えると、<selectedcontent> の中身も「ライト 月10件まで」に入れ替わる(表示は CSS で説明文を隠して「ライト」だけ):open が true)、矢印キーと Enter で値が変わるoverflow: hidden の親の中に置いても、開いた一覧は親の外まで表示され、クリックで選べる位置にあるFormData で選んだ値(pro)が取れるFirefox と Safari では、この環境では動かしていません。未対応のブラウザでの見え方は、MDN と WebKit の記事の説明によります。
MDN は、option の中に入れられるものとして、画像や、操作しない文字レベルの要素(span、strong など)を挙げています。HTML の仕様では、option の中に操作できる要素(リンク、ボタン、入力欄など)を置いてはいけません。

| 入れてよい | 入れない |
|---|---|
テキスト、span・strong・em など |
a(リンク) |
img(飾りなら alt=""、意味があるなら代替テキスト) |
button、input、select |
svg のアイコン |
tabindex を付けた要素 |
「選択肢ごとに詳しく見るリンクを置きたい」と言われたら、それは select ではなく、ラジオボタンのグループや、リンクを並べたメニューの出番です。部品を選び直すことをデザイナーに提案するのが、結局いちばんの近道です。
value が届くsafe の配置で画面内に収める)::picker(select) の両方に appearance: base-select を指定し、作り込みは @supports で囲みます。option には必ず文字を入れます自作のドロップダウンを本物の select に置き換えるかの見極めや、デザインと実装の受け渡しで迷ったら、MODS BASE にご相談ください。
MODS BASE
MODS BASEは、長野県上伊那郡辰野町を拠点に、WEB 制作、WEB 集客の運用代行、UI/UX デザイン・プロダクト開発、ブランディング・グラフィック、AI 導入支援を手がけるデザイン・開発スタジオです。全国のお客様にオンラインで対応しています。
WEB 制作
何を伝え、どう動いてもらうか。UX の設計から考えるホームページ制作。
( Related )