SVG Pointer Events: Klickbereiche passend gestalten
Steuere SVG-Klickbereiche mit Füllungen, Konturen, Löchern und separaten Trefferflächen. Teste die Ereignisweiterleitung und nutze native Buttons oder Links für die Tastaturaktivierung.
Auf dieser Seite
SVG pointer-events steuert, welche Teile einer Grafik Ziel eines Zeigerereignisses werden können. Eine gefüllte Form, eine dünne Kontur und ein leeres Loch können unterschiedlich reagieren, selbst wenn sie zur selben Illustration gehören. Passe den Trefferbereich an die erwartete Aktion an und teste die leeren Bereiche genauso sorgfältig wie die farbigen.
Dieser Leitfaden behandelt Grafiken in einer Weboberfläche: ein auswählbares Diagramm, ein anklickbares Emblem oder ein Icon innerhalb einer Schaltfläche. Wenn das SVG bereits nutzbare Pfade enthält, korrigiere seinen Interaktionscode direkt. Vektorisierung wird erst relevant, wenn die bearbeitbare Geometrie noch in einem PNG oder JPG steckt.
Beginne mit dem Element, das den Klick empfängt
Für SVG verhält sich der Standardwert auto wie visiblePainted. Eine sichtbare Form kann über ihrer Füllung zum Ziel werden, wenn fill nicht none ist, oder über ihrer Kontur, wenn stroke nicht none ist. Die SVG-Interaktivitätsspezifikation definiert diese Trefferprüfungsregeln.
Das erklärt ein scheinbar defektes Icon: Sein Listener funktioniert möglicherweise auf dem Umriss, aber nicht in der leeren Mitte. Der Browser prüft die Form, statt anzunehmen, dass jeder Punkt innerhalb ihres umgebenden Rechtecks dasselbe bedeutet.
Das sind die nützlichen Optionen für diesen Workflow:
| Wert | Beabsichtigte Verwendung |
|---|---|
auto | Sichtbare gezeichnete Füllung und Kontur bestimmen das Ziel |
stroke | Konturbereich als Ziel verwenden, auch bei einer offenen Linie |
fill | Forminneres als Ziel verwenden, auch wenn die Füllung none ist |
all | Füll- und Konturbereiche ohne erforderliche Farbe oder Sichtbarkeit als Ziel verwenden |
none | Dieses Element als Zeigerziel überspringen |
all bedeutet nicht „jeder Punkt im SVG-Viewport“. Es bezieht sich weiterhin auf die Geometrie des Elements. Wenn ein bestimmtes Rechteck um eine filigrane Zeichnung reagieren soll, erstelle dieses Rechteck bewusst.
Unterscheide außerdem transparente Farbe von keiner Farbe. fill="transparent" ist weiterhin ein Füllwert; fill="none" entfernt die Füllung. Deckkraft allein ist kein zuverlässiger Weg, eine Überlagerung Klicks ignorieren zu lassen.
Teste Füllung, Loch und offene Kontur
Wir bauten eine kleine Inline-SVG-Testumgebung mit eigenen, von Hand erstellten Formen. Sie enthält einen blauen zusammengesetzten Pfad mit rechteckigem Loch, eine orangefarbene offene Kontur und eine Kopie dieser Kontur über einer separaten transparenten Trefferfläche. Das sind Lehrbeispiele, keine PerfectVector-Konvertierungsergebnisse.

Im Browsertest protokollierte ein Klick auf das blaue Band ring. Ein Klick in seine leere Mitte protokollierte ring-stage, das umschließende SVG. Die orangefarbene Linie protokollierte trail, während der Raum unter ihrem Scheitel stroke-stage lieferte. In der dritten Ansicht protokollierten beide Stellen hit.
Der blaue Pfad verwendet zwei rechteckige Unterpfade und fill-rule="evenodd":
<svg id="ring-stage" viewBox="0 0 240 180">
<path id="ring" fill="#2874c8" fill-rule="evenodd"
d="M30 20H210V160H30Z M85 60H155V120H85Z" />
</svg>Das innere Rechteck liegt nach der Gerade-Ungerade-Füllregel außerhalb des gefüllten Bereichs. Es ist ein echtes Loch. Ein darübergelegtes weißes Rechteck wäre eine weitere gezeichnete Form mit eigenem Trefferverhalten. Wenn die Geometrie selbst falsch ist, nutze den Leitfaden zur Reparatur von SVG-Löchern, bevor du Ereignisregeln änderst.
Hier ist die offene Kontur aus der zweiten Ansicht:
<svg id="stroke-stage" viewBox="0 0 240 180">
<path id="trail" d="M30 140L120 35L210 140"
fill="none" stroke="#db704c" stroke-width="12"
pointer-events="stroke" />
</svg>Platziere für einen schnellen Test einen der Ausschnitte in einer HTML-Datei und diesen Logger danach. Gib dem SVG eine sichtbare Größe, etwa width="360" height="270".
<output id="result" aria-live="polite">Click the artwork.</output>
<script>
const stage = document.querySelector('svg');
const result = document.querySelector('#result');
stage.addEventListener('click', (event) => {
result.textContent = `Target: ${event.target.id}`;
});
</script>Klicke auf den gezeichneten Bereich, ein leeres Inneres und eine Ecke außerhalb der Zeichnung. Das Protokollieren von event.target unterscheidet einen Pfadtreffer von einem Klick, der lediglich den SVG-Container erreichte. Diese Beispiele testen die Zielauswahl; sie sind keine fertigen interaktiven Bedienelemente.
Ergänze eine Trefferfläche ohne breitere Grafik
Angenommen, der gesamte Bereich um die orangefarbene Linie soll diese auswählen. Eine breitere sichtbare Kontur würde die Illustration verändern. Eine separate Trefferfläche gibt dem Interaktionsbereich seine eigene Geometrie:
<svg id="hit-stage" viewBox="0 0 240 180">
<rect id="hit" x="20" y="20" width="200" height="140"
fill="transparent" pointer-events="all" />
<path d="M30 140L120 35L210 140"
fill="none" stroke="#db704c" stroke-width="12"
pointer-events="none" />
</svg>Das Rechteck liegt hinter der Grafik. Der orangefarbene Pfad ignoriert Zeigertreffer, deshalb kann das Rechteck Klicks durch ihn hindurch empfangen. Seine Koordinaten definieren das gewünschte Ziel ausdrücklich; die sichtbaren Pfaddaten bleiben identisch zur zweiten Ansicht.
Das ist nützlich für einen Diagrammbereich oder eine dünne Linie, die schwer anzuvisieren ist. Verhindere Überlappungen mit unabhängigen Bedienelementen und entscheide, was am Zusammentreffen zweier Bereiche geschehen soll. Eine größere unsichtbare Form kann die Klicks eines Nachbarn genauso leicht abfangen wie eine sichtbare.
Bei einem einfachen Icon, das eine Aktion ausführt, bietet eine native HTML-Schaltfläche oft die nötige Trefferfläche, ohne überhaupt ein SVG-Rechteck hinzuzufügen.
Überlasse die Tastaturaktivierung dem Bedienelement
Zeigerziele liefern weder Beschriftung noch Tastaturaktivierung oder Schaltflächensemantik. Platziere ein Icon für eine einzelne Aktion innerhalb einer benannten HTML-Schaltfläche und halte die Grafik dekorativ:
<button id="select-trail" type="button">
<svg aria-hidden="true" viewBox="0 0 24 24"
width="24" height="24" style="pointer-events: none">
<path d="M3 20L12 4L21 20" fill="none"
stroke="currentColor" stroke-width="3" />
</svg>
Select trail
</button>
<output id="selection" aria-live="polite"></output>
<script>
const button = document.querySelector('#select-trail');
const selection = document.querySelector('#selection');
button.addEventListener('click', () => {
selection.textContent = 'Trail selected';
});
</script>Das native button-Element liefert das Bedienverhalten; der sichtbare Text liefert seinen Namen. Behalte eine sichtbare Fokusanzeige. Verwende einen echten Link, wenn die Aktion zu einer anderen Seite führt.
In unserer Testumgebung fokussierte Tab die Schaltfläche; anschließend aktivierten Enter und Leertaste sie jeweils. Teste diese Tasten auch in deiner tatsächlichen Oberfläche. Ein Diagramm mit mehreren unabhängigen Aktionen benötigt ein passendes Tastaturinteraktionsdesign für diese Aktionen; eine umgebende Schaltfläche kann nicht alle repräsentieren.
pointer-events: none ist außerdem kein deaktivierter Zustand. Es entfernt ein ansonsten fokussierbares Bedienelement nicht aus der Tastaturnavigation. MDN dokumentiert sowohl Tastaturfokus als auch Ereignisweitergabe: Untergeordnete Elemente können wieder als Ziel aktiviert werden, und ihre Ereignisse können weiterhin den Listener eines übergeordneten Elements durchlaufen. Verwende das native Attribut disabled, wenn eine Schaltfläche deaktiviert sein muss.
Wenn die Ausgangsgrafik ein PNG ist
Wenn die einzige Quelle ein flaches PNG oder JPG ist und deine Oberfläche unabhängig bearbeitbare Formen benötigt, kann PerfectVectors Bild-zu-Vektor-Workflow einen SVG-Kandidaten vorbereiten. Vergleiche ihn mit dem Original, prüfe wichtige Löcher und Bereiche und entscheide, welche Teile separate Interaktionsziele verdienen.
Nachzeichnen liefert Geometrie. Deine Anwendung benötigt weiterhin aussagekräftige IDs, Aktionshandler, Namen, Fokusverhalten und bewusst definierte Trefferbereiche. Ein nachgezeichneter visueller Umriss kann wesentlich detailreicher sein als der Bereich, den Nutzer anklicken sollen. Bei einem kleinen Oberflächenicon sind manuelle Neuzeichnung oder ein vorhandenes Vektororiginal möglicherweise leichter zu pflegen. Der Leitfaden zur PNG-Icon-Vorbereitung erklärt, was du prüfen solltest, bevor du rekonstruierte Grafiken in ein UI-Kit übernimmst.
Wenn das Icon innerhalb eines Bedienelements rein dekorativ ist, kann ein CSS-Maskenicon zu seinem Farbverhalten passen; das umgebende Bedienelement bleibt für die Aktion zuständig. Der umfassendere Vektorisierungsleitfaden behandelt, wann das Rekonstruieren von Pfaden überhaupt nützlich ist.
Prüfe den vorgesehenen Bereich vor der Auslieferung
Teste die tatsächliche Anzeigegröße, nicht nur eine große Editorvorschau:
- Klicke auf einen gefüllten Bereich, eine Kontur, jedes Loch und leere Ecken.
- Prüfe das Ereignisziel, wenn die falsche Aktion ausgelöst wird.
- Suche nach transparenten Rechtecken oder Überlagerungen, die den Zeiger abfangen.
- Bestätige, dass benachbarte Ziele nicht unerwartet überlappen.
- Verwende gegebenenfalls Tab, Enter und Leertaste mit sichtbarem Fokus.
- Teste Touch-Interaktion auf den Geräten, die deine Oberfläche unterstützt.
Die Testumgebung prüft diese konkreten Formen in einem Browser. Sie belegt nicht das Verhalten jedes Browsers für Masken, Beschneidung, Filter oder komplexe importierte Grafiken. Füge diese Fälle zu deinem eigenen Test hinzu, wenn dein Design sie verwendet.
Wenn bearbeitbare Geometrie fehlt, probiere dein Quellbild in PerfectVector aus und prüfe dann Konturen und Löcher. Sobald die Grafik stimmt, definiere und teste den Interaktionsbereich separat.
FAQ
Warum reagiert mein SVG nur, wenn ich auf seinen Umriss klicke? Beim standardmäßigen SVG-Zeigerverhalten kann eine ungefüllte Form möglicherweise nur über ihrer gezeichneten Kontur getroffen werden. Prüfe Füllwert und gewünschte Aktion. Verwende eine bewusste Trefferfläche oder ein umgebendes natives Bedienelement, wenn Leerraum dieselbe Aktion auslösen soll.
Macht pointer-events="all" das gesamte SVG anklickbar?
Es verwendet die Füll- und Konturbereiche des Elements unabhängig von deren Farb- oder Sichtbarkeitswerten als Ziel. Es macht nicht automatisch den gesamten SVG-Viewport zur Trefferfläche. Ergänze eine ausdrückliche Form oder nutze ein umgebendes Bedienelement, wenn du diesen Bereich benötigst.
Kann ein transparentes Rechteck Klicks empfangen? Ja. Transparenz bedeutet nicht, dass das Rechteck keine Geometrie oder keine Füllung hat. Ein transparentes Rechteck mit passendem pointer-events-Wert kann als bewusst angelegte Trefferfläche dienen, aber auch versehentlich Klicks abfangen.
Erzeugt das Vektorisieren eines Bilds barrierefreie Schaltflächen? Nein. Vektorisierung kann bearbeitbare Geometrie aus Rastergrafiken erzeugen. Namen, Tastaturverhalten, Aktionshandler, Fokus und Interaktionsbereiche müssen in der Oberfläche implementiert und getestet werden.
Quellen
- W3C — SVG 2 Scripting and Interactivity — Definiert SVG-Zeigerziele und die Geometrie hinter pointer-events-Werten.
- W3C — SVG 2 Painting — Definiert, wie Füllregeln Inneres und Löcher eines Pfads bestimmen.
- MDN — pointer-events — Erklärt Zielauswahl, Weitergabe, Vererbung und Einschränkungen beim Tastaturfokus.
- MDN — button-Element — Dokumentiert natives Schaltflächenverhalten, Benennung und deaktivierten Zustand.
Mehr aus dem Blog

SVG-ClipPath-Einheiten: Eine Form an ihr Ziel anpassen
Wähle SVG-clipPath-Einheiten, normalisiere eine Silhouette und erhalte ihre Proportionen. Teste breite und hohe Ziele mit erhaltenen Aussparungen und Quellgeometrie.

SVG-Alpha-Schwellenwert: Transparenz hart begrenzen
Mit feFuncA begrenzt du SVG-Alpha hart. Vergleiche discrete und table anhand bekannter PNG-Pixel, erhalte Löcher und prüfe, warum deckendes Weiß bleibt.