W3docs

Propiedad CSS pointer-events

Usa la propiedad pointer-events para controlar si un elemento responde a eventos táctiles. Consulta los valores y ejemplos de la propiedad.

La propiedad pointer-events controla si un elemento puede ser el destino de eventos de puntero — clics de ratón, hover, toque y entrada de lápiz. Cuando se establece en none, el elemento se vuelve "transparente" al puntero: los clics, hovers y otras interacciones pasan directamente a través de él hacia lo que se encuentre debajo.

Esta página explica los valores de la propiedad, dónde funciona realmente en HTML frente a SVG, los casos de uso comunes en el mundo real y los errores frecuentes que confunden a los desarrolladores.

Información

Definido originalmente para SVG, pointer-events es ahora una propiedad CSS estándar.

Muchos valores se aplican únicamente a elementos SVG. Para los elementos HTML ordinarios, solo auto y none tienen amplio soporte — los valores específicos de SVG (fill, stroke, visiblePainted, etc.) no tienen efecto en HTML.

Cuándo usarlo

  • Superposiciones de clic a través. Una superposición decorativa o de carga cubre la página, pero deseas que los clics lleguen al contenido que hay detrás. Establece pointer-events: none en la superposición.
  • Deshabilitar un control visualmente. Combina pointer-events: none con una opacity reducida para que un botón o enlace parezca y se comporte como deshabilitado (los enlaces no tienen un atributo disabled nativo, por lo que este es un patrón común).
  • Permitir que los eventos atraviesen formas SVG específicas. Una forma dibujada sobre otras puede hacerse no interactiva para que las formas que hay debajo sigan siendo clicables.
  • Reactivar un hijo dentro de un padre deshabilitado. Establece none en un contenedor y auto en un hijo para que solo ese hijo sea interactivo.

Notas importantes

Establecer pointer-events: none en un elemento impide que sea el destino de eventos de puntero, pero no detiene la ejecución de los escuchadores de eventos en ese elemento. Si un elemento hijo tiene pointer-events reactivado (auto), el hijo aún puede ser objetivo. Los eventos que apuntan al hijo ascienden a través del padre y activan cualquier escuchador adjunto a él.

Advertencia

pointer-events: none solo bloquea la entrada de puntero. No elimina el elemento del orden de tabulación, por lo que los usuarios de teclado aún pueden acceder a un enlace o botón "deshabilitado" mediante la tecla Tab. Para una accesibilidad real, elimina también el elemento del orden de tabulación (tabindex="-1") o usa el atributo disabled real en los controles de formulario.

Valor inicialauto
Se aplica aTodos los elementos.
HeredadoNo.
AnimatableNo.
VersiónScalable Vector Graphics (SVG) 1.1 (Segunda Edición).
Sintaxis DOMobject.style.pointerEvents = "auto";

Sintaxis

Sintaxis CSS de pointer-events

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

Ejemplo de la propiedad pointer-events:

Ejemplo de código 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>

Resultado

CSS pointer-events valor none

En el ejemplo anterior, pasa el cursor sobre cada caja. El primer <div> (pointer-events: none) no responde — su enlace no es clicable y no aparece ningún contorno al pasar el cursor. El segundo <div> (pointer-events: auto) se comporta con normalidad.

Patrón común: un enlace deshabilitado

Dado que las anclas no tienen un atributo disabled, pointer-events: none es la forma habitual de hacer que un enlace no sea clicable. Combínalo con opacity para que el estado sea visible:

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

Recuerda la advertencia de accesibilidad anterior: el enlace sigue siendo accesible mediante teclado a menos que también establezcas tabindex="-1".

Ejemplo con la etiqueta <svg>

En SVG, pointer-events puede dirigir los clics a través de formas apiladas. En el siguiente ejemplo, el path con clase .c usa pointer-events: none, por lo que los clics pasan a través de él hacia las formas que hay debajo, mientras que .d usa pointer-events: all para capturar eventos incluso donde su relleno es transparente:

Ejemplo del valor 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>

Valores

ValorDescripción
noneEl elemento nunca reacciona a los eventos de puntero.
autoEl elemento acepta eventos de puntero como clics, hover, etc. Este es el valor predeterminado de esta propiedad.
initialHace que la propiedad use su valor predeterminado.
inheritHereda la propiedad de su elemento padre.

Valores exclusivos de SVG

ValorDescripción
visiblePaintedEl elemento solo puede ser el destino de un evento de puntero cuando la propiedad visibility está establecida en visible, el cursor del ratón está sobre el interior o el perímetro del elemento, y la propiedad fill o stroke está establecida en un valor distinto de none.
visibleFillEl elemento solo puede ser el destino de un evento de puntero cuando la propiedad visibility está establecida en visible y el cursor del ratón está sobre el interior del elemento.
visibleStrokeEl elemento solo puede ser el destino de un evento de puntero cuando la propiedad visibility está establecida en visible y el cursor del ratón está sobre el perímetro del elemento.
visibleEl elemento solo puede ser el destino de un evento de puntero cuando la propiedad visibility está establecida en visible y el cursor del ratón está sobre el interior o el perímetro del elemento.
paintedEl elemento solo puede ser el destino de un evento de puntero cuando el cursor del ratón está sobre el interior o el perímetro del elemento y la propiedad fill o stroke está establecida en un valor distinto de none.
fillEl elemento solo puede ser el destino de un evento de puntero cuando el puntero está sobre el interior del elemento.
strokeEl elemento solo puede ser el destino de un evento de puntero cuando el puntero está sobre el perímetro del elemento.
allEl elemento solo puede ser el destino de un evento de puntero cuando el puntero está sobre el interior o el perímetro del elemento.

Propiedades relacionadas

  • cursor — cambia el cursor del ratón que se muestra sobre un elemento (usa cursor: not-allowed para reforzar un aspecto deshabilitado).
  • visibilityvisibility: hidden también elimina un elemento de la interacción con el puntero, pero también oculta el elemento.
  • opacity — se combina habitualmente con pointer-events: none para representar un estado deshabilitado.
  • user-select — controla si el texto dentro de un elemento puede seleccionarse.

Práctica

Práctica
¿Qué hace la propiedad 'pointer-events' en CSS?
¿Qué hace la propiedad 'pointer-events' en CSS?
Was this page helpful?