在一个门户中通过按钮触发显示丰富的内容。
import * as React from "react";import { Popover } from "radix-ui";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
内部渲染。
关闭打开的弹出框的按钮。
您可能想要限制内容的宽度以匹配触发器的宽度。您还可能想要限制其高度以不超过视口。
我们提供了多个 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
配置。