demo · v132

Why interactivity: inert exists when the inert attribute is already a thing

Both turn an element off. But one is HTML, the other is CSS — and that single difference means very different things for media queries, shadow DOM, and animations. Side-by-side table below.

questioninert attributeinteractivity: inert
Can I toggle it under a media query?noyes — pure CSS
Can it animate or transition?no — it's an attribute, not a propertyyes — transition: interactivity
Can I scope it through ::part() or ::slotted()?noyes — CSS selectors apply
Cascades inheritance from ancestors?propagates to subtree, not inherited via CSS rulesyes — full CSS inheritance
Works for non-HTML elements (SVG)?HTML-only attributeyes — CSS applies anywhere
Removes from accessibility tree?yesyes
Pointer events blocked?yesyes
Sequential focus skipped?yesyes
Can I select the text?nono

attribute approach

Old way. Toggle the attribute via JS or server render. No CSS hook.

CSS property approach

New in Chrome 132. Toggle via media query, class, animation, anything.

/* the media query trick — impossible with the attribute */
@media (prefers-reduced-motion: reduce) {
  .carousel-decoration { interactivity: inert; }
}

/* the transition trick */
.modal[hidden] .content {
  interactivity: inert;
  transition: interactivity 250ms;
}

see also