在门户中显示富内容,由按钮触发。
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
配置。