ウェブサイトをナビゲートするためのリンクのコレクション。
import React from 'react';import * as NavigationMenu from '@radix-ui/react-navigation-menu';import classNames from 'classnames';import { CaretDownIcon } from '@radix-ui/react-icons';import './styles.css';const NavigationMenuDemo = () => {return (<NavigationMenu.Root className="NavigationMenuRoot"><NavigationMenu.List className="NavigationMenuList"><NavigationMenu.Item><NavigationMenu.Trigger className="NavigationMenuTrigger">Learn <CaretDownIcon className="CaretDown" aria-hidden /></NavigationMenu.Trigger><NavigationMenu.Content className="NavigationMenuContent"><ul className="List one"><li style={{ gridRow: 'span 3' }}><NavigationMenu.Link asChild><a className="Callout" href="/"><svg aria-hidden width="38" height="38" viewBox="0 0 25 25" fill="white"><path d="M12 25C7.58173 25 4 21.4183 4 17C4 12.5817 7.58173 9 12 9V25Z"></path><path d="M12 0H4V8H12V0Z"></path><path d="M17 8C19.2091 8 21 6.20914 21 4C21 1.79086 19.2091 0 17 0C14.7909 0 13 1.79086 13 4C13 6.20914 14.7909 8 17 8Z"></path></svg><div className="CalloutHeading">Radix Primitives</div><p className="CalloutText">Unstyled, accessible components for React.</p></a></NavigationMenu.Link></li><ListItem href="https://stitches.dev/" title="Stitches">CSS-in-JS with best-in-class developer experience.</ListItem><ListItem href="/colors" title="Colors">Beautiful, thought-out palettes with auto dark mode.</ListItem><ListItem href="https://icons.radix-ui.com/" title="Icons">A crisp set of 15x15 icons, balanced and consistent.</ListItem></ul></NavigationMenu.Content></NavigationMenu.Item><NavigationMenu.Item><NavigationMenu.Trigger className="NavigationMenuTrigger">Overview <CaretDownIcon className="CaretDown" aria-hidden /></NavigationMenu.Trigger><NavigationMenu.Content className="NavigationMenuContent"><ul className="List two"><ListItem title="Introduction" href="/primitives/docs/overview/introduction">Build high-quality, accessible design systems and web apps.</ListItem><ListItem title="Getting started" href="/primitives/docs/overview/getting-started">A quick tutorial to get you up and running with Radix Primitives.</ListItem><ListItem title="Styling" href="/primitives/docs/guides/styling">Unstyled and compatible with any styling solution.</ListItem><ListItem title="Animation" href="/primitives/docs/guides/animation">Use CSS keyframes or any animation library of your choice.</ListItem><ListItem title="Accessibility" href="/primitives/docs/overview/accessibility">Tested in a range of browsers and assistive technologies.</ListItem><ListItem title="Releases" href="/primitives/docs/overview/releases">Radix Primitives releases and their changelogs.</ListItem></ul></NavigationMenu.Content></NavigationMenu.Item><NavigationMenu.Item><NavigationMenu.Link className="NavigationMenuLink" href="https://github.com/radix-ui">Github</NavigationMenu.Link></NavigationMenu.Item><NavigationMenu.Indicator className="NavigationMenuIndicator"><div className="Arrow" /></NavigationMenu.Indicator></NavigationMenu.List><div className="ViewportPosition"><NavigationMenu.Viewport className="NavigationMenuViewport" /></div></NavigationMenu.Root>);};const ListItem = React.forwardRef(({ className, children, title, ...props }, forwardedRef) => (<li><NavigationMenu.Link asChild><a className={classNames('ListItemLink', className)} {...props} ref={forwardedRef}><div className="ListItemHeading">{title}</div><p className="ListItemText">{children}</p></a></NavigationMenu.Link></li>));export default NavigationMenuDemo;
制御可能または非制御可能です。
管理されたタブフォーカスによる柔軟なレイアウト構造。
サブメニューをサポートします。
オプションのアクティブアイテムインジケーター。
完全なキーボードナビゲーション。
高度なアニメーションのためのCSS変数を公開します。
カスタムタイミングをサポートします。
コマンドラインからコンポーネントをインストールします。
すべての部品をインポートして組み立てる。
ナビゲーションメニューのすべての部品を含みます。
サブメニューを示します。ネストしてサブメニューを作成する際には、ルートの代わりに使用します。
最上位のメニューアイテムを含みます。
最上位のメニューアイテム。リンクまたはトリガーとコンテンツの組み合わせを含みます。
コンテンツを切り替えるボタン。
各トリガーに関連付けられたコンテンツを含みます。
ナビゲーションリンク。
リストの下に表示されるオプションのインジケーター要素。現在アクティブなトリガーを強調表示するために使用されます。
アクティブなコンテンツをリストの外側に表示するために使用されるオプションのビューポート要素。
orientation
プロパティを使用することで、垂直メニューを作成できます。
Content
のレンダリング位置をより詳細に制御する必要がある場合、Viewport
部分を使用します。これは、デザインで調整されたDOM構造が必要な場合、または高度なアニメーションを実現するために柔軟性が必要な場合に役立ちます。タブフォーカスは自動的に維持されます。
オプションのIndicator
部分を使用して、現在アクティブなTrigger
を強調表示できます。これは、矢印やハイライトなどのアニメーションによる視覚的な合図をViewport
に合わせて提供したい場合に役立ちます。
NavigationMenu
をネストし、そのRoot
の代わりにSub
部分を使用することで、サブメニューを作成できます。サブメニューはRoot
ナビゲーションメニューとは異なり、常に1つのアイテムがアクティブである必要がある点でTabs
と似ており、defaultValue
を割り当てて設定することを必ず行ってください。
ルーティングパッケージによって提供されるLink
コンポーネントを使用する必要がある場合は、カスタムコンポーネントを介してNavigationMenu.Link
と組み合わせることをお勧めします。これにより、アクセシビリティと一貫性のあるキーボード操作が維持されます。Next.js を使用した例を以下に示します。
--radix-navigation-menu-viewport-[width|height]
とdata-motion['from-start'|'to-start'|'from-end'|'to-end']
属性を使用することで、Viewport
のサイズとContent
の位置を、入出力方向に基づいてアニメーション化できます。
これらをposition: absolute;
と組み合わせることで、アイテム間を移動するときのスムーズなオーバーラップアニメーション効果を作成できます。
navigation
ロール要件に準拠しています。
NavigationMenu
はmenubar
と混同しないでください。このプリミティブは、ナビゲーションリンクのセットを指す口語的な意味でmenu
という名前を共有していますが、WAI-ARIA のmenu
ロールは使用しません。これは、menu
とmenubars
が、デスクトップアプリケーションウィンドウで一般的に見られるネイティブオペレーティングシステムのメニューのように動作するためです。そのため、複合フォーカス管理や先頭文字ナビゲーションなどの複雑な機能を備えています。
これらの機能は、ウェブサイトのナビゲーションには不要とみなされることが多く、最悪の場合、確立されたウェブサイトのパターンに慣れているユーザーを混乱させる可能性があります。
詳細については、W3C の開閉式ナビゲーションメニューの例を参照してください。
メニュー内のすべてのナビゲーションリンクにはNavigationMenu.Link
を使用する必要があります。これはメインリストだけでなく、NavigationMenu.Content
を介してレンダリングされるコンテンツにも適用されます。active
プロパティを使用してaria-current
とアクティブスタイルを設定することもできます。サードパーティのルーティングコンポーネントを使用した使用方法の詳細については、この例を参照してください。