La jungle des préfixes
Il n’y a pas si longtemps, IE 6 était le navigateur dominant sur Internet. Techniquement parlant, le Web était plein de sites « optimisés-pour-IE6 ». Pour ce qui était des autres navigateurs… leurs utilisateurs n’avaient que leurs beaux yeux pour pleurer. IE 6 est mort à présent, cette époque est révolue, et tous les fabricants de navigateurs, y compris Microsoft, sont revenus dans le giron de la standardisation. Définitivement révolue, cette époque ? Pas vraiment… IE 6 a disparu, mais le problème est de retour.
WebKit, le moteur de rendu au cœur de Safari et de Chrome, installé dans les iPhones, iPads et les périphériques Android, est maintenant le navigateur ultra-dominant dans le Web mobile et techniquement, le Web mobile comporte de nombreux sites ne-fonctionnant-qu’avec-WebKit… Du coup, les autres navigateurs et leurs utilisateurs n’ont à nouveau que leurs yeux pour pleurer. De nombreux sites détectent l’Agent Utilisateur des navigateurs et filtrent les navigateurs non-WebKit. Tout comme par le passé avec IE 6, ce n’est pas une question d’innovation mais de monopole du marché par le matériel et les logiciels fournis avec celui-ci. Il y a cependant un aspect du problème que nous n’avions pas lors de l’ère IE 6 : ces sites Web sont également spécifiques à WebKit parce qu’ils utilisent des propriétés CSS expérimentales exclusivement préfixées par -webkit-* et sans utiliser leurs équivalents Mozilla, Microsoft ou Opera. Ainsi, même sans aucune détection du navigateur, ces sites Web apparaitront toujours cassés aux navigateurs ne reposant pas sur WebKit…
Dans beaucoup, voire dans la plupart des cas, les propriétés -webkit-* que ces sites spécifiques utilisent ont des équivalents -moz-*, -ms-* ou -o-*. Les dégradés, les transformations, les transitions, les animations, les coins arrondis sont tous et toutes suffisamment interopérables pour de pas dépendre du navigateur. Les créateurs de sites Web n’ont besoin que de quelques minutes pour rendre leurs sites compatibles avec Mozilla, Microsoft ou Opéra. Mais ils ne l’ont jamais fait.
Sans votre aide, sans une réaction forte, il n’y aura qu’une issue, dont nous sommes dangereusement proches : les autres navigateurs vont commencer à prendre en charge / implémenter eux-même le préfixe -webkit-*, en transformant une implémentation unique en un nouveau standard mondial. Cela transformera une part de marché en un standard de facto, une seule implémentation en un monopole mondial. À nouveau. Ça tuera notre processus de standardisation. La question n’est pas de savoir si ça va arriver, mais quand.
Laissez-moi être très clair : ce n’est PAS une situation hypothétique et je ne parle pas ici de quelque chose qui pourrait arriver. Tous les fabricants de navigateurs nous ont officiellement fait savoir que cela arrivera bien plus rapidement qu’on ne pourrait le croire parce qu’ils n’ont, je cite, « pas d’autre option ». Clarifions un autre point : ce n’est PAS un manque d’innovation de la part de ces fabricants de navigateurs, d’autant plus qu’ils supportent BIEN une propriété mais avec leur propre préfixe, suivant ainsi les règles du groupe de travail. Les préfixes constructeur n’ont pas échoué. Ils ne sont pas parfaits, mais ils préservent du chaos les auteurs de sites Web. Nous pouvons certainement les améliorer mais nous le pouvons uniquement si les préfixes constructeur restent des préfixes propres à chaque constructeur.
Cette situation s’est produite dans le passé avec IE 6, quand les navigateurs fonctionnaient uniquement sur les ordinateurs de bureau, et il a fallu dix longues années pour en sortir. Avec les milliards de navigateurs mobiles d’aujourd’hui, le Web pourrait ne jamais s’en remettre.
Daniel Glazman : “Le web ouvert à besoin de vous maintenant” (traduction OpenWebGroup).
Le quotidien dans les CSS des sites modernes :
a.button, a.button:hover {
-webkit-transition-property: background color;
-webkit-transition-duration: 2.5s;
-webkit-transition-timing-function: ease;
-moz-transition-property: background color;
-moz-transition-duration: 2.5s;
-moz-transition-timing-function: ease;
-o-transition-property: background color;
-o-transition-duration: 2.5s;
-o-transition-timing-function: ease;
-ms-transition-property: background color;
-ms-transition-duration: 2.5s;
-ms-transition-timing-function: ease;
transition-property: background color;
transition-duration: 2.5s;
transition-timing-function: ease;
}
Daniel Glazman
Et si tu avais à écrire du -webkit-* sur des propriétés aujourd’hui implémentées par eux seulement pour les autres, cela serait pire. Tester son site serait encore plus compliqué… Et comme Apple n’a de toute manière pas sorti de specs sur ses fonctionnalités proprio, ça serait du revere-engineering, et donc des incompatiblités. Et peut-être des actions légales contre ça. Le foutoir.
F’X
En fait, si les solutions techniques standardisées émergaient plus rapidement, les auteurs comme les navigateurs les utiliseraient. Si le standard suivait rapidement les besoins, aucun autre standard de facto n’apparaîtrait. C’est l’évolution :)
Gilles
Je suis noob : y’a pas de joker (*) utilisable en CSS ? Question encore plus bête : les fonctions ont juste le début qui changent donc pourquoi ne pas créer une fonction SANS spécification du navigateur ?
niemand
@Gilles: Originellement, le but des préfixes était (est?) de permettre aux éditeurs de navigateurs de tester la mise en oeuvre d’une propriété avant sa normalisation, chaque éditeur n’ayant pas forcement la même interprétation de la spec, d’un éditeur a l’autre les paramètres d’une propriété peuvent varier, ainsi que son comportement, le but étant de pouvoir avoir un feedback de la part des utilisateurs, avant de valider la norme.
La propriété sans préfixe, est normalement le produit final après accord entre les différents intervenants, et en théorie c’est uniquement elle qui devrait être utilisée en prod.
Un exemple.
Blah ? Touitter !