在门户中显示丰富的內容,由按钮触发。
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 的所有部分。
切换 Popover 的按钮。默认情况下,Popover.Content
将定位到触发器。
可选元素,用于将 Popover.Content
定位到。如果未使用此部分,内容将与 Popover.Trigger
定位在一起。
使用时,将内容部分门户到 body
中。
Popover 打开时弹出的组件。
一个可选的箭头元素,用于与 Popover 一起渲染。这可以用于帮助将锚点与 Popover.Content
视觉上关联起来。必须在 Popover.Content
内部渲染。
关闭打开的弹出窗口的按钮。
您可能希望约束内容的宽度,使其与触发器宽度匹配。您可能还想约束其高度,使其不超过视窗。
我们公开了一些 CSS 自定义属性,例如 --radix-popover-trigger-width
和 --radix-popover-content-available-height
来支持这一点。使用它们来约束内容尺寸。
我们公开了一个 CSS 自定义属性 --radix-popover-content-transform-origin
。使用它根据 side
、sideOffset
、align
、alignOffset
和任何冲突从其计算出的原点为内容设置动画。
我们公开 data-side
和 data-align
属性。它们的取值将在运行时更改以反映碰撞。使用它们来创建碰撞和方向感知动画。
如果您不想使用触发器作为锚点,可以将内容锚定到另一个元素。
通过将原始部分抽象到您自己的组件中来创建您自己的 API。
此示例抽象了 Popover.Arrow
部分并设置了默认的 sideOffset
配置。