Tooltip 文字提示
轻量浮层提示 —— 4 种 placement、自动避让视口边缘、hover/focus 双触发。
基础用法
包裹任意触发元素。鼠标悬停或键盘聚焦时显示,鼠标移出或失焦时隐藏。Tooltip 通过 Teleport / Portal 渲染到 <body>,不受父容器 overflow 影响。
背景
<script setup lang="ts">
import { CfButton, CfTooltip } from '@chufix-design/vue';
</script>
<template>
<CfTooltip content="鼠标悬停或键盘聚焦都会显示">
<CfButton variant="tertiary">悬停我</CfButton>
</CfTooltip>
</template> <script setup>
import { CfButton, CfTooltip } from '@chufix-design/vue';
</script>
<template>
<CfTooltip content="鼠标悬停或键盘聚焦都会显示">
<CfButton variant="tertiary">悬停我</CfButton>
</CfTooltip>
</template> import { CfButton, CfTooltip } from '@chufix-design/react';
export default function Demo() {
return (
<CfTooltip content="鼠标悬停或键盘聚焦都会显示">
<CfButton variant="tertiary">悬停我</CfButton>
</CfTooltip>
);
} import { CfButton, CfTooltip } from '@chufix-design/react';
export default function Demo() {
return (
<CfTooltip content="鼠标悬停或键盘聚焦都会显示">
<CfButton variant="tertiary">悬停我</CfButton>
</CfTooltip>
);
} 4 种方向
placement 控制首选方向。当首选方向放不下(贴近视口边缘)时,会自动翻到对侧。
背景
<script setup lang="ts">
import { CfButton, CfTooltip } from '@chufix-design/vue';
</script>
<template>
<!-- 3×3 grid: each direction has its own quadrant so auto-flip doesn't fire. -->
<div class="tt-grid">
<span></span>
<CfTooltip content="顶部" placement="top">
<CfButton variant="tertiary">Top</CfButton>
</CfTooltip>
<span></span>
<CfTooltip content="左侧" placement="left">
<CfButton variant="tertiary">Left</CfButton>
</CfTooltip>
<span></span>
<CfTooltip content="右侧" placement="right">
<CfButton variant="tertiary">Right</CfButton>
</CfTooltip>
<span></span>
<CfTooltip content="底部" placement="bottom">
<CfButton variant="tertiary">Bottom</CfButton>
</CfTooltip>
<span></span>
</div>
</template>
<style scoped>
.tt-grid {
display: grid;
grid-template-columns: repeat(3, auto);
justify-content: center;
gap: 56px 80px;
padding: 56px 0;
}
</style> <script setup>
import { CfButton, CfTooltip } from '@chufix-design/vue';
</script>
<template>
<!-- 3×3 grid: each direction has its own quadrant so auto-flip doesn't fire. -->
<div class="tt-grid">
<span></span>
<CfTooltip content="顶部" placement="top">
<CfButton variant="tertiary">Top</CfButton>
</CfTooltip>
<span></span>
<CfTooltip content="左侧" placement="left">
<CfButton variant="tertiary">Left</CfButton>
</CfTooltip>
<span></span>
<CfTooltip content="右侧" placement="right">
<CfButton variant="tertiary">Right</CfButton>
</CfTooltip>
<span></span>
<CfTooltip content="底部" placement="bottom">
<CfButton variant="tertiary">Bottom</CfButton>
</CfTooltip>
<span></span>
</div>
</template>
<style scoped>
.tt-grid {
display: grid;
grid-template-columns: repeat(3, auto);
justify-content: center;
gap: 56px 80px;
padding: 56px 0;
}
</style> <CfTooltip content="顶部" placement="top"><CfButton>Top</CfButton></CfTooltip>
<CfTooltip content="底部" placement="bottom"><CfButton>Bottom</CfButton></CfTooltip>
<CfTooltip content="左侧" placement="left"><CfButton>Left</CfButton></CfTooltip>
<CfTooltip content="右侧" placement="right"><CfButton>Right</CfButton></CfTooltip> <CfTooltip content="顶部" placement="top"><CfButton>Top</CfButton></CfTooltip>
<CfTooltip content="底部" placement="bottom"><CfButton>Bottom</CfButton></CfTooltip>
<CfTooltip content="左侧" placement="left"><CfButton>Left</CfButton></CfTooltip>
<CfTooltip content="右侧" placement="right"><CfButton>Right</CfButton></CfTooltip> 延迟与长文本
delay 控制显示前的等待时间(毫秒)。maxWidth 限制最大宽度,超出换行。
背景
<script setup lang="ts">
import { CfButton, CfTooltip } from '@chufix-design/vue';
</script>
<template>
<div class="demo-row" style="gap: 1rem;">
<CfTooltip content="0 延迟显示" :delay="0">
<CfButton variant="tertiary">无延迟</CfButton>
</CfTooltip>
<CfTooltip content="500ms 延迟" :delay="500">
<CfButton variant="tertiary">500ms</CfButton>
</CfTooltip>
<CfTooltip
content="内容比较长会自动换行,限制最大宽度避免一行甩到屏幕外去;超出视口边缘也会自动翻转方向。"
:max-width="220"
>
<CfButton variant="tertiary">长文本</CfButton>
</CfTooltip>
</div>
</template> <script setup>
import { CfButton, CfTooltip } from '@chufix-design/vue';
</script>
<template>
<div class="demo-row" style="gap: 1rem;">
<CfTooltip content="0 延迟显示" :delay="0">
<CfButton variant="tertiary">无延迟</CfButton>
</CfTooltip>
<CfTooltip content="500ms 延迟" :delay="500">
<CfButton variant="tertiary">500ms</CfButton>
</CfTooltip>
<CfTooltip
content="内容比较长会自动换行,限制最大宽度避免一行甩到屏幕外去;超出视口边缘也会自动翻转方向。"
:max-width="220"
>
<CfButton variant="tertiary">长文本</CfButton>
</CfTooltip>
</div>
</template> <CfTooltip content="0 延迟" delay={0}>
<CfButton>无延迟</CfButton>
</CfTooltip>
<CfTooltip content="500ms" delay={500}>
<CfButton>500ms</CfButton>
</CfTooltip>
<CfTooltip content="内容比较长,会自动换行..." maxWidth={220}>
<CfButton>长文本</CfButton>
</CfTooltip> <CfTooltip content="0 延迟" delay={0}>
<CfButton>无延迟</CfButton>
</CfTooltip>
<CfTooltip content="500ms" delay={500}>
<CfButton>500ms</CfButton>
</CfTooltip>
<CfTooltip content="内容比较长,会自动换行..." maxWidth={220}>
<CfButton>长文本</CfButton>
</CfTooltip> API
| Prop | 类型 | 默认值 | 说明 |
|---|---|---|---|
content | string(Vue)/ ReactNode(React) | — | 浮层内容;Vue 还可用 #content 插槽 |
placement | 'top' | 'bottom' | 'left' | 'right' | 'top' | 首选方向,溢出时自动翻转到对侧 |
delay | number | 100 | 显示前延迟(毫秒) |
hideDelay | number | 80 | 隐藏前延迟,避免抖动 |
disabled | boolean | false | 完全不显示 |
offset | number | 8 | 触发器与浮层之间的间距(像素) |
maxWidth | number | string | — | 限制最大宽度,超出换行 |
反馈与讨论
Tooltip 文字提示 的讨论