- En HTML, même si l’on utilise un nom de balise non reconnu, le navigateur le traite comme un élément générique
- En définissant ce nom de balise comme sélecteur en CSS, il est possible de le styliser et d’en contrôler l’affichage
- Utiliser un nom contenant un trait d’union (
-) permet d’éviter les conflits avec les futurs standards HTML - À la place de
ou, employer des balises personnalisées porteuses de sens améliore la lisibilité du code - Même dans des structures imbriquées complexes, le seul nom des balises suffit à comprendre la structure, ce qui facilite la maintenance
Utilisation des balises HTML personnalisées
-
Le navigateur affiche les balises inconnues comme des éléments de bloc génériques
- Il s’agit d’un comportement normal défini par le standard HTML, et leur apparence peut être contrôlée visuellement via du CSS
- Par exemple, on peut définir une balise comme `` et la styliser en CSS avec
cool-thing { ... }
-
Si le nom de balise contient un trait d’union (
-), il n’y a aucun risque de conflit avec un futur ajout au standard HTML- Ex. :
,
- Ex. :
Lisibilité et amélioration de la structure
- Utiliser des balises aux noms explicites à la place de
ourend le code plus facile à comprendre- Par exemple, on peut utiliser
au lieu de
- Par exemple, on peut utiliser
- Dans une structure imbriquée de ``, il est difficile de repérer à quelle balise correspond une fermeture, mais des noms de balises explicites rendent la structure plus claire
- Si
contient, ``, etc., la structure du DOM devient intuitive à lire
- Si
Exemple de code
- Méthode classique
Hello, World! - Avec des balises personnalisées
Hello, World!- En CSS, on peut appliquer des styles comme
cool-thing { display: block; font-weight: bold; text-align: center; ... }
- En CSS, on peut appliquer des styles comme
Conclusion
- En exploitant la souplesse de définition des balises autorisée par le standard HTML, il est possible d’écrire un markup structurel plus lisible
- Toutefois, lorsqu’une balise sémantique existante convient déjà, il faut la privilégier
1 commentaires
Avis sur Hacker News
Souligne que
n’est pas une balise non reconnue Il présente son [article de blog](https://dashed-html.github.io), expliquant queest traité comme un HTMLUnknownElement jusqu’à ce que le WHATWG l’ajoute comme nouvel élément, tandis queest un **HTMLElement valide**, utile pour la mise en page et le style Si on le met à niveau via la JavaScript Custom Elements API, il devient un **custom element défini** C’est un comportement standard dans tous les navigateurs, et le validateur HTML du W3C reconnaît aussi les custom elements avec tiret comme des HTMLElement En revanche, la règle `[hidden]{display:none}` de la feuille de style UA par défaut n’est pas héritée, donc il faut la définir soi-même Comme le fait queait par défautdisplay:blockvient aussi de la feuille de style UA, il faut définir explicitement la propriétédisplaypour les custom elements Les sélecteurs CSS:definedet:not(:defined)permettent de distinguer les éléments définis et non définis Le Declarative Shadow DOM (``) crée lui aussi des custom elements non définishiddenest un attribut de présentation HTML La feuille de style UA s’applique de la même manière aux custom elements, et il n’existe pas de règle[hidden]hiddenest un exemple où l’attribut lui-même est interprété comme du style, commealign="right"-), ce qui aurait permis d’intégrer naturellement les espaces de noms XML Il mentionne aussi qu’il aurait été possible, dans nginx ou apache, de convertir les deux-points en tirets Il conclut sur une note nostalgique, disant qu’« on ne peut pas retourner en 1999 »Fait remarquer que la structure imbriquée en
dans l’exemple est excessive Il propose d’utiliser plutôt des **balises sémantiques** comme,etPartage son expérience de 3 à 4 ans d’utilisation des custom elements L’idée est maligne, mais délicate en pratique Trop de balises custom nuisent à la lisibilité et rendent la distinction bloc/en ligne difficile Avec une approche équilibrée, il conserve les balises de base et n’utilise des custom tags que pour des éléments de type composant comme
ouLes sous-composants sont distingués via un attributslot, comme dans `` Il préfère réserver les classes à la modification et à la personnalisation, et exprimer la structure via les slots< !app-header />avec une astuce basée sur des nœuds de commentairesloten CSS, il faut écrirediv[slot="hero-blurb"]Les custom tags se comportent essentiellement comme `` Si nécessaire, on peut définir leur comportement via la Custom Element API
Présente un custom tag nommé
qui joue le rôle inverse deIl peut masquer une zone spécifique lorsque JS est désactivé Il partage le lien du projet@media (scripting)Il ajoute un lien vers la documentation MDNPartage une expérience où il a recréé lui-même l’ancienne balise ``, retirée des navigateurs Il l’a implémentée avec jQuery et en manipulant
visibility, et dit avoir été surpris que les navigateurs autorisent des balises arbitraires Le code faisait une dizaine de lignes, donc il ne l’a pas publié, mais suppose qu’il existe beaucoup d’essais similairesblinkau lieu de.blink, l’effet s’applique directement à la baliseFait remarquer que des exemples comme
oupeuvent être remplacés par de vraies balises HTML Il est plus approprié d’utiliser,et ``Les custom tags sont rendus en ligne par défaut, comme ``, mais il suffit de définir une propriété
displaypar défaut en CSS Autrefois, on les évitait à cause des problèmes d’espaces de noms, mais l’autorisation du tiret (-) dans le standard a supprimé le risque de collision Ils fonctionnent aussi sans problème dans les sélecteurs CSS, et sont accessibles viaquerySelectorIl estime que le HTML moderne suffit déjà à être expressif, même sans framework comme VuePour définir un style par défaut à tous les custom elements, on peut faire ainsi
Se souvient qu’à l’époque, IE ne reconnaissait pas les balises HTML5, et qu’il avait résolu cela vers 2010 avec un script qu’il avait écrit Il suffisait de créer une balise une fois en JS pour qu’IE la reconnaisse, et il n’y avait ensuite aucun problème même après sa suppression Il dit avoir compris grâce à cela qu’il était aussi possible de rendre des balises arbitraires Il partage aussi son article de blog de l’époque