EagleLand

2024.04.07

カスタム要素の状態を定義する CustomStateSet と参照する擬似クラス :state()

Safari 17.4 で CustomStateSet がサポートされたCustomStateSet は Web Components のカスタム要素の状態を管理する API で、Element Internalsstates プロパティに含まれる。Element Internals はカスタム要素の振る舞いを HTML のフォームと連動させるための仕様だ。

CustomStateSet は JavaScript のグローバルオブジェクトである Set と同様のインターフェースで、CustomStateSet に追加された文字列がカスタム要素の「状態」を定義する。

次のデモは HTML の minlength 属性<input type="number"> で動的に設定し振る舞う Web Components である1<input type="text"><input type="number"> の値を変更すると、validate() メソッドで入力値のバリデーションを行い、その結果を Element Internals オブジェクトの setValidity() メソッドで設定するとともに、states プロパティで状態を指定している。

ここでは、入力値の長さが minlength の値より小さい場合にエラーを報告しつつ、error という値を保存している。これによって、この HTMLElement は Element Internals の states プロパティによって状態が宣言されることになる。:state() 擬似クラスは、CustomStateSet オブジェクトで定義される状態を参照し、任意の識別子として参照できる。ここでは error という状態を :state(error) のように参照し、スタイリングしている。


  1. 参考: Custom pseudo-classes for web components with the CustomStateSet API ↩︎

タイトルと URL をコピーしました