The pointer-events property controls whether an element can be the target of pointer input such as clicks, taps, and hovers. For HTML, you mostly use auto and none.
With none, the element is skipped in hit testing, so the pointer can reach what is behind it—handy for decorative overlays. It is inherited. Extra keywords such as fill and stroke are for SVG.
Standard-track.
Not deprecated. Baseline widely available. HTML study focus: auto and none.
SVG-only keywords HTML experimental
Values such as fill, stroke, and visiblePainted are for SVG. Treat them as experimental on HTML elements.
Syntax
CSS Syntax
syntax.css
pointer-events:auto | none | initial | inherit;
For everyday HTML, start with auto and none. SVG adds more hit-testing keywords when you need fill- or stroke-only targeting.
Empty overlay area passes through. The Close button still works.
How It Works
Turn the parent off.pointer-events: none on the overlay opens a path to the link below.
Turn the child on.pointer-events: auto on the button makes that control a hit target again.
Inheritance note. The property is inherited, so the explicit auto on the child is what re-enables it.
Events can still bubble. A click on the child can bubble through the none parent during the bubble phase.
Edge Cases & Pitfalls
If clicks behave oddly, one of these is usually why.
a11y
Not a substitute for disabled
none only changes hit testing. Form controls still need the disabled attribute when they should be unavailable to assistive tech and validation.
focus
Keyboard focus is separate
A link or button can still be focused with the keyboard even when pointer-events: none blocks the mouse. Manage focus and tabindex deliberately.
inherit
It is inherited
Children pick up a parent none unless they set another value. Set auto on any child that must stay interactive.
opacity
Invisible is not the same as none
opacity: 0 or visibility: hidden can still leave an element in the hit-test path unless you also set pointer-events: none.
svg
Extra keywords are SVG-first
fill, stroke, and related values target SVG geometry. Prefer auto / none for HTML UI work.
Compatibility
Browser Support
pointer-events is a browser CSS property for hit testing. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available since Jul 2015
pointer-events
HTML: Chrome 4+, Firefox 3.6+, Safari 4+, Edge 12+, Opera 15+, IE 11+. SVG support is older and broader in SVG-capable browsers.
97%Modern browser support
Google Chrome4+
Full support
Mozilla Firefox3.6+
Full support
Apple Safari4+
Full support
Microsoft Edge12+
Full support
Opera15+
Full support
Samsung Internet4+
Full support
Internet Explorer11+
Full support
pointer-eventsWidely supported
Bottom line: Safe for auto and none in current browsers, including Internet Explorer 11. Stick to those two keywords for HTML; use SVG-specific values only in SVG.
Remember
Key Takeaways
Role: choose whether an element can be a pointer hit target.
HTML values:auto (receive) and none (pass through).
Initial value:auto. Inherited: yes.
Pattern:none on overlays; auto on any child that must stay clickable.
One line:pointer-events: none makes a layer see-through to the pointer without hiding it visually.
Frequently Asked Questions
It controls whether an element can be the target of pointer input such as clicks, taps, and hovers. With none, the element is skipped in hit testing so events can reach what is behind it.
The initial value is auto. The element behaves normally and can receive pointer events.
No. none only changes hit testing. It does not mark a control as disabled for forms, validation, or accessibility. Prefer the disabled attribute on real form controls when needed.
Yes, if a child sets pointer-events: auto (or another receiving value). Events on that child can still bubble through the none parent during capture and bubble.
It mainly affects pointer hit testing. Keyboard focus still depends on the element type and tabindex. Do not use none alone as an accessibility lock.
It is Baseline and widely available since July 2015: Chrome 4+, Firefox 3.6+, Safari 4+, Edge 12+, IE 11+ for HTML. It is a browser CSS property, not a Node.js feature.