<C²: webløg />

Courriel - email address

Avatar Denis

lundi 02 février 2004
par Denis Boudreau

De l'intérêt des commentaires conditionnels

Connaissez-vous les toutes dernières astuces à la mode, soit les commentaires conditionnels de Microsoft ? Ce sont de tous petits bouts de commentaires HTML (finement apprêtés à la sauce propriétaire) qui permettent, lorsque présentés à un navigateur qui en est friand, d'en corriger les nombreux manques à gagner en terme de respect des normes (notamment au niveau des CSS) sans pour autant faire souffrir les autres agents utilisateurs dans le processus. En d'autres termes, de limiter sans trop de casse le nombre de hacks incompréhensibles qui doivent être utilisés normalement pour atteindre la "pixel-perfection"... en autant que vous ayez la mauvaise habitude de faire cohabiter CSS et HTML dans le même fichier.

Que du bonheur en apparence. Les avis sur la question sont évidemment partagés. Fouillons un peu plus en profondeur pour se faire une tête à leur sujet.

Mettons-nous en contexte

YoGi et Jean-Marc abordaient la question aujourd'hui par blogs interposés, y allant tour à tour des raisons leur faisant croire que ces astuces sont soit bonnes, soit mauvaises. Comme rien n'est jamais complètement noir ou complètement blanc, je vous invite à aller lire tout ça. Si, si, allez-y, je vous attends.

Cette pause est commanditée par Heineken, la bière qui respecte les standards du Web et ceux qui les mettent en pratique...

Bon, vous re-voilà. Maintenant que vous avez pu vous faire une idée de la question, il y a fort à parier que les avis sont partagés. Aux premiers abords, j'ai eu tendance à penser comme Jean-Marc et dire que ce n'était pas terrible et que ça ouvrait la porte à toutes sortes d'abus et d'entorses à un code que l'on souhaiterait bien structuré et exempt de duplications inutiles. Mais à force de réfléchir à cet exemple qu'il donne des appels multiples de feuilles de style, j'y vois un avantage énorme qui semble avoir été sous-estimé jusqu'à présent dans le débat. Un truc suffisamment important pour que je recommande ces fameux commentaires conditionnels à certaines de mes connaissances.

Clause de non-responsabilité

C'est évident qu'au départ, tout ce qui est hack est condamnable. Dans un monde idéal, on n'aurait pas à en faire et tous les agents utilisateurs fonctionneraient selon un modèle standardisé. Comme ce n'est évidemment pas le cas, il faut reconnaître qu'à deux maux, il importe souvent de choisir le moindre. Si on se place dans un contexte de production normal, je trouve que les commentaires conditionnels peuvent devenir drôlement utiles pour limiter les dégats. Je m'explique.

Attention ! Généralisation en vue !

L'intégrateur moyen en agence, celui qui construit les sites publics et les sites les plus en vue sur le Web, est rarement un expert des technologies Web. Dans la majorité des cas, c'est simplement un développeur qui fait son possible avec les contraintes et les limites qui sont siennes pour produire son travail au meilleur de ses capacités, dans les temps les plus courts. Toujours dans la majorité des cas, c'est également un développeur peu disposé à se casser la tête sur un problème, pas forcément par mauvaise volonté, mais plutôt par la force des choses. On le paie pour produire et par définition, qui dit "produire" sous-entend généralement "le plus vite possible". L'intégrateur a rarement le temps de se lancer en recherche et développement. Il doit sortir son site sans attendre, car le prochain attend déjà sur le coin de sa table.

De ce fait, bien peu d'entre eux jouissent du luxe de faire l'effort supplémentaire de chromer leur travail, se contentant souvent d'un rendu en acier inoxydable en apparence bien satisfaisant. Dans leurs boîtes à outils, ils disposent d'une arme très efficace pour contrer les problèmes de disparité entre navigateurs : le javascript (propriétaire). Et vous le savez aussi bien que moi, les intégrateurs ne craignent pas de l'utiliser.

Ainsi, lorsqu'ils arrivent à un point où ils sont incapables de hacker convenablement leurs feuilles de style, ceux-ci deviennent très rapides à "sniffer" l'agent utilisateur du client pour servir une CSS approprié par navigateur.

Culminons, puisqu'il le faut bien

En bout de ligne, on obtient tout de même les résultats dont Jean-Marc souhaite nous préserver, c'est-à-dire une panoplie de feuilles de style à 95% identiques, mais qui diffèrent uniquement sur la taille des fontes, ou le positionnement absolu des principaux éléments. Tous ces fichiers se dupliquent, principalement par la méconnaissance des technologies par l'intégrateur, ou le mauvais support de celles-ci par les navigateurs. On retrouve une feuille pour chacun des principaux navigateurs, sous chacunes des principales plate-formes, tout ça savamment géré par un Javascript qui ne fonctionnera évidemment pas pour tout le monde.

Tant qu'à devoir vivre avec cette pratique, pourquoi ne pas promouvoir les commentaires conditionnels ? En quoi sont-ils moins recommandables que le fameux @import pour berner Netscape 4 ?

Car à mon sens (corrigez-moi si je me trompe), ils n'ont rien de vraiment méchants ces commentaires conditionnels... pour tous les navigateurs sauf MSIE, ils ne sont que de vulgaires commentaires HTML. Peut-on vraiment parler de hack à ce moment ? Est-ce que je hacke mon site, lorsque je commente dans mon code la raison d'être de tel ou tel div ?

Note : les prochains billets seront moins longs, c'est promis !

Denis Boudreau | 2004.02.02 @ 17:41

Alors, qu'en pensez-vous ?

Voici ce que vous aviez à en dire... vos impressions, recueillies à vif.

2004.02.02 @ 18:55 par David Tremblay

Moi je vote pour les commentaires conditionnels pour la raison suivante :

Dans certaines conditions lorsqu'on veut garder la même apparence entre IE et les autres, il faut se livrer à quelques contortions. Certaines de ces acrobaties sont incompatibles entre elles (je pense à min/max-width et le modèle de boîte - déjà bogué chez IE)

Donc en utilisant les commentaires conditionnels à la manière d'une surcharge (overide en grec) j'économise beaucoup d'huile de coude en consacrant tout les petits 'hacks' pour le seul IE.

De cette manière j'ai toujours une CSS valide alors que l'autre (celle référencée par le commentaire conditionnel) pourra contenir des définitions qui auraient pu collisionner avec ma CSS 'propre'.

Essayez-les :

<!--[if IE]>

<link href='css/msiefix.css' title='Compact' rel='stylesheet' type='text/css'>

<![endif]-->

Et à ce que je sache personne ne rechigne à utiliser le 'box model hack' qui a lui aussi recours à des commentaires!

Haut retour au début de la page

2004.02.02 @ 20:06 par YoGi

Ahh, ça fait plaisir de voir des personnes apprécier les commentaires conditionnels à leur juste valeur ! (bouh, Jean-marc, bouh !)

Dans tous les cas, on est tous d'accord ; les hacks, moins on en a, mieux on se porte. Maintenant, quitte à devoir 'hacker' (sigh) pour IE, à choisir, je préfère le faire avec des commentaires conditionnels plutôt qu'avec les CSS Hacks que l'on connait tous. On y gagne vraiment en lisibilité (et donc en facilité de maintenance). Et quand bien même il y aurait des hacks CSS pour d'autres navigateurs au sein de la feuille de style principale (sait-on jamais, des fans du star seven ? :), cela l'allégerait tout de même considérablement, dans la mesure où IE est très certainement le navigateur pour lequel le besoin de hacker se fait le plus sentir.

Et donc oui, Denis, les commentaires conditionnels seront considérés par les autres navigateurs pour ce qu'ils sont avant tout : des simples commentaires HTML.

Haut retour au début de la page

2004.02.02 @ 20:58 par Emmanuel

Et moi je vote 'contre' !
Je n'ai pas fait la pose-bière et je n'ai pas lu les propos de YoGi et Jean-Marc (pas bon la bière avec le café :-)

Tout ce que je vois dans ces commentaires conditionnels, c'est le fait que Microsoft ne met toujours pas à jour son navigateur et se décharge sur les développeurs de sites. Non non et non ! Ce n'est pas la solution que j'attends de Microsoft. Et pendant qu'on y est, pourquoi pas des commentaires conditionnels pour Opéra ou Firebird ?

Au moins avec les hacks css (@import pour NS4 et modèle de boite pour IE), on reste dans le cadre d'instructions normées. En JavaScript aussi, on reste dans le cadre du langage. Alors qu'ici, les commentaires conditionnels font intervenir une notion supplémentaire totalement différente.

Les commentaires conditionnels sont une solution qui permet d'étouffer les critiques concernant les lacunes d'IE. Utilisons-les et les développeurs de la planète arrêterons se plaindre d'IE. Qui gagne à cela ? Pas nous mais Microsoft. Et les utilisateurs ne verront plus de raison de passer à la concurrence.

Haut retour au début de la page

2004.02.02 @ 22:17 par CYBERcodeur

Je viens de penser à un autre truc qui diminue encore plus la potentialité de duplication des fichiers CSS pour obtenir de subtils différences, comme une taille de fonte similaire sous Mac et PC, ou un positionnement adéquat sous plusieurs plate-formes (les exemples auxquels je faisais référence dans le billet)...

Un avantage appréciable que pourrait représenter les commentaires conditionnels serait d'utiliser une feuille de style adaptée pour MSIE seulement pour supplanter certaines règles inscrites dans la feuille maîtresse, plutôt que de tout reprendre bêtement en bloc. De cette manière, on ne parle même pas de duplication, on parle simplement d'ajustement de certaines règles CSS pour un navigateur.

Par exemple, supposons que dans ma feuille maîtresse, j'aie quelque chose qui ressemble à ceci :

#contenu {position: absolute; top: 25px; left: 10px;}

Dans ma feuille servie à MSIE par commentaires conditionels, je pourrais avoir seulement ceci :

#contenu {left: 9px;}

Du ccoup, tout le problème de la duplication des données est écarté du revers de la main. Il ne nous reste plus qu'un principe de cascades, comme c'est le cas avec une feuille de style spécifiée en @import après qu'une première ait été spécifiée en <link rel='stylesheet'>

Il me semble que ça fait quand même beaucoup de sens.

Haut retour au début de la page

2004.02.02 @ 23:56 par ceam

Merci pour ce billet.

J'ai découvert avec surprise ces commentaires spéciaux dans la page de 'zcat', celui qui à fait une page exploitant la faille IE pour aller télécharger Mozilla 'sur le site de Microsoft' (j'utilise d'ailleurs ce système sur mon site pour inviter les visiteurs IE à télécharger Mozilla).

Maintenant je sais d'où ça vient - j'avais quand même un soupçon pour Microsoft ;-).

Haut retour au début de la page

2004.02.03 @ 03:13 par JMF

Pour clarifier un peu ma position, je tiens à dire que je ne suis pas totalement contre ces commentaires conditionnels. Je voulais simplement contraster le billet de YoGi en apportant une opinion contradictoire.

Je pense, comme Denis, qu'il y a du bon et du moins bon dans tout cela. :)

Haut retour au début de la page

2004.02.03 @ 08:55 par Yan Morin

Pour charger des feuilles de styles que pour IE, on peut toujours compter sur ses faiblesses avec les sélecteurs CSS. Meilleur exemple que j'ai trouvé:
http://www.csszengarden.c...

Haut retour au début de la page

Les commentaires et trackbacks sont désormais fermés. Pour toute remarque, vous pouvez toujours nous contacter.

Pisteur (Trackback)

Carnet: Vers des « hacks standardisés »
Extrait: ...
Weblog: Genezys : humeurs d'un codeur
Traqué le: 2004.02.02 @ 20:51