右クリックまたは長押しで表示される、ポインターの位置に表示されるメニューです。
import React from 'react';import * as ContextMenu from '@radix-ui/react-context-menu';import { DotFilledIcon, CheckIcon, ChevronRightIcon } from '@radix-ui/react-icons';import './styles.css';const ContextMenuDemo = () => {const [bookmarksChecked, setBookmarksChecked] = React.useState(true);const [urlsChecked, setUrlsChecked] = React.useState(false);const [person, setPerson] = React.useState('pedro');return (<ContextMenu.Root><ContextMenu.Trigger className="ContextMenuTrigger">Right-click here.</ContextMenu.Trigger><ContextMenu.Portal><ContextMenu.Content className="ContextMenuContent" sideOffset={5} align="end"><ContextMenu.Item className="ContextMenuItem">Back <div className="RightSlot">⌘+[</div></ContextMenu.Item><ContextMenu.Item className="ContextMenuItem" disabled>Forward <div className="RightSlot">⌘+]</div></ContextMenu.Item><ContextMenu.Item className="ContextMenuItem">Reload <div className="RightSlot">⌘+R</div></ContextMenu.Item><ContextMenu.Sub><ContextMenu.SubTrigger className="ContextMenuSubTrigger">More Tools<div className="RightSlot"><ChevronRightIcon /></div></ContextMenu.SubTrigger><ContextMenu.Portal><ContextMenu.SubContent className="ContextMenuSubContent" sideOffset={2} alignOffset={-5} ><ContextMenu.Item className="ContextMenuItem">Save Page As… <div className="RightSlot">⌘+S</div></ContextMenu.Item><ContextMenu.Item className="ContextMenuItem">Create Shortcut…</ContextMenu.Item><ContextMenu.Item className="ContextMenuItem">Name Window…</ContextMenu.Item><ContextMenu.Separator className="ContextMenuSeparator" /><ContextMenu.Item className="ContextMenuItem">Developer Tools</ContextMenu.Item></ContextMenu.SubContent></ContextMenu.Portal></ContextMenu.Sub><ContextMenu.Separator className="ContextMenuSeparator" /><ContextMenu.CheckboxItem className="ContextMenuCheckboxItem" checked={bookmarksChecked} onCheckedChange={setBookmarksChecked} ><ContextMenu.ItemIndicator className="ContextMenuItemIndicator"><CheckIcon /></ContextMenu.ItemIndicator>Show Bookmarks <div className="RightSlot">⌘+B</div></ContextMenu.CheckboxItem><ContextMenu.CheckboxItem className="ContextMenuCheckboxItem" checked={urlsChecked} onCheckedChange={setUrlsChecked} ><ContextMenu.ItemIndicator className="ContextMenuItemIndicator"><CheckIcon /></ContextMenu.ItemIndicator>Show Full URLs</ContextMenu.CheckboxItem><ContextMenu.Separator className="ContextMenuSeparator" /><ContextMenu.Label className="ContextMenuLabel">People</ContextMenu.Label><ContextMenu.RadioGroup value={person} onValueChange={setPerson}><ContextMenu.RadioItem className="ContextMenuRadioItem" value="pedro"><ContextMenu.ItemIndicator className="ContextMenuItemIndicator"><DotFilledIcon /></ContextMenu.ItemIndicator>Pedro Duarte</ContextMenu.RadioItem><ContextMenu.RadioItem className="ContextMenuRadioItem" value="colm"><ContextMenu.ItemIndicator className="ContextMenuItemIndicator"><DotFilledIcon /></ContextMenu.ItemIndicator>Colm Tuite</ContextMenu.RadioItem></ContextMenu.RadioGroup></ContextMenu.Content></ContextMenu.Portal></ContextMenu.Root>);};export default ContextMenuDemo;
設定可能な読み取り方向を持つサブメニューをサポートします。
項目、ラベル、項目のグループをサポートします。
オプションで不確定状態を持つ、チェック可能な項目(単一または複数)をサポートします。
モーダルモードと非モーダルモードをサポートします。
側面、配置、オフセット、衝突処理をカスタマイズできます。
フォーカスは完全に管理されます。
完全なキーボードナビゲーション。
タイプアヘッドをサポートします。
破棄とレイヤーの動作は高度にカスタマイズ可能です。
タッチデバイスでの長押しでトリガーします
コマンドラインからコンポーネントをインストールします。
すべてのパーツをインポートして組み立てます。
メニューの WAI-ARIA デザインパターン に準拠しており、メニュー項目間のフォーカス移動を管理するために ロービング tabindex を使用しています。
コンテキストメニューのすべての部分を含みます。
コンテキストメニューを開く領域です。右クリック(または関連するキーボードショートカットを使用)したときにコンテキストメニューを開きたいターゲットをラップします。
使用すると、コンテンツ部分を body
にポータルします。
開いているコンテキストメニューでポップアウトするコンポーネントです。
サブメニューと一緒にレンダリングするオプションの矢印要素。これは、トリガー項目を ContextMenu.Content
と視覚的にリンクするのに役立ちます。 ContextMenu.Content
の内部でレンダリングする必要があります。
コンテキストメニュー項目を含むコンポーネントです。
複数の ContextMenu.Item
をグループ化するために使用します。
ラベルをレンダリングするために使用します。矢印キーを使用してフォーカスすることはできません。
チェックボックスのように制御およびレンダリングできる項目。
複数の ContextMenu.RadioItem
をグループ化するために使用します。
ラジオのように制御およびレンダリングできる項目。
親の ContextMenu.CheckboxItem
または ContextMenu.RadioItem
がチェックされている場合にレンダリングします。この要素を直接スタイル設定するか、アイコンを入れるためのラッパーとして使用するか、またはその両方を行うことができます。
コンテキストメニュー内の項目を視覚的に分離するために使用します。
サブメニューのすべての部分を含みます。
サブメニューを開く項目。ContextMenu.Sub
の内部でレンダリングする必要があります。
サブメニューが開いているときにポップアウトするコンポーネント。ContextMenu.Sub
の内部でレンダリングする必要があります。
ContextMenu.Sub
をその部品と組み合わせて使用することで、サブメニューを作成できます。
data-disabled
属性を介して、無効な項目に特別なスタイルを追加できます。
Separator
部品を使用して、項目間に区切り線を追加します。
Label
部品を使用して、セクションのラベル付けを支援します。
CheckboxItem
部品を使用して、チェックできる項目を追加します。
RadioGroup
および RadioItem
部品を使用して、他の項目の中でチェックできる項目を追加します。
画像など、装飾的な要素を Item
部品に追加できます。
コンテンツ(またはサブコンテンツ)の幅をトリガー(またはサブトリガー)の幅に合わせて制約したい場合があります。また、高さをビューポートを超えないように制約したい場合があります。
これをサポートするために、 --radix-context-menu-trigger-width
や --radix-context-menu-content-available-height
などのいくつかの CSS カスタムプロパティを公開しています。これらを使用して、コンテンツの寸法を制約します。
CSS カスタムプロパティ --radix-context-menu-content-transform-origin
を公開しています。これを使用して、 side
、 sideOffset
、 align
、 alignOffset
、および衝突に基づいて計算された原点からコンテンツをアニメーション化します。
data-side
および data-align
属性を公開します。それらの値は、衝突を反映するために実行時に変化します。これらを使用して、衝突と方向に対応したアニメーションを作成します。
メニュー項目間のフォーカス移動を管理するために、 ロービング tabindex を使用しています。