Préfixes, le pavé dans la mare

WebKit est un moteur de rendu libre et ouvert initialement lancé par Apple en 2003 et composé actuellement de nombreux développeurs de Google. Adobe participe aussi activement à Webkit car c’est le moteur de rendu utilisé dans toute leur suite.

L’ogre WebKit

Il est le coeur de très nombreux navigateurs de bureau (Chrome, Safari, Konqueror) mais aussi sur mobile (Safari mobile, Android, etc.).

En quelques années, il s’est imposé comme un acteur majeur du Web.

Plus important encore : Webkit va plus vite, plus haut et plus fort que les autres. Et ça excite les webdesigners.

Les préfixes vendeurs CSS

Les composants de CSS3 étant pour la plupart en cours d’élaboration à des stades divers, le souci de l’implémentation dans les navigateurs web devient problématique. En effet, si chaque
module est susceptible d’évoluer, voire de changer, dans les mois ou années à venir, il est totalement contre-productif pour un navigateur de tenter d’adapter au jour le jour son traitement de toutes les propriétés fluctuantes.

Que faire alors ? Patienter jusqu’à l’aboutissement de chacun des modules ou modifier ses algorithmes à chaque modification des spécifications d’une propriété ?

Le Consortium W3C propose depuis CSS 2.1 une alternative qui a le mérite de ne pas bloquer l’évolution des agents utilisateurs : à partir des informations dispensées dans les spécifications, chaque navigateur a carte blanche pour construire ses propriétés personnelles dérivées en les faisant précéder d’un préfixe vendeur propriétaire. Lorsque la spécification atteint le stade de Recommandation Candidate (CR), le préfixe doit être supprimé.

Ainsi, Mozilla Firefox a pu développer sa propre variante -moz-border-radius pour permettre
d’utiliser la célèbre propriété border-radius (définissant l’arrondi des coins d’un bloc), très
récemment finalisée dans la norme CSS 3. L’avantage est que l’un et l’autre isotope de la propriété ont leur propre vie et peuvent être développés indépendamment, voire se distinguer…
jusqu’au jour de la reconnaissance officielle de border-radius par le W3C, auquel cas sa copie
propriétaire n’a plus de raison d’exister.

Les spécifications recensent une douzaine de préfixes propriétaires (appelés aussi préfixes vendeurs) dont les plus fréquemment rencontrés sont attribués aux navigateurs web principaux, à savoir :

  • -moz- pour le moteur de rendu Gecko de Mozilla Firefox ou Thunderbird ;
  • -ms- pour Microsoft Internet Explorer
  • -o- pour Opera ;
  • -webkit- pour les moteurs WebKit de Safari et Chrome par exemple ;
  • -khtml- pour les moteurs KHTML (par exemple Linux KDE).

Cette convention évite les collisions de noms entre les fonctions standards et propriétaires, sans entraver les progrès des constructeurs de navigateurs. Toutefois, dans la pratique, cela contraint les auteurs à multiplier les écritures de déclarations de propriétés pour parvenir à un accord sur tous les navigateurs.

Opera annonce qu’il va supporter le préfixe -webkit-

Nous parvenons enfin au coeur du feuilleton : Opera a annoncé aujourd’hui qu’il allait implémenter très prochainement le préfixe -webkit- initialement …réservé“ au moteur de rendu du même nom (sur son navigateur Opera Mobile dans un premier temps, puis sur l’ensemble de ses services).

L’explication est simple : WebKit est devenu l’unique référence pour de nombreux concepteurs web, qui ne prennent plus la peine d’ajouter les préfixes des autres navigateurs.

Pire, ils se contentent parfois de cette seule syntaxe, en occultant la syntaxe officielle finalisée sans préfixe.

L’expérience utilisateur s’en voit bien entendu dégradée sur un grand nombre de navigateurs, qui pourtant sont capables de reconnaître ces fonctionnalités CSS3.

Même dans le marché grandissant du Web mobile, où Opera est très représenté en terme d’usage,… tout le monde développe spécifiquement pour Android ou iOS, et le préfixe -webkit- est roi incontesté.

Opera a donc opté pour une solution radicale : supporter les propriétés préfixées par -webkit-. Cette décision a bien entendu levé un vent de panique dans notre microcosme.

Dans la pratique, Opera ne va pas implémenter les propriétés en triple exemplaire (-webkit-, -o- et sans préfixes) : seules certaines propriétés préfixées seront reconnues, et considérées exactement comme s’il s’agissaient de propriétés préfixées par -o- (un peu comme un alias).

En outre, cela ne concernera évidemment que les fonctionnalités déjà supportées par Opera.

Concrètement ?

En fait le principe est assez simple, le voici illustré par un exemple fictif :

  • Chrome et Opera supportent tous les deux la propriété transition (CSS3 actuellement en working draft)
  • Chrome (sous Webkit) la supporte avec le préfixe_ -webkit-transition_
  • Opera (sous Presto) la supporte aussi, mais avec le préfixe -o-transition

Malheureusement, très (trop) peu de webdesigners se contraignent à ajouter tous les préfixes et se contentent souvent de -webkit-.

Au final, il n’y aura pas de transitions sur Opera, bien que ce navigateur les supporte très bien.

La solution de repli d’Opera est d’interpréter les préfixes -webkit- et de les appliquer quand-même à condition qu’il reconnaisse la propriété concernée. Du coup, les transitions fonctionneront sur Opera… même en se contentant d’un -webkit-transition.

Hey mais les autres s’y mettent aussi ?!

Pour bien se rendre compte que le phénomène est loin d’être anodin, une réunion de discussion autour de ce thème est prévue prochainement.

Il y sera question de l’adoption du préfixe -webkit- par Mozilla Firefox ainsi que d’Internet Explorer, qui semblent très sérieusement envisager cette éventualité.

Ça va changer quoi concrètement ?

Pas mal de choses.

Pour commencer, c’est un aveu de plusieurs dysfonctionnements (notamment du W3C et de sa lenteur), et aveu de faiblesse devant l’ogre WebKit : soit on s’allie, soit on meurt.

Sinon, plus prosaïquement :

  • Les concepteurs web auront encore moins besoin de se soucier des navigateurs tels qu’Opera, Firefox ou Internet Explorer
  • La maintenance de sites web en production sera facilitée : inutile de devoir reprendre tous ses sites pour y ajouter des préfixes -o-,-moz- et -ms- dès que les mises à jour des navigateurs reconnaîtront une nouvelle fonctionnalité CSS3

Bref, la nouvelle guerre des navigateurs commence maintenant, attachez vos ceintures !