SVG/Tutorials/pointer-events

Aus SELFHTML-Wiki
< SVG‎ | Tutorials
Wechseln zu: Navigation, Suche

Dieser Artikel behandelt die CSS-Eigenschaft pointer-events. Sie ist nicht zu verwechseln mit der geichnamigen Pointer Event API.


Die Eigenschaft pointer-events ermöglicht es, Elemente gezielt von Interaktionen durch Maus und teilweise auch Tastatur auszuschließen. Es war ursprünglich Teil der SVG-Spezifikation, um genauer zu kontrollieren, wo in einer Form ein Benutzer interagieren kann.[1]

  • CSS 3.0
  • Chrome
  • Firefox
  • IE 11
  • Opera
  • Safari

Details: caniuse.com

pointer events in CSS[Bearbeiten]

Erlaubt sind dabei folgende Werte

  • auto, das Element verhält sich „ganz normal“ so, als ob pointer-events nicht gesetzt wäre, Voreinstellung
  • none, das Element reagiert nicht auf Interaktionen
  • inherit, übernimmt den Wert des Elternelements
sich überlagernde Textblöcke ansehen …
    p.nicht_klickbar {
        pointer-events: none;
    }
    p.beispiel {
        border: thin solid #d5d5d5;
        ...
    }
    p.beispiel+p {
        position: relative;
        width: auto;
        padding: 3em;
        margin: 0 auto -7em;
        top: -8em;
        background-color: rgba(150,150,200,0.3);
        color: #c32e04;
    }

Die jeweils zweiten Absätze sind so verschoben, dass sie ihre Vorgänger überdecken. Im Normalfall ist deshalb der Text des darunterliegenden Elements nicht mit der Maus auswählbar. Wird für den überdeckenden Absatz festgelegt, dass dieser nicht auf Interaktionen mit der Maus reagieren soll, so hat dies zur Folge, dass nun der überdeckte Absatz mit der Maus bedienbar ist.


Beachten Sie: Enthält das Element, welches nicht mehr auf Interaktionen mit der Maus reagieren soll, keine fokussierbaren Elemente, ist sein Inhalt auch nicht mit der Tastatur auswählbar.
Beispiel ansehen …
a:hover, a:focus, a:active {
  background-color: #f1f3f4;
  color: #c32e04;
}
a[href="http://example.com"] {
  pointer-events: none;
}
<ul>
  <li><a href="http://selfhtml.org">selfhtml.org</a></li>
  <li><a href="http://example.com">example.com</a></li>
</ul>
Der Link zu example.com ist nicht mehr mit der Maus oder per Fingertap erreichbar.

pointer-events bestimmt, ob ein Element mit der Maus ausgewählt werden kann.

Anwendung[Bearbeiten]

Beispiel ansehen …
<fieldset>
    <input id="tn-vielleicht" type="radio" name="teilnahme" value="0" checked="checked">
    <label for="tn-vielleicht">vielleicht</label>
    <input id="tn-nein" type="radio" name="teilnahme" value="-1">
    <label for="tn-nein">nein</label>
    <input id="tn-ja" type="radio" name="teilnahme" value="1">
    <label for="tn-ja">ja</label>
</fieldset>
label{
    position: absolute;
    display: block;
    left: 0;
    top: 0;
    width: 5em;
    padding: .5em;
    border: 2px solid #c32e04;
    text-align: center;
}
:checked + label {
    z-index: 10;
    pointer-events: none;
}
:checked + label + input + label {
    pointer-events: none;
}
input {
    display: none;
}
Das Beispiel zeigt einen Button, der 3 Status haben kann. Technisch handelt es sich um eine Gruppe von drei Radiobuttons. Mithilfe absoluter Positionierung werden die drei label-Elemente übereinander positioniert. Dasjenige Label, was zum ausgewählten Radiobutton gehört, wird durch die Angabe eines z-index sichtbar, für pointer-events werden sowohl dieses als auch das im Quelltext folgende label-Element unempfänglich gemacht.

pointer-events und SVG[Bearbeiten]

pointer-events kennt noch weitere Werte, die allerdings nur für SVG gültig sind.

  • visiblePainted,
  • visibleFill,
  • visibleStroke,
  • visible,
  • painted,
  • fill,
  • stroke,
  • all,

Siehe auch[Bearbeiten]

Quellen

  1. bitsofco.de: There’s no reason to use pointer-events for HTML elements von Ire Aderinokun, 2018