ボタンによってトリガーされ、ポータルにリッチコンテンツを表示します。
import React from 'react';import * as Popover from '@radix-ui/react-popover';import { MixerHorizontalIcon, Cross2Icon } from '@radix-ui/react-icons';import './styles.css';const PopoverDemo = () => (<Popover.Root><Popover.Trigger asChild><button className="IconButton" aria-label="Update dimensions"><MixerHorizontalIcon /></button></Popover.Trigger><Popover.Portal><Popover.Content className="PopoverContent" sideOffset={5}><div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}><p className="Text" style={{ marginBottom: 10 }}>Dimensions</p><fieldset className="Fieldset"><label className="Label" htmlFor="width">Width</label><input className="Input" id="width" defaultValue="100%" /></fieldset><fieldset className="Fieldset"><label className="Label" htmlFor="maxWidth">Max. width</label><input className="Input" id="maxWidth" defaultValue="300px" /></fieldset><fieldset className="Fieldset"><label className="Label" htmlFor="height">Height</label><input className="Input" id="height" defaultValue="25px" /></fieldset><fieldset className="Fieldset"><label className="Label" htmlFor="maxHeight">Max. height</label><input className="Input" id="maxHeight" defaultValue="none" /></fieldset></div><Popover.Close className="PopoverClose" aria-label="Close"><Cross2Icon /></Popover.Close><Popover.Arrow className="PopoverArrow" /></Popover.Content></Popover.Portal></Popover.Root>);export default PopoverDemo;
制御または非制御が可能です。
側面、配置、オフセット、衝突処理をカスタマイズできます。
オプションで矢印を表示できます。
フォーカスは完全に管理され、カスタマイズ可能です。
モーダルモードと非モーダルモードをサポートします。
非表示とレイヤーの動作は高度にカスタマイズ可能です。
コマンドラインからコンポーネントをインストールします。
すべてのパーツをインポートして組み立てます。
ポップオーバーのすべてのパーツが含まれています。
ポップオーバーを切り替えるボタンです。デフォルトでは、Popover.Content
はトリガーに対して自身を配置します。
Popover.Content
を配置するためのオプションの要素です。このパーツを使用しない場合、コンテンツは Popover.Trigger
に沿って配置されます。
使用すると、コンテンツ部分を body
にポータルします。
ポップオーバーが開いたときにポップアウトするコンポーネントです。
ポップオーバーと一緒にレンダリングするオプションの矢印要素。アンカーと Popover.Content
を視覚的にリンクするために使用できます。Popover.Content
内にレンダリングする必要があります。
開いているポップオーバーを閉じるボタンです。
コンテンツの幅がトリガーの幅と一致するように制約することをお勧めします。また、高さがビューポートを超えないように制約することもお勧めします。
これをサポートするために、--radix-popover-trigger-width
や --radix-popover-content-available-height
などのいくつかの CSS カスタムプロパティを公開しています。これらのプロパティを使用して、コンテンツのサイズを制約します。
CSS カスタムプロパティ --radix-popover-content-transform-origin
を公開しています。これを使用して、side
、sideOffset
、align
、alignOffset
、および衝突に基づいて計算された起点からコンテンツをアニメーション化します。
data-side
属性と data-align
属性を公開しています。これらの属性の値は、実行時に衝突を反映して変化します。これらの属性を使用して、衝突と方向を認識したアニメーションを作成します。
トリガーをアンカーとして使用したくない場合は、コンテンツを別の要素にアンカーすることができます。
ダイアログ WAI-ARIA デザインパターンに準拠しています。
プリミティブな部分を独自のコンポーネントに抽象化することで、独自の API を作成します。
この例では、Popover.Arrow
部分を抽象化し、デフォルトの sideOffset
設定を設定しています。