Select
Selectは、ドロップダウンリストからひとつの値を選択するフォームコントロールです。キーボード操作やスクリーンリーダーに対応したアクセシブルな実装で、ネイティブフォーム送信もサポートします。
Playground
<Select>
<Select.Trigger>
<Select.Value placeholder="Select a fruit" />
</Select.Trigger>
<Select.Content>
<Select.Item value="apple">Apple</Select.Item>
<Select.Item value="banana">Banana</Select.Item>
<Select.Item value="cherry">Cherry</Select.Item>
<Select.Item value="grape">Grape</Select.Item>
</Select.Content>
</Select>Variants
Sizes
xssmdefaultlgxl| Size | 高さ | フォント | アイテム | プレビュー |
|---|---|---|---|---|
xs | 36px | 13px | sm | |
sm | 40px | 14px | sm | |
default | 44px | 16px | md | |
lg | 48px | 16px | md | |
xl | 56px | 16px | lg |
API
Component Structure
Select— Radix Select.TriggerPropsトリガーボタン.Value選択値の表示.ContentPropsドロップダウンパネル(flush対応).ItemProps選択アイテム.Groupアイテムグループ.Labelグループラベル.Separator区切り線Props
Select (Root)
size"default""xs" | "sm" | "default" | "lg" | "xl"Triggerの高さとフォントサイズ。Contentに自動伝播
radius"default""none" | "sm" | "base" | "default" | "lg" | "xl" | "2xl" | "3xl" | "full"角丸のサイズ (6px)。Triggerに直接適用、Contentに自動マッピング
valueundefinedstring制御モードの選択値
defaultValueundefinedstring非制御モードの初期値
onValueChangeundefined(value: string) => void値が変更された時のコールバック
nameundefinedstringフォーム送信用の名前
requiredundefinedboolean必須フィールド指定
disabledundefinedboolean全体を無効化
openundefinedboolean制御モードの開閉状態
onOpenChangeundefined(open: boolean) => void開閉状態が変更された時のコールバック
| Name | Type | Default | Description |
|---|---|---|---|
size | "xs" | "sm" | "default" | "lg" | "xl" | "default" | Triggerの高さとフォントサイズ。Contentに自動伝播 |
radius | "none" | "sm" | "base" | "default" | "lg" | "xl" | "2xl" | "3xl" | "full" | "default" | 角丸のサイズ (6px)。Triggerに直接適用、Contentに自動マッピング |
value | string | undefined | 制御モードの選択値 |
defaultValue | string | undefined | 非制御モードの初期値 |
onValueChange | (value: string) => void | undefined | 値が変更された時のコールバック |
name | string | undefined | フォーム送信用の名前 |
required | boolean | undefined | 必須フィールド指定 |
disabled | boolean | undefined | 全体を無効化 |
open | boolean | undefined | 制御モードの開閉状態 |
onOpenChange | (open: boolean) => void | undefined | 開閉状態が変更された時のコールバック |
Select.Trigger
disabledundefinedbooleanトリガーボタンを無効化
asChildfalseboolean子要素をトリガーとしてレンダリング
| Name | Type | Default | Description |
|---|---|---|---|
disabled | boolean | undefined | トリガーボタンを無効化 |
asChild | boolean | false | 子要素をトリガーとしてレンダリング |
Select.Content
position"popper""item-aligned" | "popper"ドロップダウンの配置方法
flushfalsebooleanアイテムをフル幅で表示(パディングなし)
side"bottom""top" | "right" | "bottom" | "left"ドロップダウンの表示方向(popper時のみ)
sideOffset1numberトリガーからの距離(px)
| Name | Type | Default | Description |
|---|---|---|---|
position | "item-aligned" | "popper" | "popper" | ドロップダウンの配置方法 |
flush | boolean | false | アイテムをフル幅で表示(パディングなし) |
side | "top" | "right" | "bottom" | "left" | "bottom" | ドロップダウンの表示方向(popper時のみ) |
sideOffset | number | 1 | トリガーからの距離(px) |
Select.Item
value—stringアイテムの値(必須)
disabledundefinedbooleanアイテムを選択不可に
textValueundefinedstringタイプアヘッド用のテキスト値
| Name | Type | Default | Description |
|---|---|---|---|
value | string | — | アイテムの値(必須) |
disabled | boolean | undefined | アイテムを選択不可に |
textValue | string | undefined | タイプアヘッド用のテキスト値 |
Customization
classNameでトリガーやコンテンツのスタイルをカスタマイズできます。
幅の変更
<Select.Content className="w-72">フル幅トリガー
<Select.Trigger className="w-full">Tip: 各サブコンポーネントはclassNameを受け取り、Tailwindクラスでスタイルを上書きできます。
Anatomy
Best Practices
推奨
- ✓選択肢が5個以上ある場合に使用する
- ✓選択肢が多い場合はGroupで分類する
- ✓placeholderで選択内容を案内する
- ✓フォーム内ではnameとrequiredを設定する
避けるべき
- ✗選択肢が3個以下ならRadioを検討
- ✗アクション実行にはDropdownを使う
- ✗複数選択が必要な場合は別UIを検討
- ✗placeholderなしで初期値も未設定にしない
Accessibility
キーボード操作
ARIA属性
role="listbox"Content自動付与role="option"Item自動付与aria-expandedTrigger状態管理- タイプアヘッドによる文字検索
Select vs Dropdown
見た目は似ていますが、用途と動作が異なります。適切なコンポーネントを選択してください。
用途
Select: 値の選択
Dropdown: アクションの実行
フォーム連携
Select: name / value 送信可能
Dropdown: なし
選択後の表示
Select: 選択値がトリガーに反映
Dropdown: メニューが閉じるだけ
アイテム種類
Select: 単一選択アイテム
Dropdown: Item, Checkbox, Radio, Sub
ユースケース
Select: 国選択、カテゴリー、ソート順
Dropdown: コンテキストメニュー、アカウント操作
| 特徴 | Select | Dropdown |
|---|---|---|
| 用途 | 値の選択 | アクションの実行 |
| フォーム連携 | name / value 送信可能 | なし |
| 選択後の表示 | 選択値がトリガーに反映 | メニューが閉じるだけ |
| アイテム種類 | 単一選択アイテム | Item, Checkbox, Radio, Sub |
| ユースケース | 国選択、カテゴリー、ソート順 | コンテキストメニュー、アカウント操作 |
選択の目安: ユーザーが値を選んでフォームに送信する場合は Select が適切です。クリック時にアクション(編集、削除、共有など)を実行する場合は Dropdown を使用してください。