W3docs

La propriété CSS pointer-events

Utilisez la propriété pointer-events qui définit si un élément peut réagir aux événements tactiles. Voir les valeurs et des exemples.

La propriété pointer-events contrôle si un élément peut être la cible d'événements de pointeur — clics de souris, survol, toucher et entrée au stylet. Lorsqu'elle est définie sur none, l'élément devient « transparent » au pointeur : les clics, survols et autres interactions le traversent pour atteindre ce qui se trouve en dessous.

Cette page explique les valeurs de la propriété, où elle fonctionne réellement en HTML par rapport à SVG, les cas d'utilisation courants et les pièges à éviter.

Info

Initialement défini pour SVG, pointer-events est désormais une propriété CSS standard.

De nombreuses valeurs s'appliquent uniquement aux éléments SVG. Pour les éléments HTML ordinaires, seules auto et none sont largement prises en charge — les valeurs spécifiques à SVG (fill, stroke, visiblePainted, etc.) n'ont aucun effet sur HTML.

Quand l'utiliser

  • Superpositions cliquables. Une superposition décorative ou de chargement couvre la page, mais vous souhaitez que les clics atteignent le contenu en dessous. Définissez pointer-events: none sur la superposition.
  • Désactiver un contrôle visuellement. Combinez pointer-events: none avec une opacity réduite pour qu'un bouton ou un lien ait l'apparence et le comportement d'un élément désactivé (les liens n'ont pas d'attribut natif disabled, c'est donc un schéma courant).
  • Laisser les événements traverser des formes SVG spécifiques. Une forme dessinée au-dessus d'autres peut être rendue non interactive pour que les formes en dessous restent cliquables.
  • Réactiver un enfant dans un parent désactivé. Définissez none sur un conteneur et auto sur un enfant pour rendre uniquement cet enfant interactif.

Remarques importantes

Définir pointer-events: none sur un élément l'empêche d'être la cible d'événements de pointeur, mais cela ne bloque pas les écouteurs d'événements sur cet élément. Si un élément enfant a pointer-events réactivé (auto), l'enfant peut toujours être ciblé. Les événements ciblant l'enfant remontent ensuite à travers le parent et déclenchent tous les écouteurs qui lui sont attachés.

Avertissement

pointer-events: none bloque uniquement les entrées de pointeur. Cela ne retire pas l'élément de l'ordre de tabulation, donc les utilisateurs au clavier peuvent toujours atteindre un lien ou un bouton « désactivé » via la touche Tab. Pour une accessibilité réelle, retirez également l'élément de l'ordre de tabulation (tabindex="-1") ou utilisez l'attribut disabled réel sur les contrôles de formulaire.

Valeur initialeauto
S'applique àTous les éléments.
HéritéNon.
AnimableNon.
VersionScalable Vector Graphics (SVG) 1.1 (Second Edition).
Syntaxe DOMobject.style.pointerEvents = "auto";

Syntaxe

Syntaxe CSS de pointer-events

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

Exemple de la propriété pointer-events :

Exemple de code 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>

Résultat

Valeur none de CSS pointer-events

Dans l'exemple ci-dessus, survolez chaque boîte. Le premier <div> (pointer-events: none) ne répond pas — son lien n'est pas cliquable et aucun contour n'apparaît au survol. Le deuxième <div> (pointer-events: auto) se comporte normalement.

Schéma courant : un lien désactivé

Étant donné que les ancres n'ont pas d'attribut disabled, pointer-events: none est la méthode habituelle pour rendre un lien non cliquable. Associez-le à opacity pour que l'état soit visible :

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

N'oubliez pas la mise en garde d'accessibilité ci-dessus : le lien est toujours accessible au clavier, sauf si vous définissez également tabindex="-1".

Exemple avec la balise <svg>

En SVG, pointer-events peut router les clics à travers des formes empilées. Dans l'exemple suivant, le chemin avec la classe .c utilise pointer-events: none, donc les clics le traversent pour atteindre les formes en dessous, tandis que .d utilise pointer-events: all pour capturer les événements même là où son remplissage est transparent :

Exemple de valeur none de 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>

Valeurs

ValeurDescription
noneL'élément ne réagit jamais aux événements de pointeur.
autoL'élément accepte les événements de pointeur tels que les clics, le survol, etc. Il s'agit de la valeur par défaut de cette propriété.
initialFait utiliser à la propriété sa valeur par défaut.
inheritHérite de la propriété de son élément parent.

Valeurs SVG uniquement

ValeurDescription
visiblePaintedL'élément ne peut être la cible d'un événement de pointeur que lorsque la propriété visibility est définie sur visible, que le curseur de la souris est sur l'intérieur ou le périmètre de l'élément, et que la propriété fill ou stroke est définie sur une valeur autre que none.
visibleFillL'élément ne peut être la cible d'un événement de pointeur que lorsque la propriété visibility est définie sur visible et que le curseur de la souris est sur l'intérieur de l'élément.
visibleStrokeL'élément ne peut être la cible d'un événement de pointeur que lorsque la propriété visibility est définie sur visible et que le curseur de la souris est sur le périmètre de l'élément.
visibleL'élément ne peut être la cible d'un événement de pointeur que lorsque la propriété visibility est définie sur visible et que le curseur de la souris est sur l'intérieur ou le périmètre de l'élément.
paintedL'élément ne peut être la cible d'un événement de pointeur que lorsque le curseur de la souris est sur l'intérieur ou le périmètre de l'élément et que la propriété fill ou stroke est définie sur une valeur autre que none.
fillL'élément ne peut être la cible d'un événement de pointeur que lorsque le pointeur est sur l'intérieur de l'élément.
strokeL'élément ne peut être la cible d'un événement de pointeur que lorsque le pointeur est sur le périmètre de l'élément.
allL'élément ne peut être la cible d'un événement de pointeur que lorsque le pointeur est sur l'intérieur ou le périmètre de l'élément.

Propriétés associées

  • cursor — modifie le curseur de la souris affiché sur un élément (utilisez cursor: not-allowed pour renforcer l'apparence désactivée).
  • visibilityvisibility: hidden retire également un élément de l'interaction par pointeur, mais masque aussi l'élément.
  • opacity — souvent associé à pointer-events: none pour afficher un état désactivé.
  • user-select — contrôle si le texte à l'intérieur d'un élément peut être sélectionné.

Exercice

Pratique
Que fait la propriété 'pointer-events' en CSS ?
Que fait la propriété 'pointer-events' en CSS ?
Was this page helpful?