Au début tout était dans le HTML. Puis le W3C vint, et mis chaque chose à sa place : le HTML pour la structure, le CSS pour la présentation et les Scripts pour les actions.
Mais, alors qu'on en était encore à la première Guerre du Web et alors que le standard CSS1 n'était pas encore finalisé, des petits rigolos ont commencé à créer leurs propres propriétés CSS, que bien évidemment, ils étaient les seuls à implémenter. Par exemple les propriétés CSS zoom
, filter
ou expression
, qui n'appartiennent qu'à MSIE dans l'espoir de les imposer.
C'est dans cette idée que fut proposé les préfixes par développeurs. La première forme implémentée par Microsoft (il faut encore une fois louer leur précipitation :) commençait par mso-
. Gros souci de lisibilité et de risque de collision. Vous imaginez si un navigateur se serait appelé “border” ? C'est afin d'éviter cette ambiguïté et pour faciliter le travail des logiciels d'analyses que ces préfixes doivent commencer par un tiret, comme -moz-
ou -ms-
(voyez sitepoint pour une petite liste). Et bien évidemment, le préfixe dicte quel navigateur est concerné par cette propriété. Les autres l'ignoreront superbement.
L'un des exemples, c'est l'usage des colonnes CSS sur ce blog depuis 2007. Firefox a stabilisé cette propriété depuis la version 2.0 et Safari depuis la 3.0. Problème, l'activation dans les CSS se fait toujours accompagné des préfixes vendeurs, rappelant leur caractère purement expérimentale et non-définitivement normée.
Le problème ne vient pas des autres navigateurs (ils assument plus tard s'ils mettent du temps à le programmer), mais du retard des prises de décision du groupe de travail CSS au W3C. Plusieurs entreprises, associations, organisations, organismes interviennent et les CSS ne servent pas uniquement pour le rendu des sites webs sur les ordinateurs : Les CSS peuvent servir pour les téléphones portables, les décodeurs TV, les synthèses vocales, l'impression de documents, etc... C'est cette complexité et cette universalité qui font que toute décision doit être soigneusement discutée. Un autre problème vient aussi du fait que le standard CSS n'est pas validée par propriétés, mais par versions. Deux fronts sont menés à la fois au sein du CSS-WG : les versions 2.1 et 3.0 du standard.
C'est pour ça que nombre de propriétés sont parfaitement implémentées par tous les grands navigateurs (je parle des versions modernes, hein...), mais que leur écriture dans les CSS restent condamnées depuis 5 ans au purgatoire de ces infâmants préfixes expérimentaux.
Pour une durée de peine indéterminée...
Où l'on cherche qui joindre à ce sujet
Arrivé à ce point, il faut que je vous parle de Daniel Glazman. Ce mec est un dieu vivant vénéré par des hordes de mozillistes dont moi. Fondateur de Disruptive Innovations, on lui doit l'un des premiers éditeurs Wysiwyg de qualité en rendus standards (N|vu), d'une extension Firefox qui permet d'enregistrer sur sa Freebox en restant au bureau et un parseur de CSS en Javacript (JSCSS). Il est actuellement co-chairman du groupe de travail sur les CSS au W3C.
Daniel Glazman a un site web dont l'accueil est tout aussi austère qu'il est lui-même doué.
Or, c'est justement en écrivant son projet JSCSS qu'il jurait de plus en plus sur les préfixes vendeurs des CSS. Au point d'avoir lancé un sondage.
Ouais, parce que c'est bien beau, mais on s'y perd un peu
Disons que vous voulez mettre en place une propriété qui est en cours de discussion au sein du CSS-WG, mais déjà appliquée par certains navigateurs. Et vous avez pas envie de rater la marée parce qu'elle est vraiment trop belle. Par exemple, la propriété box-shadow
. Voici comment la plupart des web-(designer|développeur|intégrateur)s vont l'appliquer dans leur CSS :
-moz-box-shadow: #f00 0 0px 2px;
-webkit-box-shadow: #f00 0 0px 2px;
Et là, vous voyez immédiatement qu'il y a un problème puisqu'on a inconsciemment oublié au moins deux navigateurs phares : Opera et MSIE (si! si! l'espoir fait vivre). En fait, il aurait fallut écrire :
-moz-box-shadow: #f00 0 0px 2px;
-webkit-box-shadow: #f00 0 0px 2px;
-o-box-shadow: #f00 0 0px 2px;
-ms-box-shadow: #f00 0 0px 2px;
-khtml-box-shadow: #f00 0 0px 2px;
Autre inconvénient, cela fait des lignes de codes démultipliées pour chaque propriété expérimentale dans chaque élément qui l'utilise. Et au moment de l'intégration officielle de la propriété dans le standard CSS, ces lignes seront à remplacer par la propriété officielle puisque les navigateurs auront retiré de leurs parseurs la version avec leur préfixe de test. Car dans 5 ans, vous aurez toutes les chances d'avoir à remplacer le précédent exemple par :
box-shadow: #f00 0 0px 2px;
(Et pour les vieux navigateurs qui tardent à se renouveler, hein... y'en a marre des boulets)
Ici, je souffle timidement une solution
-
De : (moi)
À : Daniel Glazman
Sujet : J'y ai réfléchi à ton problème de préfixes expérimentaux dans les css -
Et oui, finalement ça m'a taraudé : comment le plus avoir la soupe à la grimace dans les css sur les préfixes. [...]
Pourquoi ne pas introduire en alias un préfixe constructeur «
-*-
» (ou sinon utiliser dans le style très unixien «--
» si jamais l'étoile gène) Ça donnerait ceci :
Du coup, on ne supprime pas l'accès aux paramètres expérimentaux de chaque constructeur si chacun fait à sa sauce (genre Apple veut tester le paramètre-*-box-shadow: #f00 0 0px 2px;
-odor-
et ne propose que les parfums fruits, tandis que mozilla propose que les parfums musqués, mais avec les paramètres raccourcis inversés)On allège considérablement nos feuilles de styles. Si MSIE décide de tenter la danse, on est pas obligé de rajouter une ligne spécifique, et on garde toujours la possibilité d'y accéder.
Alors oui, je sais, c'est pas ta problématique. La tienne concerne plus la suppression définitive des préfixes pour alléger le parsing des CSS. Mais au moins, on aurait la paix à moyen terme...
- De : Daniel Glazman
- C'est pas con du tout. Tu devrais poster ça en anglais dans www-style...
- De : Moi
À : www-style@
Sujet : Suggestion for generic CSS vendor prefix -
I wrote this by recommendation from Daniel Glazman. I hope you will excuse my French : this is the first time I do this kind of contribution.
Problem :
Lot of properties are still in the infancy of the validation, other ones are waiting for the definitive approval of the CSS standard 2.1 or 3. So if you want to use an experimental property, each declaration should have the vendor prefix, with all the problems :
-moz-box-shadow: #f00 0 0px 2px; -webkit-box-shadow: #f00 0 0px 2px;
Here, you can see that I completely forgot browsers like MSIE, Opera or Konqueror. A more complete example would be :
-moz-box-shadow: #f00 0 0px 2px; -webkit-box-shadow: #f00 0 0px 2px; -opera-box-shadow: #f00 0 0px 2px; -ms-box-shadow: #f00 0 0px 2px; -khtml-box-shadow: #f00 0 0px 2px;
But if I wish to write my own browser and implement those properties, my browser will always be forgotten wy CSS writers.
The other problems is the bloating of the CSS for every declaration, and stability in the future.Proposal :
Using a wildcard like a star to explain that the experimental property is common to every browser that can understand it :
-*-box-shadow: #f00 0 0px 2px;
If the star is a problem to parse, another suggestion is to prefix with two hyphens, a little bit like an unix parameter :
--box-shadow: #f00 0 0px 2px;
Main advantage is browser neutrality, simplicity in the CSS and portability. And we can still target a kind of browser by its vendor-prefix.
Thank you for reading me.
6 réactions
1 De laurentj - 22/03/2010, 00:24
pour opera, c'est -o- et pas -opera- ;-)
Et puis souci du -*- : la syntaxe d'une propriété n'est pas forcément la même d'un navigateur à un autre, suivant la façon dont c'est implémenté. Ce fut le cas pour la syntaxe avancée de border-radius, totalement différente dans webkit par rapport à la spec et à mozilla. (je ne sais pas si c'est le cas encore aujourd'hui).
2 De Da Scritch - 22/03/2010, 07:52
oups, la preuve que je suis pas franchement un CSS-maker mais plus un dev. je corrige illico
Pour ce qui est de la différence de notation, c'est tout à fait vrai, mais quand y'a un concensus commun, par exemple sur les colonnes et les border, la notation est déjà plus proche de la version définitive.
Bon, j'ai posté ma suggestion depuis 8 heures, confirmé par le code, mais c'est toujours pas en ligne. De toutes façons, il semblerait que quelqu'un m'a “grillé” pendant mon temps de ré-écriture. M'apprendra à tergiverser (et à faire une émission radio).
L'important, c'est que la proposition soit lue et débattue d'ici le meeting du CSS-WG
3 De Da Scritch - 22/03/2010, 15:34
l'excellent Quirksblog vient de publier un article sur le sujet : http://www.quirksmode.org/blog/arch...
4 De Mitch 74 - 29/03/2010, 12:00
Je ne pense pas que '-*-' puisse convenir.
De plus, ça introduit la notion de sélecteur au sein même de la feuille de style, qui quitterait donc son rôle purement passif, et la rendrait donc active puisque auto-modifiable (un truc qui se rapproche fortement des expressions dynamiques de IE 7 et inférieurs, lesquelles ont été désactivés dans IE 8 pour raisons de sécurité).
A la rigueur, quitte à ajouter un caractère de contrôle, autant utiliser un caractère non sujet à méprise (quelle est la différence entre '* a' et '*a' ?) comme '%' - wé, comme en SQL.
Mais, et c'est là que ça devient chouette, il 'suffit' de gérer cette partie du CSS via un truc qui existe déjà depuis un moment: le Javascript.
Tu mets ton border-radius non préfixé dans le CSS. Derrière, dans ton Javascript, tu détectes les navigateurs qui ne supportent pas 'border-radius' tel quel et tu rajoutes 'border-radius' dans sa version préfixée à l'aide de document.styleSheets[0].rules ou document.styleSheets[0].cssrules. Ca te permet aussi de détecter les navigateurs qui ne supportent pas la même syntaxe que celle quasi-finale qu'on connaît maintenant, et d'implémenter celle qu'ils supportent.
Ou pas.
Et donc, ta propriété est supportée dans une feuille ultra light qui fonctionnera le 21 octobre 2015 à Hill Valley, les navigateurs qui en pigent une variante sont couverts aussi, ceux qui font presque pareil, itou, et ça se dégrade gracieusement pour ceux qui ne supportent absolument pas.
5 De da scritch net works - 31/07/2012, 18:14
HTML wars, la vengeance (se venge) !
C'est là que le papy, il arrive, et il vous raconte comment on faisait avant, et pourquoi on en est venu là. On croyait que le feuilleton s'était définitivement arrêté, mais non, voilà que la dramaturgie du soap des normes du web revient en force....
6 De da scritch net works - 30/11/2012, 10:07
2012, fin d'un monde du web ?
Netscape l'avait dit à la fin des années 1990s : « Le navigateur va devenir le nouveau système d'exploitation ». Microsoft l'avait interprété à sa manière, mais maintenant la prophétie est en train de se réaliser... dans le bon sens....