Ce que je reproche au CSS
Mardi 30 janvier 2007Suite à un commentaire de ce très cher François Samin (longue vie à lui), j’ai tapé un commentaire de trois kilomètres. A tel point qu’en fait, j’en fais un article - que dis-je, une profession de foi.
Je ne sais pas trop ce que tu as voulu faire, mais au boulot j’en manipule assez souvent sans trop de probleme. Il faut juste connaitre les limitations des navigateurs et de faire des choses simples.
Il y a plusieurs avantages à s’emmerder à faire ça:
- c’est classe
- c’est à la mode
- dans un gros projet MVC2, ça te permet dans tes JSP (ou autres) de t’abstraire de la mise en forme. Finalement ça ressemble à un découpage MVC dans la partie “Vue” de ton projet, par exemple:
1. la CSS c’est la “vue” : la disposition, le visuel de ta page
2. la JSP c’est le “modèle” : la logique d’affichage
3. le JS c’est le “controleur” : le coté “dynamique” de ta page
Permet moi de ne pas partager cette vue aussi optimiste
Le langage CSS en lui même te permet de définir tout un tas de propriétés applicable à N éléments de ta page, certes. Cependant, le rendu de ta page est extrêmement dépendant de l’ordre dans lequel les éléments apparaissent au sein de ton code HTML. C’est particulièrement flagrant dès qu’il s’agit de gérer du positionnement d’éléments un tant soit peu avancé.
De plus, l’héritage entre les classes CSS n’est pas dépendant du code CSS en lui même, mais de l’imbrication des éléments auxquels ces classes sont appliquées. C’est quelque chose que je trouve profondément contre-intuitif, mais c’est surement dû à mon passif en programmation objet.
Et pour finir, le CSS est au final un langage de programmation batardisé, qui ne s’assume pas. Par exemple, le CSS se targue de permettre la redéfinition du style de tout un site en ne modifiant que le fichier de style. Cependant, si j’utilise un code couleur particulier dans plusieurs classes CSS, je vais devoir modifier ce code couleur à plusieurs endroits dans mon CSS. Quid de la définition d’une simple variable globale ? Non surtout pas ce serait trop compliqué …
Au final, le soit-disant contrôle sur l’apparence de la page est extrêmement réduit car contraint par les choix de design du code HTML qui fait appel au CSS.
Une alternative : si il était possible de définir les classes CSS comme des classes en programmation objet, avec des schémas d’héritage directement entre les classes au sein du fichier CSS, alors il pourrait y avoir une plus grande indépendance à l’aide d’un schéma de déclaration particulier :
- d’un coté, des classes définissant les styles graphiques (eg couleur1, couleur2, couleur3, bordure1, bordure2 …)
- de l’autre, des classes servant de “pont sémantique” avec les éléments de la page (titre, surtitre, imporant, paragraphe …) ; la définition de ces classes se faisant uniquement par le biais d’un héritage multiple des classes de styles graphiques.
Et encore, la technique que je présente ici serait bancale pour tout ce qui touche au positionnement des éléments, vu qu’il est relatif à l’imbrication des balises HTML.
Après, si quelqu’un me dit qu’on peut faire de l’héritage directement entre les classes CSS et définir des variables, je veux bien retirer tout ce que j’ai dit … après tout, je suis loin d’être un pro du CSS
EDIT : j’ajouterai qu’au final, le problème repose sur le fait qu’avec le design CSS, on tente de donner un role de structuration de l’information au code HTML, alors qu’à la base il a été étudié pour gérer la forme de l’information. Si à la place du HTML on avait des fichiers dont les balises servent le fond et non la forme, alors les feuilles de styles pourraient réellement s’occuper de la forme. Oh mais tiens, ca ressemblerait t’y pas au couple XML/XSLT, tout ca ?