ボタンによってトリガーされる、アクションや機能のセットなどのメニューをユーザーに表示します。
import React from 'react';import * as DropdownMenu from '@radix-ui/react-dropdown-menu';import { HamburgerMenuIcon, DotFilledIcon, CheckIcon, ChevronRightIcon, } from '@radix-ui/react-icons';import './styles.css';const DropdownMenuDemo = () => {const [bookmarksChecked, setBookmarksChecked] = React.useState(true);const [urlsChecked, setUrlsChecked] = React.useState(false);const [person, setPerson] = React.useState('pedro');return (<DropdownMenu.Root><DropdownMenu.Trigger asChild><button className="IconButton" aria-label="Customise options"><HamburgerMenuIcon /></button></DropdownMenu.Trigger><DropdownMenu.Portal><DropdownMenu.Content className="DropdownMenuContent" sideOffset={5}><DropdownMenu.Item className="DropdownMenuItem">New Tab <div className="RightSlot">⌘+T</div></DropdownMenu.Item><DropdownMenu.Item className="DropdownMenuItem">New Window <div className="RightSlot">⌘+N</div></DropdownMenu.Item><DropdownMenu.Item className="DropdownMenuItem" disabled>New Private Window <div className="RightSlot">⇧+⌘+N</div></DropdownMenu.Item><DropdownMenu.Sub><DropdownMenu.SubTrigger className="DropdownMenuSubTrigger">More Tools<div className="RightSlot"><ChevronRightIcon /></div></DropdownMenu.SubTrigger><DropdownMenu.Portal><DropdownMenu.SubContent className="DropdownMenuSubContent" sideOffset={2} alignOffset={-5} ><DropdownMenu.Item className="DropdownMenuItem">Save Page As… <div className="RightSlot">⌘+S</div></DropdownMenu.Item><DropdownMenu.Item className="DropdownMenuItem">Create Shortcut…</DropdownMenu.Item><DropdownMenu.Item className="DropdownMenuItem">Name Window…</DropdownMenu.Item><DropdownMenu.Separator className="DropdownMenu.Separator" /><DropdownMenu.Item className="DropdownMenuItem">Developer Tools</DropdownMenu.Item></DropdownMenu.SubContent></DropdownMenu.Portal></DropdownMenu.Sub><DropdownMenu.Separator className="DropdownMenuSeparator" /><DropdownMenu.CheckboxItem className="DropdownMenuCheckboxItem" checked={bookmarksChecked} onCheckedChange={setBookmarksChecked} ><DropdownMenu.ItemIndicator className="DropdownMenuItemIndicator"><CheckIcon /></DropdownMenu.ItemIndicator>Show Bookmarks <div className="RightSlot">⌘+B</div></DropdownMenu.CheckboxItem><DropdownMenu.CheckboxItem className="DropdownMenuCheckboxItem" checked={urlsChecked} onCheckedChange={setUrlsChecked} ><DropdownMenu.ItemIndicator className="DropdownMenuItemIndicator"><CheckIcon /></DropdownMenu.ItemIndicator>Show Full URLs</DropdownMenu.CheckboxItem><DropdownMenu.Separator className="DropdownMenuSeparator" /><DropdownMenu.Label className="DropdownMenuLabel">People</DropdownMenu.Label><DropdownMenu.RadioGroup value={person} onValueChange={setPerson}><DropdownMenu.RadioItem className="DropdownMenuRadioItem" value="pedro"><DropdownMenu.ItemIndicator className="DropdownMenuItemIndicator"><DotFilledIcon /></DropdownMenu.ItemIndicator>Pedro Duarte</DropdownMenu.RadioItem><DropdownMenu.RadioItem className="DropdownMenuRadioItem" value="colm"><DropdownMenu.ItemIndicator className="DropdownMenuItemIndicator"><DotFilledIcon /></DropdownMenu.ItemIndicator>Colm Tuite</DropdownMenu.RadioItem></DropdownMenu.RadioGroup><DropdownMenu.Arrow className="DropdownMenuArrow" /></DropdownMenu.Content></DropdownMenu.Portal></DropdownMenu.Root>);};export default DropdownMenuDemo;
制御することも、制御しないことも可能です。
設定可能な読み取り方向を持つサブメニューをサポートします。
アイテム、ラベル、アイテムのグループをサポートします。
オプションで未確定状態を持つ、チェック可能なアイテム(単数または複数)をサポートします。
モーダルモードと非モーダルモードをサポートします。
サイド、アラインメント、オフセット、衝突処理をカスタマイズします。
オプションでポインティング矢印を描画します。
フォーカスは完全に管理されます。
完全なキーボードナビゲーション。
タイプアヘッドをサポートします。
ディスミッシングとレイヤリングの動作は高度にカスタマイズ可能です。
コマンドラインからコンポーネントをインストールします。
すべてのパーツをインポートして組み合わせます。
ドロップダウンメニューのすべてのパーツが含まれます。
ドロップダウンメニューを切り替えるボタン。デフォルトでは、DropdownMenu.Content
はトリガーに対して位置合わせされます。
使用すると、コンテンツ部分をbody
にポータルします。
ドロップダウンメニューが開いたときにポップアップするコンポーネント。
ドロップダウンメニューとともに描画するオプションの矢印要素。これは、トリガーとDropdownMenu.Content
を視覚的にリンクさせるのに役立ちます。DropdownMenu.Content
内に描画する必要があります。
ドロップダウンメニュー項目を含むコンポーネント。
複数のDropdownMenu.Item
をグループ化するために使用されます。
ラベルを描画するために使用されます。矢印キーを使用してフォーカスすることはできません。
チェックボックスのように制御および描画できる項目。
複数のDropdownMenu.RadioItem
をグループ化するために使用されます。
ラジオボタンのように制御および描画できる項目。
親のDropdownMenu.CheckboxItem
またはDropdownMenu.RadioItem
がチェックされている場合に描画します。この要素を直接スタイル設定することも、アイコンを入れるためのラッパーとして使用することも、または両方を行うこともできます。
ドロップダウンメニューの項目を視覚的に分離するために使用されます。
サブメニューのすべての部分が含まれます。
サブメニューを開く項目。DropdownMenu.Sub
内に描画する必要があります。
サブメニューが開いたときにポップアップするコンポーネント。DropdownMenu.Sub
内に描画する必要があります。
DropdownMenu.Sub
をそのパーツと組み合わせて使用することで、サブメニューを作成できます。
data-disabled
属性を介して無効な項目に特別なスタイルを追加できます。
Separator
部分を使用して、項目間にセパレーターを追加します。
Label
部分を使用して、セクションにラベルを付けるのに役立てます。
CheckboxItem
部分を使用して、チェックできる項目を追加します。
RadioGroup
とRadioItem
部分を使用して、他の項目の中でチェックできる項目を追加します。
Item
部分に画像などの装飾的な要素を追加できます。
コンテンツ(またはサブコンテンツ)の幅をトリガー(またはサブトリガー)の幅に一致するように制約したい場合があります。また、その高さをビューポートを超えないように制約したい場合もあります。
これをサポートするために、--radix-dropdown-menu-trigger-width
や--radix-dropdown-menu-content-available-height
などのいくつかのCSSカスタムプロパティを公開しています。それらを使用してコンテンツの寸法を制約してください。
CSSカスタムプロパティ--radix-dropdown-menu-content-transform-origin
を公開しています。side
、sideOffset
、align
、alignOffset
、および衝突に基づいて計算された原点からコンテンツをアニメーション化するために使用します。
data-side
およびdata-align
属性を公開しています。それらの値は、実行時に衝突を反映するように変化します。それらを使用して、衝突および方向認識アニメーションを作成します。
メニューボタンWAI-ARIAデザインパターンに準拠しており、メニュー項目間のフォーカス移動を管理するためにロービングタブインデックスを使用します。
プリミティブな部分を独自のコンポーネントに抽象化して、独自のAPIを作成します。
この例では、DropdownMenu.Arrow
およびDropdownMenu.ItemIndicator
部分を抽象化します。また、CheckboxItem
およびRadioItem
の実装詳細もラップします。