mitmario.dev

cursor & caret-color

Die cursor-Eigenschaft ändert den Mauszeiger, wenn Nutzer über ein Element hovern: damit machst du Buttons klickbar, Links erkennbar oder Drag-Handles greifbar. Mit caret-color kannst du außerdem die Farbe des blinkenden Text-Cursors in Eingabefeldern anpassen. Beide Eigenschaften verbessern die Benutzerfreundlichkeit durch visuelles Feedback.

Steckbrief cursor
Syntax
cursor: auto | default | pointer | text | move | grab | ... | url(<bild>) <x> <y>, <fallback>
Initialwert
auto
Vererbt
Ja
Animierbar
Nein
Kategorie
Interaktion
Werte
20
Beispiele
5
Browser
5 von 5
E-Mail
0 von 5
Stand
15.02.2026

Grundlagen

Der cursor zeigt Nutzern, was sie mit einem Element tun können: Ein pointer signalisiert Klickbarkeit, text zeigt Textauswahl an, grab deutet auf Drag-Funktionalität hin. Da cursor vererbt wird, reicht es oft, ihn auf einem Container zu setzen.

Du kannst auch eigene Cursor mit url() laden, zum Beispiel für Spiele oder spezielle Interfaces. Wichtig: Gib immer einen Fallback an (z.B. pointer), falls das Bild nicht lädt. Die x y-Koordinaten (optional) definieren den Hotspot des Cursors.

Die caret-color-Eigenschaft steuert die Farbe des blinkenden Cursors in Textfeldern (<input>, <textarea>, contenteditable). Das ist nützlich, um den Cursor auf dunklen Hintergründen sichtbar zu machen oder ihn an dein Design anzupassen.

Syntax & Werte

20 Werte

cursor

Wert Beschreibung Beispiel
auto Browser entscheidet (meist default, über Text text, über Links pointer)
default Standard-Pfeil (normaler Mauszeiger)
pointer Hand mit Zeigefinger (für klickbare Elemente wie Links und Buttons)
text I-Beam (für Textauswahl und Eingabefelder)
move Vier Pfeile (für verschiebbare Elemente)
grab Offene Hand (Element kann gegriffen werden)
grabbing Geschlossene Faust (Element wird gerade gezogen)
crosshair Fadenkreuz (für präzise Auswahl, z.B. Bildbearbeitung)
not-allowed Verbots-Symbol (für deaktivierte oder nicht erlaubte Aktionen)
wait Sanduhr/Ladekreis (Browser ist beschäftigt)
help Fragezeichen-Cursor (Hilfe verfügbar)
zoom-in Lupe mit Plus (Element kann vergrößert werden)
zoom-out Lupe mit Minus (Element kann verkleinert werden)
col-resize Horizontale Resize-Pfeile (Spaltenbreite ändern)
row-resize Vertikale Resize-Pfeile (Zeilenhöhe ändern)
none Kein Cursor (unsichtbar, nur für Spezialfälle)
url() Eigener Cursor: url('cursor.png') 16 16, pointer (mit Hotspot und Fallback)

caret-color

Wert Beschreibung Beispiel
auto Browser wählt eine sichtbare Farbe (meist schwarz oder currentColor)
<color> Beliebige CSS-Farbe (#1a56db, rgb(), hsl(), etc.)
transparent Unsichtbarer Cursor (nur für Spezialfälle)

Beispiele

5 Beispiele
Verschiedene Cursor-Typen (hover drüber!)
.cursor-demo {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 12px;
}

.cursor-item {
  background: #f3f4f6;
  padding: 16px;
  text-align: center;
  border-radius: 8px;
}

.c-pointer { cursor: pointer; }
.c-text { cursor: text; }
.c-move { cursor: move; }
.c-grab { cursor: grab; }
.c-not-allowed { cursor: not-allowed; }
/* ... und viele mehr */

Barrierefreiheit

Cursor nur auf klickbare Elemente: Setze cursor: pointer nur auf Elemente, die tatsächlich klickbar sind (Links, Buttons, interaktive Elemente). Nutzer erwarten dann, dass etwas passiert.

not-allowed braucht echtes disabled: Wenn du cursor: not-allowed verwendest, sollte das Element auch wirklich deaktiviert sein (z.B. disabled-Attribut, pointer-events: none). Sonst können Nutzer trotzdem klicken, was verwirrend ist.

cursor: none nur in Spezialfällen: Ein unsichtbarer Cursor sollte nur für Spiele, Präsentationen oder Canvas-Anwendungen verwendet werden, wo du einen eigenen Cursor renderst. In normalen Interfaces verwirrt es Nutzer.

caret-color muss sichtbar bleiben: Der Text-Cursor muss immer gut sichtbar sein, besonders in Pflichtfeldern. Vermeide caret-color: transparent oder zu schwache Kontraste. Teste auf verschiedenen Hintergründen.

Häufige Fehler

6 Punkte
  • cursor: pointer auf nicht-klickbare Elemente: Nutzer erwarten dann eine Interaktion, die nicht passiert. Führt zu Frustration und schlechter UX.

  • cursor: not-allowed ohne echtes disabled: Wenn das Element trotzdem klickbar ist, widersprechen sich visuelles und funktionales Feedback. Kombiniere immer mit pointer-events: none oder disabled.

  • cursor: none vergessen zurückzusetzen: Wenn du den Cursor ausblendest (z.B. in einem Canvas-Game), vergiss nicht, ihn wieder einzublenden, wenn der Nutzer den Bereich verlässt.

  • Custom Cursor ohne Fallback: cursor: url('my-cursor.png') ohne Fallback führt zum Standard-Cursor, wenn das Bild nicht lädt. Immer einen generischen Cursor dahinter setzen: url(...), pointer.

  • caret-color: transparent auf Pflichtfeldern: Macht die Texteingabe unmöglich, weil Nutzer nicht sehen, wo sie tippen. Nur in Spezialfällen verwenden (z.B. Custom-Cursor-Implementierungen).

  • Zu viele verschiedene Cursor: Wenn jeder Bereich einen anderen Cursor hat, wird’s unübersichtlich. Halte dich an die gängigen Konventionen (pointer für klickbar, text für Text, grab für Drag).

Browser-Kompatibilität

5 von 5

cursor und caret-color werden von allen modernen Browsern vollständig unterstützt. Custom Cursors mit url() funktionieren überall, mit Einschränkungen bei Dateigröße und Format (PNG, SVG, CUR).

  • Chrome

    Komplett

  • Firefox

    Komplett

  • Safari

    Komplett

  • Edge

    Komplett

  • Opera

    Komplett

Email-Kompatibilität

0 von 5

Weder cursor noch caret-color funktionieren in E-Mails, da E-Mail-Clients keine Hover-Effekte unterstützen.

  • Apple Mail

    Keine

    Kein Hover-Support

  • Gmail

    Keine

    Kein Hover-Support

  • Outlook

    Keine

    Kein Hover-Support

  • Yahoo Mail

    Keine

    Kein Hover-Support

  • Thunderbird

    Keine

    Kein Hover-Support

Newsletter

einmal die Woche, kostenlos

Neue Artikel und Videos, was sich auf der Lernplattform tut, und ab und zu ein Sonderpreis zum Kursstart. Kurz genug, dass du es auch liest.

Zuletzt verschickt · KW 40

Einmal alles neu, und die Lernplattform ist da

Danach kommt eine Mail mit Bestätigungslink, erst dann bist du eingetragen. Abmelden geht unten in jeder Ausgabe. Mehr dazu in der Datenschutzerklärung.