Considérez ce qui suit :
class MyElem extends HTMLElement {};
customElements.define('my-element', MyElem);
class MyMoreSpecificElem extends MyElem {};
customElements.define('my-more-specific-element', MyMoreSpecificElem);
Dans le langage de l'héritage des objets, les instances de la seconde classe ont une relation 'est-un' avec la première : un MyMoreSpecificElem
est un MyElem
.
Cette relation est capturée en JavaScript :
let subclassInstance = document.querySelector('my-more-specific-element');
let parentClass = document.querySelector('my-element').constructor;
subclassInstance instanceof parentClass; // true
Mais je ne vois pas de moyen de sélectionner tous les MyElem
(y compris la sous-classe MyMoreSpecificElem) en utilisant des sélecteurs CSS. Un sélecteur d'étiquette ne ciblerait que la superclasse ou la sous-classe, et tous les sélecteurs de description de relation que je connais (par exemple, ~, >) concernent la position dans le document, pas la hiérarchie de classe.
Je veux dire, bien sûr, je peux ajouter une classe CSS dans le constructeur et sélectionner par cela, l'appel à super
garantirait même que les instances de la sous-classe pourraient être sélectionnées de cette manière. Mais c'est compliqué. Existe-t-il un moyen de le faire en CSS pur?