:user-invalid is the validation selector you actually wanted
Unlike :invalid, it waits until the user has interacted with the field — so empty required inputs stop turning red before anyone has typed anything.
Tagged
The parent selector we asked for since 2003 has been shipping for years now. It does not just save a class name — it moves state out of JavaScript entirely.
Media queries ask how big the window is. That was never the question. Components care about the space they are given, and now they can ask.
Animating between two states used to mean keeping both in the DOM and choreographing them by hand. The browser will now do the hard part for you, in about six lines.
Unlike :invalid, it waits until the user has interacted with the field — so empty required inputs stop turning red before anyone has typed anything.
Baseline turns "which browsers support this" into a yes or a no, and it is now built into MDN, the docs, and a linter you can run in CI.