Skip to content

Popover 气泡卡片

xy-popover 用来承载比 Tooltip 更重一点的说明或轻交互内容。它不是纯提示,也不需要像 Dialog 那样阻断页面。

迁移提示

  • 后台项目如果只是想收口 popover 的背景、边框、阴影、宽度或圆角,优先使用:
    • popper-class
    • popper-style
    • width
  • 不建议继续在页面层 deep 到 .xy-popover__panel.xy-popover__header.xy-popover__content 这类内部结构类名。
  • 如果浮层内容已经开始接近确认弹层或小型表单,先判断是否应该升级到 xy-dialogxy-drawer,不要在业务页继续堆叠局部补丁。

基础用法

最常见的场景是放一段说明文案和一个轻量按钮,让用户在原地完成理解或确认。

基础用法点击触发

气泡卡片支持更丰富的内容展示,适合解释性信息和操作入口。

自定义头部与宽度

Popover 支持自定义触发区、头部和内容宽度,适合做一张轻量操作卡片。

触发方式与内部关闭

triggercontent 和默认插槽暴露的 close 方法,适合做 hover 说明卡片或在卡片内部主动关闭。

嵌套浮层

当轻量说明需要升级成阻断确认时,可以在 Popover 内把处理链路升级到 Dialog。

实例级样式收口

当后台项目只想让轻交互卡片更贴近当前主题时,优先通过 popper-class 和实例级变量收口,而不是继续 deep 到内部类名。

浮层边界

  • Tooltip:短文案、解释性提示,不承载操作。
  • Popover:多段说明、轻量交互,不是确认弹层。
  • Popconfirm:确认类交互(删除确认、发布确认),不是一般说明浮层。
  • Dropdown:菜单/操作列表,不是提示或确认浮层。

API

命名对照

Vue 模板中属性和事件使用 kebab-case,源码 props / emits 使用 camelCase,两者由 Vue 自动转换,无需手动处理。

属性映射

模板写法(kebab-case)源码 props(camelCase)
model-valuemodelValue
close-on-outsidecloseOnOutside
close-on-esccloseOnEsc
open-delayopenDelay
close-delaycloseDelay
show-aftershowAfter
hide-afterhideAfter
show-arrowshowArrow
append-toappendTo
popper-classpopperClass
popper-stylepopperStyle

其余属性(titlecontentplacementwidthdisabledtriggerenterableoffsetteleportedpersistent)为单词形式,模板与源码写法一致,无需转换。

事件映射

模板写法源码 emit说明
@update:model-valueupdate:modelValueVue 将 modelValue 自动转为 model-value,模板监听时必须写 @update:model-value
@openopen单词形式,写法一致
@closeclose单词形式,写法一致

在 TS 对象、组件 props 类型、JSX / TSX 或手动声明回调函数的场景里传参或取类型,应以 camelCase 名称为准。

Popover Attributes

属性说明类型默认值
model-value是否打开booleanfalse
title标题string''
content纯文本内容string''
placement浮层位置Placement'bottom'
width面板宽度string | number320
close-on-outside点击外部是否关闭booleantrue
close-on-escEscape 是否关闭booleantrue
disabled是否禁用booleanfalse
trigger触发方式PopoverTrigger'click'
open-delay打开延迟number80
close-delay关闭延迟number60
show-after打开延迟别名,优先级高于 open-delaynumberundefined
hide-after关闭延迟别名,优先级高于 close-delaynumberundefined
enterable浮层是否允许进入booleantrue
offset浮层偏移量number10
show-arrow是否显示箭头booleantrue
teleported是否通过 Teleport 挂载到外层容器booleantrue
append-toTeleport 的挂载目标string | HTMLElement'body'
persistent关闭后是否保留 DOMbooleanfalse
popper-class浮层容器自定义类名string''
popper-style浮层容器自定义样式StyleValueundefined

Popover Events

事件说明参数
update:model-value开关状态变化PopoverModelValueChangeHandler
open打开时触发
close关闭时触发

事件名映射详见上方事件映射

Popover Slots

插槽说明
reference推荐的触发区域插槽,新代码优先使用
trigger兼容的触发区域插槽,仅当 reference 未提供时回退生效
header自定义头部
default面板主体内容,插槽参数为 PopoverDefaultSlotProps

源码回退顺序:referencetrigger → 默认按钮("打开说明")。