La Poste, Orange, SFR et Voila ont la particularité d’être basé sur une même plate-forme de webmail, développée par Atos Wordline. C’est plutôt pratique, sauf que ça signifie qu’ils partagent aussi les mêmes bugs de cette plate-forme. Et en l’occurrence certains plutôt rigolos.
La plupart des webmails qui ne suppriment pas les balises <style>
préfixent les règles CSS afin d’éviter tout conflit avec le reste de la page. C’est le cas de ces quatre webmails, qui préfixeront systématiquement les règles CSS par #message
. Donc si vous écrivez une règle .toto
, elle sera transformée en #message .toto
.
Jusque là, c’est plutôt simple. Mais ça se complique quand on commence à utiliser des media queries. Dans une media query, le préfixe #message
est toujours appliqué, sauf pour la première règle contenue à l’intérieur de cette media query. Ainsi l’exemple suivant…
.toto { background:red; }
.tutu { background:blue; }
@media only screen and (max-width:600px) {
.toto { background:white; }
.tutu { background:black; }
}
… sera transformé en…
#message .toto { background:red; }
#message .tutu { background:blue; }
@media only screen and (max-width:600px) {
.toto { background:white; }
#message .tutu { background:black; }
}
Cela signifie que la première règle .toto
à l’intérieure de cette media query ne sera jamais interprétée, car elle est moins spécifique que la règle préfixée par #message
au dessus. Pour palier à ça, il est alors impératif d’utiliser une règle !important
à la fin de la première règle surchargée dans une media query. Dans l’exemple précédent, ça donnerait :
.toto { background:red; }
.tutu { background:blue; }
@media only screen and (max-width:600px) {
.toto { background:white !important; }
.tutu { background:black; }
}
Là où ça devient rigolo, c’est quand on teste ça sur mobile. Parmi ces quatre webmails, La Poste est le seul à bénéficier d’une version optimisée pour mobile. Le comportement décrit précédemment est sensiblement le même, sauf que c’est une classe comportant un identifiant dynamique qui est utilisée, par exemple .wrapper_h8ufTw
, au lieu de l’identifiant #message
. Mais la particularité qui prête à sourire, c’est qu’à l’intérieure d’une media query, la dernière ligne correspondant à l’accolade de fermeture de cette media query est également préfixée. Dans des navigateurs modernes, ça n’a pas d’incidence sur le bon fonctionnement des règles. Mais ça donne le joli code transformé par le webmail suivant :
.wrapper_h8ufTw .toto { background:red; }
.wrapper_h8ufTw .tutu { background:blue; }
@media only screen and (max-width:600px) {
.toto { background:white !important; }
.wrapper_h8ufTw .tutu { background:black; }
.wrapper_h8ufTw }