Tooltip 文字提示

常用于展示鼠标 hover 时的提示信息。

基础用法

在这里我们提供 9 种不同方向的展示方式,可以通过以下完整示例来理解,选择你要的效果。

使用 content 属性来决定 hover 时的提示信息。 由 placement 属性决定展示效果: placement属性值为:[方向]-[对齐位置];四个方向:topleftrightbottom;三种对齐位置:start, end,默认为空。 如 placement="left-end",则提示信息出现在目标元素的左侧,且提示信息的底部与目标元素的底部对齐。

Tooltip 文字提示 - 图1

  1. <template>
  2. <div class="tooltip-base-box">
  3. <div class="row center">
  4. <el-tooltip
  5. class="box-item"
  6. effect="dark"
  7. content="Top Left prompts info"
  8. placement="top-start"
  9. >
  10. <el-button>top-start</el-button>
  11. </el-tooltip>
  12. <el-tooltip
  13. class="box-item"
  14. effect="dark"
  15. content="Top Center prompts info"
  16. placement="top"
  17. >
  18. <el-button>top</el-button>
  19. </el-tooltip>
  20. <el-tooltip
  21. class="box-item"
  22. effect="dark"
  23. content="Top Right prompts info"
  24. placement="top-end"
  25. >
  26. <el-button>top-end</el-button>
  27. </el-tooltip>
  28. </div>
  29. <div class="row">
  30. <el-tooltip
  31. class="box-item"
  32. effect="dark"
  33. content="Left Top prompts info"
  34. placement="left-start"
  35. >
  36. <el-button>left-start</el-button>
  37. </el-tooltip>
  38. <el-tooltip
  39. class="box-item"
  40. effect="dark"
  41. content="Right Top prompts info"
  42. placement="right-start"
  43. >
  44. <el-button>right-start</el-button>
  45. </el-tooltip>
  46. </div>
  47. <div class="row">
  48. <el-tooltip
  49. class="box-item"
  50. effect="dark"
  51. content="Left Center prompts info"
  52. placement="left"
  53. >
  54. <el-button class="mt-3 mb-3">left</el-button>
  55. </el-tooltip>
  56. <el-tooltip
  57. class="box-item"
  58. effect="dark"
  59. content="Right Center prompts info"
  60. placement="right"
  61. >
  62. <el-button>right</el-button>
  63. </el-tooltip>
  64. </div>
  65. <div class="row">
  66. <el-tooltip
  67. class="box-item"
  68. effect="dark"
  69. content="Left Bottom prompts info"
  70. placement="left-end"
  71. >
  72. <el-button>left-end</el-button>
  73. </el-tooltip>
  74. <el-tooltip
  75. class="box-item"
  76. effect="dark"
  77. content="Right Bottom prompts info"
  78. placement="right-end"
  79. >
  80. <el-button>right-end</el-button>
  81. </el-tooltip>
  82. </div>
  83. <div class="row center">
  84. <el-tooltip
  85. class="box-item"
  86. effect="dark"
  87. content="Bottom Left prompts info"
  88. placement="bottom-start"
  89. >
  90. <el-button>bottom-start</el-button>
  91. </el-tooltip>
  92. <el-tooltip
  93. class="box-item"
  94. effect="dark"
  95. content="Bottom Center prompts info"
  96. placement="bottom"
  97. >
  98. <el-button>bottom</el-button>
  99. </el-tooltip>
  100. <el-tooltip
  101. class="box-item"
  102. effect="dark"
  103. content="Bottom Right prompts info"
  104. placement="bottom-end"
  105. >
  106. <el-button>bottom-end</el-button>
  107. </el-tooltip>
  108. </div>
  109. </div>
  110. </template>
  111. <style>
  112. .tooltip-base-box {
  113. width: 600px;
  114. }
  115. .tooltip-base-box .row {
  116. display: flex;
  117. align-items: center;
  118. justify-content: space-between;
  119. }
  120. .tooltip-base-box .center {
  121. justify-content: center;
  122. }
  123. .tooltip-base-box .box-item {
  124. width: 110px;
  125. margin-top: 10px;
  126. }
  127. </style>

主题

Tooltip 组件内置了两个主题:darklight

TIP

要使用自定义主题,您必须知道您的工具提示在哪里渲染, 如果您的工具提示被呈现为根元素,您将需要全局设置css规则。

建议您使用自定义主题并同时显示箭头时不使用线性渐变背景颜色。 因为弹出箭头和内容是两个不同的元素, 弹出箭头的样式需要单独设置, 当它到渐变背景颜色时,会看起来很奇怪。

通过设置 effect 来修改主题,默认值为 dark.

Tooltip 文字提示 - 图2

  1. <template>
  2. <el-tooltip content="Top center" placement="top">
  3. <el-button>Dark</el-button>
  4. </el-tooltip>
  5. <el-tooltip content="Bottom center" placement="bottom" effect="light">
  6. <el-button>Light</el-button>
  7. </el-tooltip>
  8. <el-tooltip content="Bottom center" effect="customized">
  9. <el-button>Customized theme</el-button>
  10. </el-tooltip>
  11. </template>
  12. <style>
  13. .el-popper.is-customized {
  14. /* Set padding to ensure the height is 32px */
  15. padding: 6px 12px;
  16. background: linear-gradient(90deg, rgb(159, 229, 151), rgb(204, 229, 129));
  17. }
  18. .el-popper.is-customized .el-popper__arrow::before {
  19. background: linear-gradient(45deg, #b2e68d, #bce689);
  20. right: 0;
  21. }
  22. </style>

更多内容的文字提示

展示多行文本或者是设置文本内容的格式

用具名 slot content,替代tooltip中的content属性。

Tooltip 文字提示 - 图3

  1. <template>
  2. <el-tooltip placement="top">
  3. <template #content> multiple lines<br />second line </template>
  4. <el-button>Top center</el-button>
  5. </el-tooltip>
  6. </template>

高级扩展

除了这些基本设置外,还有一些属性可以让使用者更好的定制自己的效果:

transition 属性可以定制显隐的动画效果,默认为fade-in-linear

如果需要关闭 tooltip 功能,disabled 属性可以满足这个需求, 你只需要将其设置为 true

事实上,Tooltip 是一个基于 ElPopper Tooltip 文字提示 - 图4 的扩展,您可以使用 ElPopper 中允许的任何属性。

Tooltip 文字提示 - 图5

  1. <template>
  2. <el-tooltip
  3. :disabled="disabled"
  4. content="click to close tooltip function"
  5. placement="bottom"
  6. effect="light"
  7. >
  8. <el-button @click="disabled = !disabled"
  9. >click to {{ disabled ? 'active' : 'close' }} tooltip function</el-button
  10. >
  11. </el-tooltip>
  12. </template>
  13. <script lang="ts" setup>
  14. import { ref } from 'vue'
  15. const disabled = ref(false)
  16. </script>
  17. <style>
  18. .slide-fade-enter-active {
  19. transition: all 0.3s ease;
  20. }
  21. .slide-fade-leave-active {
  22. transition: all 0.3s cubic-bezier(1, 0.5, 0.8, 1);
  23. }
  24. .slide-fade-enter,
  25. .expand-fade-leave-active {
  26. margin-left: 20px;
  27. opacity: 0;
  28. }
  29. </style>

TIP

Tooltip 内不支持 router-link 组件,请使用 vm.$router.push 代替。

tooltip 内不支持 disabled form 元素,参考 MDN Tooltip 文字提示 - 图6 , 请在 disabled form 元素外层添加一层包裹元素。

显示 HTML 内容

内容属性可以设置为 HTML 字符串。

WARNING

content 属性虽然支持传入 HTML 片段,但是在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击 Tooltip 文字提示 - 图7 。 因此在 raw-content 打开的情况下,请确保 content 的内容是可信的,永远不要将用户提交的内容赋值给 content 属性。

Tooltip 文字提示 - 图8

  1. <template>
  2. <el-tooltip
  3. content="<span>The content can be <strong>HTML</strong></span>"
  4. raw-content
  5. >
  6. <el-button>hover me</el-button>
  7. </el-tooltip>
  8. </template>

虚拟触发

有时候我们想把 tooltip 的触发元素放在别的地方,而不需要写在一起,这时候就可以使用虚拟触发。

TIP

需要注意的是,虚拟触发的 tooltip 是受控组件,因此你必须自己去控制 tooltip 是否显示,你将无法通过点击空白处来关闭 tooltip。

Tooltip 文字提示 - 图9

  1. <template>
  2. <el-tooltip
  3. v-model:visible="visible"
  4. content="Bottom center"
  5. placement="bottom"
  6. effect="light"
  7. trigger="click"
  8. virtual-triggering
  9. :virtual-ref="triggerRef"
  10. />
  11. <el-button @click="visible = !visible">test</el-button>
  12. </template>
  13. <script setup lang="ts">
  14. import { onMounted, ref } from 'vue'
  15. const visible = ref(false)
  16. const triggerRef = ref({
  17. getBoundingClientRect() {
  18. return position.value
  19. },
  20. })
  21. const position = ref({
  22. top: 0,
  23. left: 0,
  24. bottom: 0,
  25. right: 0,
  26. })
  27. onMounted(() => {
  28. document.addEventListener('mousemove', (e) => {
  29. position.value = DOMRect.fromRect({
  30. width: 0,
  31. height: 0,
  32. x: e.clientX,
  33. y: e.clientY,
  34. })
  35. })
  36. })
  37. </script>

单例模式

Tooltip 可以作为单例,也就是是说你可以同时有多个触发同一个 tooltip 的触发元素,这个功能是在 虚拟触发 的基础上开发的。

TIP

已知问题:当使用单例模式时,tooltip 的触发元素发生改变的时候可能会发生弹跳。

Tooltip 文字提示 - 图10

  1. <template>
  2. <div>
  3. <el-button
  4. v-for="i in 3"
  5. :key="i"
  6. @mouseover="(e) => (buttonRef = e.currentTarget)"
  7. @click="visible = !visible"
  8. >Click to open tooltip</el-button
  9. >
  10. </div>
  11. <el-tooltip
  12. ref="tooltipRef"
  13. v-model:visible="visible"
  14. :popper-options="{
  15. modifiers: [
  16. {
  17. name: 'computeStyles',
  18. options: {
  19. adaptive: false,
  20. enabled: false,
  21. },
  22. },
  23. ],
  24. }"
  25. :virtual-ref="buttonRef"
  26. virtual-triggering
  27. trigger="click"
  28. popper-class="singleton-tooltip"
  29. >
  30. <template #content>
  31. <span> Some content </span>
  32. </template>
  33. </el-tooltip>
  34. </template>
  35. <script setup lang="ts">
  36. import { ref } from 'vue'
  37. const buttonRef = ref()
  38. const tooltipRef = ref()
  39. const visible = ref(false)
  40. </script>
  41. <style>
  42. .singleton-tooltip {
  43. transition: transform 0.3s var(--el-transition-function-fast-bezier);
  44. }
  45. </style>

受控模式

Tooltip 可以通过父组件使用 :visible 来控制它的显示与关闭。

Tooltip 文字提示 - 图11

  1. <template>
  2. <el-tooltip :visible="visible">
  3. <template #content>
  4. <span>Content</span>
  5. </template>
  6. <el-button @mouseenter="visible = true" @mouseleave="visible = false">
  7. Hover me
  8. </el-button>
  9. </el-tooltip>
  10. </template>
  11. <script setup lang="ts">
  12. import { ref } from 'vue'
  13. const visible = ref(false)
  14. </script>

自定义动画

工具提示可以自定义动画,您可以按照自己的愿望设置所需的动画功能。

Tooltip 文字提示 - 图12

  1. <template>
  2. <el-tooltip content="I am an el-tooltip">
  3. <el-button>trigger me</el-button>
  4. </el-tooltip>
  5. </template>
  6. <script lang="ts" setup></script>

属性

属性说明类型可选值默认值
append-to指示 Tooltip 的内容将附加在哪一个网页元素上CSSSelector \HTMLElement
effectTooltip 主题,内置了 dark / light 两种stringstringdark
content显示的内容,也可被 slot#content 覆盖String
raw-contentcontent 中的内容是否作为 HTML 字符串处理booleanfalse
placementTooltip 组件出现的位置stringtop/top-start/top-end/bottom/bottom-start/bottom-end/left/left-start/left-end/right/right-start/right-endbottom
visible / v-model:visibleTooltip 组件可见性booleanfalse
disabledTooltip 组件是否禁用booleanfalse
offset出现位置的偏移量number0
transition动画名称stringel-fade-in-linear
visible-arrow (will deprecate in 2.1.0 )是否显示箭头。 想了解更多信息,请查看 ElPopper Tooltip 文字提示 - 图13 页面booleantrue
popper-optionspopper.js Tooltip 文字提示 - 图14 参数Object请参考 popper.js Tooltip 文字提示 - 图15 文档{ boundariesElement: ‘body’, gpuAcceleration: false }
show-after延迟出现,单位毫秒number0
show-arrowtooltip 的内容是否有箭头booleantrue / falsetrue
hide-after延迟关闭,单位毫秒number200
auto-closetooltip 出现后自动隐藏延时,单位毫秒number0
manual是否手动控制 Tooltip。 如果设置为 truemouseentermouseleave 将不会生效booleanfalse
popper-class为 Tooltip 的 popper 添加自定义类名string
enterable鼠标是否可进入到 tooltip 中Booleantrue
tabindexTooltip 的 tabindex Tooltip 文字提示 - 图16number0
teleported是否使用 teleport。设置成 true则会被追加到 append-to 的位置booleantrue / falsetrue
trigger如何触发 tooltip (来显示)stringhover / click / focus / contextmenuhover
virtual-triggering用来标识虚拟触发是否被启用booleanfalse
virtual-ref表明 tooltip 绑定到哪个 html 元素HTMLElement
trigger-keys当鼠标点击或者聚焦在触发元素上时, 可以定义一组键盘按键并且通过它们来控制 Tooltip 的显示Array[‘Enter’,’Space’]

插槽

插槽名说明
Tooltip 触发 & 引用的元素
content自定义内容

源代码

组件 Tooltip 文字提示 - 图17 文档 Tooltip 文字提示 - 图18

贡献者

Tooltip 文字提示 - 图19 Jeremy

Tooltip 文字提示 - 图20 三咲智子

Tooltip 文字提示 - 图21 云游君

Tooltip 文字提示 - 图22 opengraphica

Tooltip 文字提示 - 图23 weidehai

Tooltip 文字提示 - 图24 msidolphin

Tooltip 文字提示 - 图25 Delyan Haralanov

Tooltip 文字提示 - 图26 Alan Wang

Tooltip 文字提示 - 图27 bqy

Tooltip 文字提示 - 图28 kooriookami

Tooltip 文字提示 - 图29 qiang

Tooltip 文字提示 - 图30 Xc

Tooltip 文字提示 - 图31 小孩可可爱爱

Tooltip 文字提示 - 图32 btea

Tooltip 文字提示 - 图33 Carter Li

Tooltip 文字提示 - 图34 啝裳

Tooltip 文字提示 - 图35 hhparty

Tooltip 文字提示 - 图36 Hades-li

Tooltip 文字提示 - 图37 C.Y.Kun

Tooltip 文字提示 - 图38 SongWuKong

Tooltip 文字提示 - 图39 Leon-kfd

Tooltip 文字提示 - 图40 白雾三语

Tooltip 文字提示 - 图41 LinZhanMing

Tooltip 文字提示 - 图42 류한경

Tooltip 文字提示 - 图43 blackie

Tooltip 文字提示 - 图44 iamkun