ElementInternals
カスタム要素を、divが変装したものではなく、本物の組み込み要素のように振る舞わせるAPI。
できることは三つある。まずフォームとの関連づけ。setFormValue()でコンポーネントの値をフォーム送信に含められ、setValidity()で通常の制約検証に組み込めるため、:invalidやエラーメッセージも機能する。以前は裏に隠したinput要素が必要だった。次にアクセシビリティ。roleやARIAプロパティを属性ではなくinternalsオブジェクトに設定するので、ページ作者が上書きできる既定値になり、属性と作者の指定がぶつからない。最後にカスタム状態で、internals.states経由でCSSから:state(loading)として参照できる。2023年以降、主要ブラウザで広く対応している。