Skip to content

Tooltip 文字提示

悬停或聚焦时显示的补充说明。十二种方位,自动翻转。

基础用法

vue
<SrTooltip content="这是提示内容">
  <SrButton>悬停查看</SrButton>
</SrTooltip>

触发器由默认插槽提供,组件会给它加上事件监听与 ARIA 属性。

十二种方位

vue
<SrTooltip content="上方居中" placement="top" />
<SrTooltip content="左上对齐" placement="top-start" />
<SrTooltip content="左下对齐" placement="top-end" />

-start-end 表示沿主轴的对齐方式。以 top 为例: top-start 是提示框左边缘与触发器左边缘对齐,top-end 则右对齐。

空间不足时自动翻转

这是 Tooltip 最容易出问题的地方。

靠近视口顶部时,placement="top" 的提示框会被裁掉。 组件会检测可用空间并自动翻到下方——而不是让用户看不到内容。

翻转为什么是必需的

Tooltip 的内容只在悬停时可见。若被裁掉,用户悬停了、 什么都没看到、移开、再悬停——没有任何线索告诉他是"位置不对"

这类"功能静默失效"最难被发现。宁可翻转到不那么理想的位置, 也不能什么都不显示。

延迟控制

showDelay / hideDelay 控制显示与隐藏的延时。

vue
<SrTooltip content="立即显示" :show-delay="0" />
<SrTooltip content="等 600ms" :show-delay="600" :hide-delay="100" />

移动端建议关掉 Tooltip

触摸屏上没有悬停——用户"点一下"才可能触发, 而点击通常已经有别的含义了。

移动端常见做法是把提示内容直接写在界面上, 或用可点开的 SrPopover 这类组件替代。

箭头与宽度

vue
<SrTooltip content="没有箭头" :arrow="false" />
<SrTooltip content="很长的内容…" max-width="200px" />

没有 maxWidth 时长文本会撑成很长的一行,既难读,也可能超出屏幕。

手动控制

v-model 可以直接控制显隐。

vue
<script setup>
const visible = ref(false)
</script>

<template>
  <SrTooltip v-model="visible" content="手动控制">
    <SrButton>触发器</SrButton>
  </SrTooltip>

  <SrButton @click="visible = !visible">切换提示</SrButton>
</template>

Props

名称类型默认值说明
contentstring提示文本
placement见上文十二种'top'显示方位
trigger'hover' | 'click''hover'触发方式
disabledbooleanfalse是否禁用
showDelaynumber100显示延迟(毫秒)
hideDelaynumber100隐藏延迟(毫秒)
arrowbooleantrue是否显示箭头
maxWidthstring'240px'最大宽度
modelValueboolean手动控制显隐

插槽

名称说明
default触发器元素
content自定义提示内容(可放富文本)

无障碍

  • 触发器自动获得 aria-describedby 指向提示内容, 读屏软件在聚焦时会朗读出来
  • 键盘聚焦也触发显示,不是只有鼠标悬停—— 这是 aria-describedby 能生效的前提
  • 提示容器带 role="tooltip"
  • 提示内容不应包含交互元素(按钮、链接)—— 鼠标移向提示框时它会消失,根本点不到。 需要可交互内容请用 Popover 类组件

自用组件库 · 源码分发 · 不发布 npm