Skip to content

Tooltip

The Tooltip is a component for contextual help text in the Casoon UI Library.

Usage

html
<button class="tooltip-trigger" data-tooltip="Standard Tooltip">
  Hover me
</button>

<div class="tooltip">
  <div class="tooltip__content">
    Tooltip content
  </div>
</div>

Variants

Positions

html
<button class="tooltip-trigger" data-tooltip-position="top">
  Tooltip top
</button>

<button class="tooltip-trigger" data-tooltip-position="right">
  Tooltip right
</button>

<button class="tooltip-trigger" data-tooltip-position="bottom">
  Tooltip bottom
</button>

<button class="tooltip-trigger" data-tooltip-position="left">
  Tooltip left
</button>

Types

html
<button class="tooltip-trigger tooltip--info">
  Info Tooltip
</button>

<button class="tooltip-trigger tooltip--success">
  Success Tooltip
</button>

<button class="tooltip-trigger tooltip--warning">
  Warning Tooltip
</button>

<button class="tooltip-trigger tooltip--error">
  Error Tooltip
</button>

With Animation

html
<button class="tooltip-trigger tooltip--fade">
  Fade Tooltip
</button>

<button class="tooltip-trigger tooltip--slide">
  Slide Tooltip
</button>

CSS Variables

css
:root {
  --tooltip-padding: 0.5rem 1rem;
  --tooltip-border-radius: 0.25rem;
  --tooltip-font-size: 0.875rem;
  --tooltip-max-width: 200px;
  --tooltip-z-index: 1000;
  --tooltip-transition: all 0.2s ease;
}

Best Practices

Accessibility

  • Use semantic HTML elements
  • Add meaningful text
  • Ensure sufficient contrast
  • Implement keyboard navigation

Responsive Design

  • Use relative units
  • Test on different screen sizes
  • Adapt positions for mobile devices

Performance

  • Minimize CSS
  • Optimize animations
  • Avoid too many simultaneous tooltips

Integration

Astro

astro
---
import '@casoon/ui-lib/components/tooltip.css';
interface Props {
  text: string;
  position?: 'top' | 'right' | 'bottom' | 'left';
  type?: 'info' | 'success' | 'warning' | 'error';
  animation?: 'fade' | 'slide';
}
const { text, position = 'top', type, animation } = Astro.props;
---

<button
  class:list={[
    'tooltip-trigger',
    type && `tooltip--${type}`,
    animation && `tooltip--${animation}`
  ]}
  data-tooltip={text}
  data-tooltip-position={position}
>
  <slot />
</button>

<style>
  .tooltip-trigger {
    position: relative;
  }
  
  .tooltip-trigger:hover::after {
    content: attr(data-tooltip);
    position: absolute;
    padding: var(--tooltip-padding);
    border-radius: var(--tooltip-border-radius);
    font-size: var(--tooltip-font-size);
    max-width: var(--tooltip-max-width);
    z-index: var(--tooltip-z-index);
    transition: var(--tooltip-transition);
  }
  
  .tooltip-trigger[data-tooltip-position="top"]:hover::after {
    bottom: 100%;
    left: 50%;
    transform: translateX(-50%);
  }
  
  .tooltip-trigger[data-tooltip-position="right"]:hover::after {
    left: 100%;
    top: 50%;
    transform: translateY(-50%);
  }
  
  .tooltip-trigger[data-tooltip-position="bottom"]:hover::after {
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
  }
  
  .tooltip-trigger[data-tooltip-position="left"]:hover::after {
    right: 100%;
    top: 50%;
    transform: translateY(-50%);
  }
</style>

Usage in an Astro component:

astro
---
import Tooltip from '../components/Tooltip.astro';
---

<Tooltip text="This is a tooltip" position="top" type="info">
  Hover me
</Tooltip>

<Tooltip text="Success!" position="right" type="success" animation="fade">
  Success Tooltip
</Tooltip>

Tooltip with HTML content

astro
---
import '@casoon/ui-lib/components/tooltip.css';
interface Props {
  position?: 'top' | 'right' | 'bottom' | 'left';
  type?: 'info' | 'success' | 'warning' | 'error';
}
const { position = 'top', type } = Astro.props;
---

<button
  class:list={[
    'tooltip-trigger',
    type && `tooltip--${type}`
  ]}
  data-tooltip-position={position}
>
  <slot name="trigger" />
  <div class="tooltip-content" slot="content">
    <slot name="content" />
  </div>
</button>

<style>
  .tooltip-content {
    display: none;
    position: absolute;
    padding: var(--tooltip-padding);
    border-radius: var(--tooltip-border-radius);
    font-size: var(--tooltip-font-size);
    max-width: var(--tooltip-max-width);
    z-index: var(--tooltip-z-index);
  }
  
  .tooltip-trigger:hover .tooltip-content {
    display: block;
  }
</style>

Usage with HTML content:

astro
---
import Tooltip from '../components/Tooltip.astro';
---

<Tooltip position="top" type="info">
  <span slot="trigger">Hover me</span>
  <div slot="content">
    <h3>Title</h3>
    <p>Description</p>
    <a href="#">Learn more</a>
  </div>
</Tooltip>