属性セレクターは最新の CSS3 の方法であり、前進する方法ですか?
いいえ; 実際、属性セレクターはCSS2から存在しており、disabled
属性自体はHTML 4から存在しています。私の知る限り、:disabled
疑似クラスはSelectors 3で導入されたため、疑似クラスが新しくなりました。
はい、ある程度。
disabled
属性セレクターを使用すると、スタイリングしているドキュメントが属性を使用して無効なフィールドを示すという知識に依存しています。理論的には、HTML 以外のスタイルを設定している場合、無効なフィールドはdisabled
属性を使用して表現されない可能性がありますenabled="false"
。HTML の将来の版でも、さまざまな属性を使用して有効/無効状態を表す新しい要素が導入される可能性があります。[disabled]
これらの要素は属性セレクターと一致しません。
:disabled
疑似クラスは、作業中のドキュメントからセレクターを分離します。仕様では、無効になっている要素を対象とすること、および要素が有効か無効か、またはどちらでもないかは、代わりにドキュメント言語によって定義されると単純に述べています。
有効な状態、無効な状態、およびユーザー インターフェイス要素を構成するものは、言語に依存します。典型的なドキュメントでは、ほとんどの要素はどちら:enabled
でもありません:disabled
。
つまり、疑似クラスを使用すると、UA はスタイルを設定しているドキュメントに基づいて、一致する要素を自動的に判断するため、その方法を伝える必要はありません。disabled
逆に、属性セレクターは、その要素が実際に有効化または無効化をサポートしているかどうかに関係なく、属性を持つ任意の要素 ( など) と一致しますdiv
。このような非標準の動作に依存する多くの最新のフレームワークの 1 つを使用している場合は、属性セレクターを使用したほうがよい場合があります。
DOM に関しては、DOM 要素にプロパティを設定disabled
すると、HTML 要素のdisabled
属性も変更されると思います。つまり、どちらのセレクターでも DOM 操作に違いはありません。これがブラウザーに依存しているかどうかはわかりませんが、すべての主要なブラウザーの最新バージョンでそれを示すフィドルを次に示します。
// The following statement removes the disabled attribute from the first input
document.querySelector('input:first-child').disabled = false;
ほとんどの場合、HTML のスタイルを設定することになるため、これで何の違いもないかもしれませんが、ブラウザーの互換性が問題にならない場合は、疑似クラスが属性セレクターが行うセマンティクスを持っているという理由だけで:enabled
、:disabled
何度:not([disabled])
も選択します。[disabled]
いいえ。私はそのような純粋主義者です。