{ "@context": "https://schema.org", "@id": "https://webspecification.com/spec/accessibility/css-state-selectors.jsonld", "@graph": [ { "@type": "TechArticle", "@id": "https://webspecification.com/spec/accessibility/css-state-selectors/#article", "headline": "CSS state and relational selectors", "description": "Use `:has()` together with `:user-invalid`, `:user-valid`, `:placeholder-shown` and `:focus-within` to express form and component state in CSS, removing the JavaScript class-toggling pattern and the race conditions it brings.", "url": "https://webspecification.com/spec/accessibility/css-state-selectors/", "inLanguage": "en", "isPartOf": { "@type": "WebSite", "@id": "https://webspecification.com/#website", "name": "Web Specification Studio", "url": "https://webspecification.com" }, "author": { "@type": "Person", "name": "Web Specification Studio", "url": "https://webspecification.com" }, "publisher": { "@type": "Organization", "@id": "https://webspecification.com/#organization", "name": "Web Specification Studio", "url": "https://webspecification.com" }, "license": "https://creativecommons.org/licenses/by/4.0/", "dateModified": "2026-05-29T16:40:22.000Z", "citation": [ { "@type": "CreativeWork", "name": "W3C Selectors Level 4 — Relational selector `:has()`", "url": "https://www.w3.org/TR/selectors-4/#relational", "publisher": { "@type": "Organization", "name": "W3C" } }, { "@type": "CreativeWork", "name": "MDN — `:has()`", "url": "https://developer.mozilla.org/en-US/docs/Web/CSS/:has", "publisher": { "@type": "Organization", "name": "MDN" } }, { "@type": "CreativeWork", "name": "MDN — `:user-invalid`", "url": "https://developer.mozilla.org/en-US/docs/Web/CSS/:user-invalid", "publisher": { "@type": "Organization", "name": "MDN" } }, { "@type": "CreativeWork", "name": "HTML Living Standard — Constraint validation", "url": "https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#constraint-validation", "publisher": { "@type": "Organization", "name": "WHATWG" } } ] }, { "@type": "BreadcrumbList", "@id": "https://webspecification.com/spec/accessibility/css-state-selectors/#breadcrumb", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://webspecification.com/" }, { "@type": "ListItem", "position": 2, "name": "Spec", "item": "https://webspecification.com/spec/" }, { "@type": "ListItem", "position": 3, "name": "Accessibility", "item": "https://webspecification.com/spec/accessibility/" }, { "@type": "ListItem", "position": 4, "name": "CSS state and relational selectors", "item": "https://webspecification.com/spec/accessibility/css-state-selectors/" } ] } ] }