Tooltip
Usage
도구 설명의 기본 슬롯에 있는 Button 또는 다른 구성 요소를 사용합니다.
<template>
<UTooltip text="Open on GitHub">
<UButton label="Open" color="neutral" variant="subtle" />
</UTooltip>
</template>TooltipProvider 구성 요소를 사용하는 App 구성 요소로 앱을 감싸야 합니다.Text 파일
text 소품을 사용하여 툴팁의 내용을 설정합니다.
<template>
<UTooltip text="Open on GitHub">
<UButton label="Open" color="neutral" variant="subtle" />
</UTooltip>
</template>Kbds
kbds Prop을 사용하여 도구 설명에서 Kbd 구성 요소를 렌더링합니다.
<template>
<UTooltip text="Open on GitHub" :kbds="['meta', 'G']">
<UButton label="Open" color="neutral" variant="subtle" />
</UTooltip>
</template>⌘로 표시되는 meta와 같은 특수 키를 사용할 수 있으며 다른 플랫폼에서는 Ctrl로 표시됩니다.지연
delay-duration 소품을 사용하여 도구 설명이 나타나기 전의 지연 시간을 변경합니다. 예를 들어, 0로 설정하면 즉시 나타나도록 할 수 있습니다.
<template>
<UTooltip :delay-duration="0" text="Open on GitHub">
<UButton label="Open" color="neutral" variant="subtle" />
</UTooltip>
</template>App 구성 요소의 tooltip.delayDuration 옵션을 통해 전역적으로 구성할 수 있습니다.Content 파일
content prop을 사용하여 도구 설명 내용이 어떻게 렌더링되는지 제어합니다(예: align 또는 side).
App 구성 요소의 tooltip.content 옵션을 통해 전역적으로 구성할 수 있습니다.<template>
<UTooltip
:content="{
align: 'center',
side: 'bottom',
sideOffset: 8
}"
text="Open on GitHub"
>
<UButton label="Open" color="neutral" variant="subtle" />
</UTooltip>
</template>Arrow 화살표
arrow 소품을 사용하여 툴팁에 화살표를 표시합니다.
<template>
<UTooltip arrow text="Open on GitHub">
<UButton label="Open" color="neutral" variant="subtle" />
</UTooltip>
</template>비활성 화
disabled prop을 사용하여 도구 설명을 비활성화합니다.
<template>
<UTooltip disabled text="Open on GitHub">
<UButton label="Open" color="neutral" variant="subtle" />
</UTooltip>
</template>예제
Control 열기 상태
default-open prop 또는 v-model:open 지시문을 사용하여 오픈 상태를 제어할 수 있습니다.
<script setup lang="ts">
const open = ref(false)
defineShortcuts({
o: () => open.value = !open.value
})
</script>
<template>
<UTooltip v-model:open="open" text="Open on GitHub">
<UButton label="Open" color="neutral" variant="subtle" />
</UTooltip>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const open = ref(false)
defineShortcuts({
o: () => open.value = !open.value
})
</script>
<template>
<UTooltip v-model:open="open" text="Open on GitHub">
<UButton label="Open" color="neutral" variant="subtle" />
</UTooltip>
</template>
defineShortcuts를 사용하여 kbd{value="O"}를 눌러 툴팁을 토글할 수 있습니다.다음 커서
reference 소품을 사용하여 요소 위에 마우스를 놓을 때 도구 설명이 커서를 따라 이동하도록 할 수 있습니다.
<script setup lang="ts">
const open = ref(false)
const anchor = ref({ x: 0, y: 0 })
const reference = computed(() => ({
getBoundingClientRect: () =>
({
width: 0,
height: 0,
left: anchor.value.x,
right: anchor.value.x,
top: anchor.value.y,
bottom: anchor.value.y,
...anchor.value
} as DOMRect)
}))
</script>
<template>
<UTooltip
:open="open"
:reference="reference"
:content="{ side: 'top', sideOffset: 16, updatePositionStrategy: 'always' }"
>
<div
class="flex items-center justify-center rounded-md border border-dashed border-accented text-sm aspect-video w-72"
@pointerenter="open = true"
@pointerleave="open = false"
@pointermove="(ev: PointerEvent) => {
anchor.x = ev.clientX
anchor.y = ev.clientY
}"
>
Hover me
</div>
<template #content>
{{ anchor.x.toFixed(0) }} - {{ anchor.y.toFixed(0) }}
</template>
</UTooltip>
</template>
<script setup lang="ts">
import { ref, computed } from 'vue'
const open = ref(false)
const anchor = ref({ x: 0, y: 0 })
const reference = computed(() => ({
getBoundingClientRect: () =>
({
width: 0,
height: 0,
left: anchor.value.x,
right: anchor.value.x,
top: anchor.value.y,
bottom: anchor.value.y,
...anchor.value
} as DOMRect)
}))
</script>
<template>
<UTooltip
:open="open"
:reference="reference"
:content="{ side: 'top', sideOffset: 16, updatePositionStrategy: 'always' }"
>
<div
class="flex items-center justify-center rounded-md border border-dashed border-accented text-sm aspect-video w-72"
@pointerenter="open = true"
@pointerleave="open = false"
@pointermove="(ev: PointerEvent) => {
anchor.x = ev.clientX
anchor.y = ev.clientY
}"
>
Hover me
</div>
<template #content>
{{ anchor.x.toFixed(0) }} - {{ anchor.y.toFixed(0) }}
</template>
</UTooltip>
</template>
API
Props (### Props)
| Prop | Default | Type |
|---|---|---|
text | stringThe text content of the tooltip. | |
kbds | (string | undefined)[] | KbdProps[]The keyboard keys to display in the tooltip. | |
content | { side: 'bottom', sideOffset: 8, collisionPadding: 8 } | TooltipContentProps & Partial<EmitsToProps<TooltipContentImplEmits>>The content of the tooltip. Inherits from the |
arrow | false | boolean | TooltipArrowProps Display an arrow alongside the tooltip.
|
portal | true | string | false | true | HTMLElementRender the tooltip in a portal. |
reference | Element | VirtualElementThe reference (or anchor) element that is being referred to for positioning. If not provided will use the current component as anchor. | |
defaultOpen | boolean The open state of the tooltip when it is initially rendered. Use when you do not need to control its open state. | |
open | boolean The controlled open state of the tooltip. | |
delayDuration | 700 | numberOverride the duration given to the |
disableHoverableContent | boolean Prevents Tooltip.Content from remaining open when hovering. Disabling this has accessibility consequences. Inherits from Tooltip.Provider. | |
disableClosingTrigger | false | boolean When |
disabled | false | boolean When |
ignoreNonKeyboardFocus | false | boolean Prevent the tooltip from opening if the focus did not come from
the keyboard by matching against the |
ui | { content?: SlotClass; arrow?: SlotClass; text?: SlotClass; kbds?: SlotClass; kbdsSize?: SlotClass; } |
Slots 슬롯
| Slot | Type |
|---|---|
default | { open: boolean; } |
content | { ui: object; } |
Emits
| Event | Type |
|---|---|
update:open | [value: boolean] |
Theme (## 테마)
export default defineAppConfig({
ui: {
tooltip: {
slots: {
content: 'flex items-center gap-1 bg-default text-highlighted shadow-sm rounded-sm ring ring-default h-6 px-2.5 py-1 text-xs select-none data-[state=delayed-open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)] origin-(--reka-tooltip-content-transform-origin) pointer-events-auto',
arrow: 'fill-bg stroke-default',
text: 'truncate',
kbds: "hidden lg:inline-flex items-center shrink-0 gap-0.5 not-first-of-type:before:content-['·'] not-first-of-type:before:me-0.5",
kbdsSize: 'sm'
}
}
}
})import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
tooltip: {
slots: {
content: 'flex items-center gap-1 bg-default text-highlighted shadow-sm rounded-sm ring ring-default h-6 px-2.5 py-1 text-xs select-none data-[state=delayed-open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)] origin-(--reka-tooltip-content-transform-origin) pointer-events-auto',
arrow: 'fill-bg stroke-default',
text: 'truncate',
kbds: "hidden lg:inline-flex items-center shrink-0 gap-0.5 not-first-of-type:before:content-['·'] not-first-of-type:before:me-0.5",
kbdsSize: 'sm'
}
}
}
})
]
})