W3docs

Proprietà CSS pointer-events

La proprietà pointer-events specifica se un elemento può rispondere agli eventi del puntatore. Valori ed esempi pratici.

La proprietà pointer-events controlla se un elemento può essere il bersaglio di eventi del puntatore — clic del mouse, hover, tocco e input della penna. Quando è impostata su none, l'elemento diventa "trasparente" al puntatore: clic, hover e altre interazioni lo attraversano e raggiungono ciò che si trova sottostante.

Questa pagina illustra i valori della proprietà, dove funziona effettivamente in HTML rispetto a SVG, i casi d'uso più comuni e le insidie più frequenti.

Informazione

Originariamente definita per SVG, pointer-events è ora una proprietà CSS standard.

Molti valori si applicano solo agli elementi SVG. Per gli elementi HTML ordinari, solo auto e none sono ampiamente supportati — i valori specifici per SVG (fill, stroke, visiblePainted, ecc.) non hanno effetto sull'HTML.

Quando utilizzarla

  • Overlay click-through. Un overlay decorativo o di caricamento copre la pagina, ma si vuole che i clic raggiungano il contenuto sottostante. Impostare pointer-events: none sull'overlay.
  • Disabilitare un controllo visivamente. Combinare pointer-events: none con una riduzione dell'opacity per far sembrare un pulsante o un link disabilitato sia visivamente che funzionalmente (i link non hanno un attributo disabled nativo, quindi questo è un pattern comune).
  • Far passare gli eventi attraverso forme SVG specifiche. Una forma disegnata sopra le altre può essere resa non interattiva in modo che le forme sottostanti rimangano cliccabili.
  • Riabilitare un figlio all'interno di un genitore disabilitato. Impostare none su un wrapper e auto su un figlio specifico per rendere interattivo solo quel figlio.

Note importanti

Impostare pointer-events: none su un elemento gli impedisce di essere il bersaglio di eventi del puntatore, ma non blocca i listener degli eventi su quell'elemento dall'attivarsi. Se un elemento figlio ha pointer-events riabilitato (auto), il figlio può comunque essere preso di mira. Gli eventi che prendono di mira il figlio si propagano poi verso l'alto attraverso il genitore e attivano qualsiasi listener ad esso collegato.

Attenzione

pointer-events: none blocca solo l'input del puntatore. Non rimuove l'elemento dall'ordine di tabulazione, quindi gli utenti da tastiera possono ancora raggiungere un link o un pulsante "disabilitato" tramite il tasto Tab. Per una vera accessibilità, è necessario anche rimuovere l'elemento dall'ordine di tabulazione (tabindex="-1") o utilizzare il vero attributo disabled sui controlli del form.

Valore inizialeauto
Si applica aTutti gli elementi.
EreditatoNo.
AnimabileNo.
VersioneScalable Vector Graphics (SVG) 1.1 (Second Edition).
Sintassi DOMobject.style.pointerEvents = "auto";

Sintassi

Sintassi CSS di pointer-events

pointer-events: auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | initial | inherit;

Esempio della proprietà pointer-events:

Esempio di codice CSS pointer-events

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div.example {
        pointer-events: none;
      }
      div.example2 {
        pointer-events: auto;
      }
      div.example:hover,
      div.example2:hover {
        outline: 2px solid #1c87c9;
      }
    </style>
  </head>
  <body>
    <h2>The Pointer-events Property</h2>
    <h3>Pointer-events: none</h3>
    <div class="example">
      Click here: <a href="https://www.w3docs.com/learn-javascript.html">JavaScript Tutorial</a>
    </div>
    <h3>Pointer-events: auto</h3>
    <div class="example2">
      Click here: <a href="https://www.w3docs.com/learn-css.html">CSS Tutorial</a>
    </div>
  </body>
</html>

Risultato

Valore none di CSS pointer-events

Nell'esempio sopra, passare il mouse su ciascun box. Il primo <div> (pointer-events: none) non risponde — il suo link non è cliccabile e non appare nessun contorno al hover. Il secondo <div> (pointer-events: auto) si comporta normalmente.

Poiché gli anchor non hanno un attributo disabled, pointer-events: none è il metodo abituale per rendere un link non cliccabile. Abbinarlo a opacity affinché lo stato sia visibile:

.btn-link.is-disabled {
  pointer-events: none;
  opacity: 0.5;
  cursor: default;
}

Ricordare la nota sull'accessibilità sopra: il link è comunque raggiungibile tramite tastiera a meno che non si imposti anche tabindex="-1".

Esempio con il tag <svg>

In SVG, pointer-events può instradare i clic attraverso forme sovrapposte. Nell'esempio seguente il path con classe .c usa pointer-events: none, quindi i clic lo attraversano e raggiungono le forme sottostanti, mentre .d usa pointer-events: all per catturare eventi anche dove il suo riempimento è trasparente:

Esempio del valore none di CSS pointer-events

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .a {
        fill: #ccc;
      }
      .b {
        fill: #8ebf42;
      }
      .c {
        fill: #1c87c9;
        pointer-events: none;
      }
      .d {
        stroke: #666;
        fill: none;
        pointer-events: all;
      }
      .box:hover {
        stroke: #000;
        stroke-width: 5;
      }
    </style>
  </head>
  <body>
    <h2>Pointer-events property example</h2>
    <svg width="300" height="300">
      <g transform="translate(20, 20)">
        <path class="a box" d="M 0 0 L 100 0 L 100 100 L 0 100 z" />
        <path class="b box" d="M 50 50 l 100 0 l 0 100 l -100 0 z" />
        <path class="c box" d="M 100 100 l 100 0 l 0 100 l -100 0 z" />
        <path class="d box" d="M 150 150 l 100 0 l 0 100 l -100 0 z" />
      </g>
    </svg>
  </body>
</html>

Valori

ValoreDescrizione
noneL'elemento non reagisce mai agli eventi del puntatore.
autoL'elemento accetta eventi del puntatore come clic, hover, ecc. Questo è il valore predefinito della proprietà.
initialImposta la proprietà al suo valore predefinito.
inheritEredita la proprietà dall'elemento genitore.

Valori solo per SVG

ValoreDescrizione
visiblePaintedL'elemento può essere il bersaglio di un evento del puntatore solo quando la proprietà visibility è impostata su visible, il cursore del mouse si trova sull'interno o sul perimetro dell'elemento, e la proprietà fill o stroke è impostata su un valore diverso da none.
visibleFillL'elemento può essere il bersaglio di un evento del puntatore solo quando la proprietà visibility è impostata su visible e il cursore del mouse si trova sull'interno dell'elemento.
visibleStrokeL'elemento può essere il bersaglio di un evento del puntatore solo quando la proprietà visibility è impostata su visible e il cursore del mouse si trova sul perimetro dell'elemento.
visibleL'elemento può essere il bersaglio di un evento del puntatore solo quando la proprietà visibility è impostata su visible e il cursore del mouse si trova sull'interno o sul perimetro dell'elemento.
paintedL'elemento può essere il bersaglio di un evento del puntatore solo quando il cursore del mouse si trova sull'interno o sul perimetro dell'elemento e la proprietà fill o stroke è impostata su un valore diverso da none.
fillL'elemento può essere il bersaglio di un evento del puntatore solo quando il puntatore si trova sull'interno dell'elemento.
strokeL'elemento può essere il bersaglio di un evento del puntatore solo quando il puntatore si trova sul perimetro dell'elemento.
allL'elemento può essere il bersaglio di un evento del puntatore solo quando il puntatore si trova sull'interno o sul perimetro dell'elemento.

Proprietà correlate

  • cursor — modifica il cursore del mouse mostrato sopra un elemento (usare cursor: not-allowed per enfatizzare un aspetto disabilitato).
  • visibilityvisibility: hidden rimuove anch'essa un elemento dall'interazione con il puntatore, ma nasconde anche l'elemento.
  • opacity — comunemente abbinata a pointer-events: none per rappresentare uno stato disabilitato.
  • user-select — controlla se il testo all'interno di un elemento può essere selezionato.

Esercizio

Pratica
Cosa fa la proprietà 'pointer-events' in CSS?
Cosa fa la proprietà 'pointer-events' in CSS?
Was this page helpful?