COOKBOOK / LIVE EXAMPLE
Tooltip example with VSN.js
Real markup. Real VSN. Try it below.
← All examples · Open full screen ↗
View example source
<section id="tooltip-example" class="example-card cookbook-example">
<header class="cookbook-heading">
<div>
<p class="cookbook-eyebrow">Behavior cookbook</p>
<h1>Tooltip</h1>
<p class="cookbook-lede">
The same local state responds to pointer, focus, and click events.
</p>
</div>
<span class="cookbook-badge">hover + focus</span>
</header>
<div class="cookbook-tooltip-grid">
<article class="cookbook-tooltip">
<button
class="cookbook-tooltip-trigger"
type="button"
aria-describedby="tip-save"
>
<span class="tooltip-symbol">?</span>
Save changes
</button>
<span id="tip-save" class="cookbook-tooltip-content" role="tooltip" vsn-show="open">
Saves the current draft and keeps you on this page.
</span>
</article>
<article class="cookbook-tooltip">
<button
class="cookbook-tooltip-trigger"
type="button"
aria-describedby="tip-shortcut"
>
<span class="tooltip-symbol">⌘</span>
Keyboard shortcut
</button>
<span id="tip-shortcut" class="cookbook-tooltip-content" role="tooltip" vsn-show="open">
Press <kbd>⌘</kbd> <kbd>S</kbd> to save from a real application.
</span>
</article>
</div>
<p class="cookbook-note">
Tooltips should describe a control. Interactive content belongs in a popover or dialog.
</p>
</section>
<script type="text/vsn">
#tooltip-example {
.cookbook-tooltip {
open: false;
.cookbook-tooltip-trigger {
on mouseenter() {
open = true;
}
on mouseleave() {
open = false;
}
on focusin() {
open = true;
}
on focusout() {
open = false;
}
on click() {
open = !open;
}
}
}
}
</script>