Archive pour la catégorie ‘CSS’

Ce que je reproche au CSS

Mardi 30 janvier 2007

Suite à 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 ?

Layout CSS : histoire d’un échec

Samedi 27 janvier 2007

Il y a quelques heures, je criai ici même mon désarroi, suite à l’échec cuisant que je venais de subir suite à l’actualisation de ce site. En effet, j’ai passé du temps à mettre au point un “fluid layout” trois colonnes du feu de dieu pour que le site s’affiche correctement, pour finalement me rendre compte que ce dernier s’affiche mal sur à peu près tous les navigateurs éxistants (sauf Firefox).

Il faut dire ce qui est, le design web, c’est pas du tout mon truc. Quand je me suis lancé dans cette aventure, je savais grosso modo ce que je souhaitai :

  • une page dont le contenu se redimensionne en fonction de la taille de la fenêtre
  • trois colonnes dont deux de tailles fixes sur les bords
  • la possibilité d’avoir des colonnes de hauteur différentes
  • la possibilité d’utiliser des éléments flottants au sein de la colonne centrale
  • et tant qu’à faire, gérer cette disposition à l’aide d’éléments CSS, parce que c’est classe …

Figurez vous que c’est pas facile. En fait, il s’avère même que cette disposition de page est surnommée le saint graal. Rien que ca. Il se trouve donc que j’ai trouvé le site susmentionné, qui explique comment faire un tel layout d’une manière relativement simple et élégante. Sauf que tout ca nécessite l’usage de diverses astuces CSS avancées, qui sont plus ou moins buggées suivant les navigateurs - mais ca je ne l’ai appris que trop tard …

En fait, ca marche pas. Ou mal. Ou avec pleins de hacks CSS à s’arracher les cheveux pour que tout apparaisse comme il faut, quelque soit le navigateur. Mes premiers retours ont été les suivants :

  • ca marche pas sous IE5
  • ca marche pas sous IE5.5
  • ca marche pas sous IE6 (malgré la présence d’un hack spécial IE6 dans le code CSS)
  • ca marche pas sous IE7

De quoi être découragé, en somme.

Alors, ce soir, j’ai décidé de dire merde au Saint Graal. Pourquoi se faire chier à absolument faire son layout en CSS avec des colonnes flottantes et autres astuces de sioux ? Pourquoi ne pas simplement utiliser un bon vieux tableau ? Après tout, les fonctions avancées CSS sont tellement mal supportées par les divers navigateurs qu’il serait beaucoup plus sûr d’en faire un usage aussi restreint que possible. La morale de cette histoire, c’est qu’obtenir un équivalent du Saint Graal avec un tableau et un peu de CSS de base nécessite guère plus de dix lignes de code, qui sont supportées à 100% par tous les navigateurs graphiques.

Du coup, j’aimerai bien qu’on m’explique l’intérêt du layout CSS …