每日前端宝藏库 | Tippy.js ✨
🎯 “不是所有提示都叫 Tippy。” —— 现代 Tooltip 的终极形态 🌟
🎯 一句话介绍
Tippy.js
是一个 现代、轻量、可高度定制 的 JavaScript 提示框(Tooltip)库 🚀,基于 Popper.js 构建,支持气泡提示、弹出框、自定义内容、动画、主题、可访问性(a11y),让你的 UI 交互瞬间专业感拉满!🎯💥
🎨 它不是简单的
title
替代品,而是交互语义的优雅表达。
🤔 为什么你需要它?
传统方案 ❌ | Tippy.js ✅ |
---|---|
原生 title 属性:样式丑、延迟长、不支持 HTML | ✅ 支持富文本、图片、按钮,样式现代 |
自己写 Tooltip:定位难、兼容性差 😩 | ✅ 基于 Popper.js,智能定位,自动避让 |
缺少动画,生硬出现/消失 🤖 | ✅ 内置多种平滑动画(fade, shift, scale) |
忽视可访问性 ♿ | ✅ 自动处理 aria-* 、键盘导航、焦点管理 |
移动端体验差 📱 | ✅ 支持触摸、长按触发 |
无法嵌套或复杂交互 🧩 | ✅ 支持 Popovers(点击弹出)、多媒体内容 |
🚀 快速上手:3 步起飞!
Step 1️⃣:安装它!
npm install tippy.js
# 或 yarn
yarn add tippy.js
💡 也支持 CDN 快速引入:
<script src="https://unpkg.com/@popperjs/core@2"></script> <script src="https://unpkg.com/tippy.js@6"></script>
Step 2️⃣:HTML 结构准备 🏗️
<!-- 基础提示 -->
<button data-tippy-content="这是一个提示!">Hover 我</button><!-- 支持 HTML 内容 -->
<button id="html-tip">带图标的提示</button>
Step 3️⃣:初始化并配置!✨
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css'; // 核心样式
import 'tippy.js/dist/border-radius.css'; // 可选主题// 1. 自动初始化 data-tippy-* 属性
tippy('[data-tippy-content]');// 2. 手动创建带 HTML 的提示
tippy('#html-tip', {content: `<div style="display:flex;align-items:center;gap:8px;"><svg>...</svg><span>你好,我是 <strong>富文本</strong> 提示!</span></div>`,allowHTML: true,placement: 'right', // 提示位置:top, bottom, left, rightanimation: 'scale', // 动画效果delay: [100, 50], // [显示延迟, 隐藏延迟]theme: 'light-border', // 主题interactive: true, // 是否可交互(如按钮点击)appendTo: document.body // 避免 overflow: hidden 截断
});
🎉 效果:鼠标悬停,优雅提示弹出,自动避让窗口边缘!🎯
💻 在线测试沙盒 🧪
👉 动手试试这个“会说话的 UI”吧!✨
<button id="tip1" style="margin:20px;">Hover 我</button>
<button id="tip2" style="margin:20px;">点击我(Popover)</button><script src="https://unpkg.com/@popperjs/core@2"></script>
<script src="https://unpkg.com/tippy.js@6"></script>
<script>// 基础提示tippy('#tip1', {content: '🎉 Hello Tippy!',animation: 'fade'});// 点击弹出(Popover)tippy('#tip2', {content: '<p>这是一个可交互的弹出框。</p><button onclick="alert(\'点击了!\')">按钮</button>',allowHTML: true,trigger: 'click',interactive: true,placement: 'bottom',arrow: true,theme: 'light'});
</script>
🔗 在线测试推荐:
- StackBlitz - Tippy.js 沙盒
🎨 核心特性一览 🌟
特性 | 说明 |
---|---|
placement: 'top' | 智能定位,自动调整避免溢出 |
animation: 'shift-toward' | 多种动画:fade, scale, shift, perspective |
interactive: true | 支持内部按钮、表单交互 🔗 |
allowHTML: true | 支持 HTML 内容,不限于纯文本 |
theme: 'light' | 内置主题:light, dark, material, translucent 等 |
trigger: 'click' | 触发方式:hover, focus, click, manual |
delay: [200, 100] | 控制显示/隐藏延迟 |
♿ 可访问性 | 自动 ARIA 支持,键盘导航友好 ✅ |
🧩 高级玩法 🎮
1️⃣ 创建“帮助中心”式 Popover
tippy('#help-btn', {content: document.getElementById('help-content').innerHTML,allowHTML: true,trigger: 'click',interactive: true,placement: 'bottom-end',theme: 'material',maxWidth: 300
});
✅ 实现点击按钮弹出帮助文档,支持滚动、链接、图片!📚
2️⃣ 动态更新内容
const tip = tippy('#dynamic');// 模拟数据更新
setInterval(() => {const time = new Date().toLocaleTimeString();tip[0].setContent(`当前时间:${time}`);
}, 1000);
3️⃣ 自定义主题(CSS)
.tippy-box[data-theme~='neon'] {background: linear-gradient(45deg, #ff00cc, #3333ff);box-shadow: 0 0 10px #fff, 0 0 20px #ff00cc;color: white;font-weight: bold;
}
tippy('#neon', { theme: 'neon' });
📊 适用场景 🎯
- ℹ️ 图标旁的说明提示 ❓
- 📊 数据图表的详细解释 📈
- 🛠️ 设置项的辅助说明 ⚙️
- 📱 移动端长按触发帮助 📲
- 🎮 游戏/应用内的新手引导 🧭
🏁 总结:Tippy.js 是你的“UI 讲解员” 🎤💖
评分 | 内容 |
---|---|
🚀 易用性 | ⭐⭐⭐⭐⭐ |
🎨 视觉表现力 | ⭐⭐⭐⭐⭐ |
🧩 可扩展性 | ⭐⭐⭐⭐☆ |
♿ 可访问性 | ⭐⭐⭐⭐⭐ |
💡 推荐指数 | 🔥🔥🔥🔥🔥 |
✅ 一句话推荐:
如果你想让 UI 更“懂”用户,Tippy.js
就是那个在恰当时间、恰当位置,说恰当话的智能助手。
小组件,大体验。💬✨