Skip to main content

Tooltip

Die Tooltip-Komponente zeigt zusätzliche Informationen an, wenn Benutzer mit einem Element interagieren. Sie ist ideal für kurze Hilfetexte, Erklärungen oder Hinweise.

Import

import { Tooltip } from '@smolitux/core';

Verwendung

Einfacher Tooltip

<Tooltip content="Dies ist ein Tooltip">
<Button>Hover über mich</Button>
</Tooltip>

Verschiedene Positionen

<Tooltip content="Tooltip oben" position="top">
<Button>Oben</Button>
</Tooltip>

<Tooltip content="Tooltip rechts" position="right">
<Button>Rechts</Button>
</Tooltip>

<Tooltip content="Tooltip unten" position="bottom">
<Button>Unten</Button>
</Tooltip>

<Tooltip content="Tooltip links" position="left">
<Button>Links</Button>
</Tooltip>

Tooltip mit Verzögerung

<Tooltip content="Erscheint nach 500ms" delay={500}>
<Button>Verzögerter Tooltip</Button>
</Tooltip>

Tooltip ohne Pfeil

<Tooltip content="Tooltip ohne Pfeil" arrow={false}>
<Button>Ohne Pfeil</Button>
</Tooltip>

Tooltip mit benutzerdefinierter Breite

<Tooltip content="Dieser Tooltip hat eine maximale Breite von 150px" maxWidth={150}>
<Button>Schmaler Tooltip</Button>
</Tooltip>

Tooltip mit HTML-Inhalt

<Tooltip
content={
<div>
<strong>Formatierter Tooltip</strong>
<p>Mit mehreren Zeilen Text</p>
<ul>
<li>Punkt 1</li>
<li>Punkt 2</li>
</ul>
</div>
}
>
<Button>Komplexer Tooltip</Button>
</Tooltip>

Deaktivierter Tooltip

<Tooltip content="Dieser Tooltip wird nicht angezeigt" disabled>
<Button>Deaktivierter Tooltip</Button>
</Tooltip>

Tooltip für Icon

import { InfoIcon } from '@heroicons/react/outline';

<div className="flex items-center">
<span className="mr-2">Hilfe</span>
<Tooltip content="Hier finden Sie Hilfe zu diesem Thema">
<InfoIcon className="w-5 h-5 text-gray-500 cursor-help" />
</Tooltip>
</div>

Props

PropTypStandardBeschreibung
contentReactNode-Der Inhalt des Tooltips
childrenReactElement-Das Element, das mit dem Tooltip versehen werden soll
position'top' | 'right' | 'bottom' | 'left''top'Die Position des Tooltips relativ zum Element
delaynumber200Verzögerung vor dem Anzeigen in Millisekunden
hideDelaynumber100Verzögerung vor dem Ausblenden in Millisekunden
maxWidthnumber | string250Maximale Breite des Tooltips
classNamestring''Zusätzliche CSS-Klassen für den Tooltip
disabledbooleanfalseDeaktiviert den Tooltip
arrowbooleantrueZeigt einen Pfeil an, der auf das Element zeigt

Barrierefreiheit

Die Tooltip-Komponente ist für Barrierefreiheit optimiert:

  • Verwendet aria-describedby zur Verknüpfung des Tooltips mit dem Element
  • Unterstützt Tastaturnavigation (Tooltip wird bei Fokus angezeigt)
  • Tooltips sind für Screenreader zugänglich
  • Ausreichender Kontrast zwischen Text und Hintergrund

Beispiele

Tooltip für Formularfelder

<div className="space-y-4">
<div>
<label htmlFor="username" className="block text-sm font-medium text-gray-700">
Benutzername
</label>
<div className="mt-1 relative">
<input
type="text"
id="username"
className="block w-full border-gray-300 rounded-md shadow-sm"
/>
<div className="absolute inset-y-0 right-0 flex items-center pr-3">
<Tooltip content="Der Benutzername muss mindestens 3 Zeichen lang sein">
<InfoIcon className="w-5 h-5 text-gray-400" />
</Tooltip>
</div>
</div>
</div>

<div>
<label htmlFor="password" className="block text-sm font-medium text-gray-700">
Passwort
</label>
<div className="mt-1 relative">
<input
type="password"
id="password"
className="block w-full border-gray-300 rounded-md shadow-sm"
/>
<div className="absolute inset-y-0 right-0 flex items-center pr-3">
<Tooltip
content={
<div>
<p className="font-medium">Passwort-Anforderungen:</p>
<ul className="list-disc pl-4 mt-1">
<li>Mindestens 8 Zeichen</li>
<li>Mindestens ein Großbuchstabe</li>
<li>Mindestens eine Zahl</li>
<li>Mindestens ein Sonderzeichen</li>
</ul>
</div>
}
position="right"
maxWidth={300}
>
<InfoIcon className="w-5 h-5 text-gray-400" />
</Tooltip>
</div>
</div>
</div>
</div>

Tooltip für abgeschnittenen Text

function TruncatedTextWithTooltip({ text, maxLength = 50 }) {
const isTruncated = text.length > maxLength;
const displayText = isTruncated ? `${text.slice(0, maxLength)}...` : text;

return isTruncated ? (
<Tooltip content={text}>
<span>{displayText}</span>
</Tooltip>
) : (
<span>{displayText}</span>
);
}

// Verwendung
<TruncatedTextWithTooltip
text="Dies ist ein sehr langer Text, der abgeschnitten wird, wenn er zu lang ist. Beim Hover wird der vollständige Text in einem Tooltip angezeigt."
maxLength={60}
/>

Tooltip für Tabellenzellen

function DataTable() {
const data = [
{ id: 1, name: 'Produkt A', sales: 1234, growth: '+12.5%' },
{ id: 2, name: 'Produkt B', sales: 5678, growth: '-3.2%' },
{ id: 3, name: 'Produkt C', sales: 9012, growth: '+7.8%' },
];

return (
<table className="min-w-full divide-y divide-gray-200">
<thead>
<tr>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
Name
</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
<div className="flex items-center">
<span>Verkäufe</span>
<Tooltip content="Gesamtverkäufe im letzten Quartal">
<InfoIcon className="ml-1 w-4 h-4 text-gray-400" />
</Tooltip>
</div>
</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
<div className="flex items-center">
<span>Wachstum</span>
<Tooltip content="Prozentuales Wachstum im Vergleich zum Vorquartal">
<InfoIcon className="ml-1 w-4 h-4 text-gray-400" />
</Tooltip>
</div>
</th>
</tr>
</thead>
<tbody className="bg-white divide-y divide-gray-200">
{data.map((item) => (
<tr key={item.id}>
<td className="px-6 py-4 whitespace-nowrap">{item.name}</td>
<td className="px-6 py-4 whitespace-nowrap">{item.sales}</td>
<td className="px-6 py-4 whitespace-nowrap">
<Tooltip content={`Wachstum im Vergleich zum Vorquartal: ${item.growth}`}>
<span className={item.growth.startsWith('+') ? 'text-green-600' : 'text-red-600'}>
{item.growth}
</span>
</Tooltip>
</td>
</tr>
))}
</tbody>
</table>
);
}

Tooltip mit benutzerdefinierten Styles

<Tooltip
content="Benutzerdefinierter Tooltip"
className="bg-purple-700 text-white border border-purple-800"
>
<Button>Benutzerdefinierter Style</Button>
</Tooltip>