N’oubliez pas le C de CSS
J’ai eu, au cours des derniers mois, l’occasion de faire du code review sur beaucoup de pages web (et quand je dis beaucoup, je veux dire beaucoup…), et je me suis rendu compte de quelque chose d’assez étonnant : la plupart des développeurs et autres intégrateurs web sont bien conscients de ce qu’il faut séparer le contenu du contenant via des pages CSS et utilisent aujourd’hui largement les balise <div> en lieu et place des balises <table> (y compris pour les tables, ce qui pour le coup est une connerie); mais pour autant, ils semblent être passés, pour la plupart — et je pèse mes mots — à côté d’une des composantes principales des CSS : la lettre C.
CSS : Cascading Style Sheets
Le C de CSS est pour Cascading, ou « en cascade » en bon français. Ce que cela signifie — et je vous prie d’avance de m’excuser pour enfoncer des portes largement ouvertes — c’est qu’un style appliqué à un élément d’une page web est automatiquement, par cascade, appliqué à tous ses éléments, sauf contre-indication. Je n’ai pas l’intention dans cet article de faire un cours sur comment fabriquer de belles feuilles de styles, certains sites font cela très bien, bien mieux que moi et depuis bien plus longtemps (pour n’en citer que deux : Alsacreations.com et aListApart.com ); mon intention est ici de relever quelques unes des erreurs les plus couramment rencontrées ces dernières semaines, et de tenter de les comprendre et résoudre.
Et, pour être parfaitement complet, je précise qu’il ne s’agit, dans la plupart des cas, pas d’erreurs à proprement parler, mais plutôt de mauvaises habitudes de code…il conviendra alors que je justifie la mauvaise qualité de ces pratiques.
Mauvaises habitudes CSS, en général
Un fichier CSS par page web
Sans doute un des problèmes les plus courants : créer un fichier css pour chaque page web; cette pratique en dit long sur les méthodes de travail des intégrateurs web qui ne travaillent que rarement en équipe, leur métier étant souvent considéré (à tort) comme une simple tâche d’exécutant (de plus en plus souvent sous-traité à l’étranger, qui plus est); on a trois pages à intégrer : accueil, contact et qui sommes-nous, on confie la tâche à un intégrateur qui fait travailler deux ou trois personnes (permettant ainsi des délais plus courts, et donc plus chers), chacune travaillant dans son coin sans même simplement imaginer que d’autres personnes travaillent.
Pourquoi est-ce une mauvaise pratique ?
Le but des feuilles de style est triple :
- séparer la mise en forme d’une page du contenu de cette page;
- définir un style uniforme pour un contenu présenté de façon homogène;
- définir un style pour une destination donnée (écran, imprimante, mobile, etc.).
Résolution
La résolution consiste en la construction naturelle de feuilles de styles :
- Combien de styles différents souhaité-je déployer sur mon site internet ? Par exemple, un style pour la partie commerce, un style pour la partie institutionnelle et un style pour le back office; il doit y avoir autant de fichiers CSS que de styles à présenter;
- Par ailleurs, quelles destinations souhaité-je adresser de façon définie ? Si je souhaite définir un style particulier pour les imprimantes, pour les tablettes numériques, les smartphones, etc. c’est autant de multiplications des feuilles de style (du moins en partie, comme nous le verrons plus loin).
Un fichier CSS pour Internet Explorer
Là encore, du fait que l’HTML n’a jamais été vraiment standardisé (et même si HTML 5 résout une partie des problèmes), chaque navigateur internet propose des interprétations, parfois différentes, des tags HTML. Du coup, il est fréquent de voir traîner, près d’un fichier main.css, un fichier main_IE.css .
Pourquoi est-ce une mauvaise pratique ?
En soi, ce n’est pas nécessairement une mauvaise pratique; en effet, IE peut être considéré comme une destination à part entière, de la même manière qu’une imprimante. Ceci étant, il est nécessaire de considérer, dans ce cas, le fichier IE.css comme une surcharge d’une feuille de style générale, en prenant en compte la mise en cascade des styles, et ne pas copier/coller le fichier principal en modifiant ensuite ce qui doit l’être.
Résolution
Je viens de le dire : la résolution tient dans le fait de n’adresser dans ce fichier que les surcharges nécessaires. Plus de détails dans la résolution du problème suivant.
Chaque élément de la page est complètement défini
Une page relativement simple, avec un entête, un pied-de-page, une navigation, et deux colonnes remplies d’articles (tous sur le même modèle : titre, chapeau, texte, lien, image), et pourtant une feuille de style avec des dizaines de styles.
Pourquoi est-ce une mauvaise pratique ?
De la même manière que définir une page CSS pour chaque page web rend la maintenance très difficile, le fait de définir un style pour chaque élément de contenu d’une page rend la maintenance très difficile et compromet rapidement l’homogénéité du site.
Résolution
Il est nécessaire de profiter de toutes les facettes du CSS à notre disposition : les tags HTML, les id, les classes (on peut aller plus loin avec les sélecteurs, les opérateurs, etc.).
Les règles pour cela sont extrêmement simples (et leur mise en oeuvre pas particulièrement compliquée) :
- les tags HTML doivent avoir un style (défini explicitement ou hérité);
- les éléments de page qui sont uniques (comme par exemple la navigation principale) doivent avoir un style défini par un id;
- les éléments de page génériques, qui sont repris potentiellement plusieurs fois par page (par exemple, un article) doivent avoir un style défini par une classe.
- *, body, html (pour les tags);
- #page (pour l’ensemble de la page), #header, #footer, #content, #column_1, #column_2 (les ids);
- .article (pour les articles).
- #header ul, #header li (pour les éléments de navigation);
- .article h1, .article p, .article a, .article a:hover (pour les tags dans les articles).
- comment puis-je simplifier mon découpage sans perdre le sens de ce découpage;
- si je dois revenir dans 3 ans pour modifier l’aspect du site, ai-je optimisé mes feuilles de style pour simplifier cette tâche ?
Bilan
Cet article ne prétend pas faire le tour des problèmes rencontrés; en revanche, je souhaite que vous puissiez y déposer les problèmes que vous avez rencontrés ainsi que leur résolution si vous en avez. Les bonnes pratiques peuvent être définies par des livres, des spécifications, des forums, des vidéos, des formations, etc. Mais la source principale de ce qui se définit comme une bonne ou une mauvaise pratique reste avant toute chose la pratique.