Remplacer JavaScript par du HTML seul
(htmhell.dev)- Présentation de méthodes récentes pour remplacer dans le web des fonctionnalités dépendantes de JS par du HTML/CSS
- Mise en œuvre d’accordéons, d’autocomplétion, de modales et de navigation hors écran à l’aide d’éléments standard comme
details·summary,datalistetpopover - Cette approche réduit le téléchargement, l’évaluation et l’usage mémoire, ce qui améliore les performances et l’expérience utilisateur
- Pour chaque fonctionnalité, des exemples CodePen, documents MDN et informations de compatibilité navigateur sont fournis
- Il faut réserver JS aux zones réellement nécessaires et exploiter activement les fonctionnalités avancées de HTML/CSS
Remplacer des fonctionnalités JS par HTML et CSS
- Pendant longtemps, JavaScript a pris en charge des fonctionnalités impossibles à implémenter avec HTML et CSS
- Mais à mesure que HTML et CSS se sont enrichis, certaines fonctionnalités JS peuvent être remplacées par des technologies web natives
- Comme JS doit être téléchargé, décompressé, évalué et conservé en mémoire, il est plus efficace de basculer vers HTML/CSS chaque fois que c’est possible
- L’idée proposée est de concentrer JS sur la logique complexe et de confier les contrôles d’interface simples à HTML/CSS
Accordéon / panneau de contenu extensible
- Les éléments
detailsetsummarypermettent d’implémenter un accordéon sans JS- Le contenu peut être ouvert et fermé par clic, et l’état par défaut se définit avec l’attribut
open - En utilisant le même attribut
name, un seul panneau peut rester ouvert
- Le contenu peut être ouvert et fermé par clic, et l’état par défaut se définit avec l’attribut
- Il est aussi possible de le styliser avec CSS ou de piloter l’ouverture/fermeture avec JS
- Ressources associées : documentation MDN sur
details, exemple CodePen, tableau de compatibilité navigateur
Champ de saisie avec suggestions d’autocomplétion
- La combinaison de
inputetdatalistpermet de créer une liste déroulante filtrée automatiquement- Lors de la saisie, la liste de suggestions est filtrée automatiquement
- En plus du texte, différents types de saisie comme
numberoutimesont pris en charge
- Firefox ne prend actuellement en charge que les champs de type texte, et il existe des limites d’accessibilité sur mobile
- Ressources associées : documentation MDN sur
datalist, tutoriel SitePoint, tableau de compatibilité navigateur
Modale / popover
- Les attributs
popoveretpopovertargetpermettent de créer des modales et popovers sans JS- Trois modes sont proposés :
auto,hintetmanual autose ferme via un clic à l’extérieur ou avec Échap, tandis quemanualne se ferme que manuellement
- Trois modes sont proposés :
- Firefox et iOS ne prennent pas en charge le mode
hint - Ressources associées : documentation MDN sur
popover, blog Chrome, exemple CodePen, vidéo sur l’accessibilité
Navigation / contenu hors écran
- La fonctionnalité
popoverpermet aussi d’implémenter un menu de navigation hors écran- L’élément
navapporte une sémantique adaptée, ettranslateen CSS permet de faire entrer ou sortir le menu de l’écran - Le menu se ferme lors d’un clic extérieur, et
popover="manual"permet de configurer une fermeture manuelle - Le pseudo-élément
::backdroppermet d’appliquer un fond semi-transparent
- L’élément
- Ressources associées : API Popover de MDN, blog Chrome, exemple CodePen
Conclusion
- Il faut reconnaître la puissance de JS, mais ne l’utiliser que là où c’est nécessaire
- Les avancées récentes de HTML/CSS ont fait émerger de nombreuses alternatives sans JS
- Davantage d’exemples sont disponibles dans le billet de blog de l’auteur, “Replace JS with No-JS or Lo-JS Options”
- Accent mis sur l’amélioration de l’expérience utilisateur grâce à la réduction de JS et à l’optimisation des performances
5 commentaires
On dirait qu’il manque une partie du contenu.
Je l’ai corrigé~ !
Il y a clairement des limites, et à partir du moment où l’IA est activée… est-ce vraiment nécessaire de faire ce genre de refactoring ?
Est-ce que cela prend en compte des aspects comme le blocage du contenu JS ?
Avis sur Hacker News
À la place de liens CodePen, il aurait été bien plus convaincant d’intégrer directement sur la page des exemples de remplacement en HTML
<details>/<summary>est vraiment énormeOn peut presque tout faire avec, pourtant la plupart des bibliothèques de composants les ignorent
Pas besoin non plus d’attributs aria, et l’accessibilité est fournie par défaut
<details>fonctionne aussi sur des sites basés sur Markdown comme GitHub. On peut y replier de longs logs pour les publier proprementEn écrivant le livre « You Don’t Need JavaScript », j’ai eu le sentiment que JS sert souvent moins à ajouter des fonctions inédites qu’à compléter les capacités existantes de la plateforme
<input>et<datalist>restent insuffisants en usage réelLes utilisateurs attendent une tolérance aux fautes de frappe, du texte d’aide et une bonne UX mobile, mais datalist ne répond pas à ces attentes
value)L’usage sémantique de HTML ou l’accessibilité sont presque totalement ignorés
Pour un article qui dit « faisons-le uniquement en HTML », dépendre d’un service externe semble contradictoire
C’est au stage 3 du WHATWG, et cela pourrait remplacer les implémentations JS de menus déroulants, souvent cauchemardesques
Voir cet article du blog Chrome
J’ai aussi essayé des alternatives comme HTMX ou Phoenix LiveView, mais ce ne sont pas des solutions complètes
Au final, je me dis qu’accepter le JS moderne est l’option la plus réaliste
<marquee>convenait bien pour les défilements horizontaux sur les sites e-commerce, alors qu’aujourd’hui on bricole ça en JS. J’aimerais que HTML prenne en charge davantage de patterns d’interface nativementPour les webapps complexes, JS est indispensable, mais il existe beaucoup de domaines où HTML seul suffit
Mais JS est désormais devenu un outil central de collecte de données et de suivi publicitaire
Je me demande si, sans JS, les big tech pourraient mettre en place le même niveau de surveillance et de services publicitaires
Au fond, l’hostilité envers JS ne vient pas seulement d’un problème technique, mais aussi d’une défiance envers l’écosystème publicitaire
Ce genre de tentative me permet parfois de réfléchir à la question de savoir si je fais de l’overengineering, mais du point de vue du travail réel avec des exigences riches, cela tient davantage du numéro de force.