Skip to content

Tooltip

Source

Example

html
<div class="x-tooltip bottom" aria-label="I am tooltip">
    <button class="x-button">Tooltip</button>
</div>

More examples can be found in the Winduum docs.

Example CSS

css
@import "winduum/src/components/tooltip/props/default.css" layer(theme);
@import "winduum/src/components/tooltip/default.css" layer(utilities);

/* Example customization */
@layer theme {
  :root, :host {
    --x-tooltip-background-color: var(--color-accent);
    --x-tooltip-color: var(--color-accent);
  }
}

Winduum CSS Code

winduum/src/components/tooltip/props/default.css

css
:root, :host {
  --x-tooltip-background-color: var(--color-main);
  --x-tooltip-color: var(--color-main-foreground);
  --x-tooltip-border-radius: var(--radius-md);
  --x-tooltip-font-size: var(--text-sm);
  --x-tooltip-padding-block: calc(var(--spacing) * 1);
  --x-tooltip-padding-inline: calc(var(--spacing) * 2);
  --x-tooltip-margin-block: calc(var(--spacing) * 1);
  --x-tooltip-margin-inline: calc(var(--spacing) * 1);
  --x-tooltip-scale-x: 0.75;
  --x-tooltip-scale-y: 0.75;
}

winduum/src/components/tooltip/default.css

css
.x-tooltip {
  position: relative;
  display: inline-block;

  &::before {
    --tw-content: attr(aria-label);

    background-color: var(--x-tooltip-background-color);
    color: var(--x-tooltip-color);
    border-radius: var(--x-tooltip-border-radius);
    font-size: var(--x-tooltip-font-size);
    padding: var(--x-tooltip-padding-block) var(--x-tooltip-padding-inline);
    z-index: var(--x-tooltip-z-index, var(--z-index-20));
    transition-property: var(--default-transition-property);
    transition-timing-function: var(--ease-in-out);
    transition-duration: var(--default-transition-duration);
    content: var(--tw-content);
    opacity: var(--tw-opacity);
    visibility: var(--tw-visibility);
    transform:
      translate(var(--tw-translate-x, 0), var(--tw-translate-y, 0))
      scaleX(var(--tw-scale-x, 1)) scaleY(var(--tw-scale-y, 1));
    will-change: transform;
    inline-size: max-content;
    position: absolute;
    pointer-events: none;
  }

  &:where(.top), &:where(.bottom) {
    &::before {
      --tw-translate-x: -50%;

      margin-block: var(--x-tooltip-margin-block);
      inset-inline-start: 50%;
    }
  }

  &:where(.left), &:where(.right) {
    &::before {
      --tw-translate-y: -50%;

      margin-inline: var(--x-tooltip-margin-inline);
      inset-block-start: 50%;
    }
  }

  &:where(.bottom) {
    &::before {
      inset-block-start: 100%;
      transform-origin: top;
    }
  }

  &:where(.top) {
    &::before {
      inset-block-end: 100%;
      transform-origin: bottom;
    }
  }

  &:where(.left) {
    &::before {
      inset-inline-end: 100%;
      transform-origin: right;
    }
  }

  &:where(.right) {
    &::before {
      inset-inline-start: 100%;
      transform-origin: left;
    }
  }

  &:not(:hover, :focus)::before {
    --tw-scale-x: var(--x-tooltip-scale-x);
    --tw-scale-y: var(--x-tooltip-scale-y);
    --tw-opacity: 0;
    --tw-visibility: hidden;
  }
}

Released under the MIT License.