Les media queries sur le webmail mobile de La Poste
Sur la version mobile du webmail de La Poste, il y a un bug important dans leur analyse des styles, et plus particulièrement des media queries. Peu importe le contenu de votre balise <style>
, la première media query sera toujours supprimée. Et pire, les règles à l’intérieur de cette media query seront conservées, sauf la première qui elle sera totalement ignorée.
Concrètement, cela signifie que le code suivant…
.toto { background:red; }
.tutu { background:blue; }
@media only screen and (max-width:600px) {
.toto { background:white; }
.tutu { background:black; }
}
@media only screen and (min-width:320px) {
.toto { color:white; }
.tutu { color:black; }
}
… sera transformé par le webmail mobile de La Poste en :
.wrapper_h8ufTw .toto { background:red; }
.wrapper_h8ufTw .tutu { background:blue; }
.wrapper_h8ufTw .tutu { background:black; }
.wrapper_h8ufTw }
@media only screen and (min-width:320px) {
.toto { color:white; }
.wrapper_h8ufTw .tutu { color:black; }
.wrapper_h8ufTw }
Cela peut s’avérer très problématique, car on se retrouve avec des règles appliquées par défaut alors qu’elles devaient l’être uniquement dans une media query. (Vous apprécierez au passage le préfixage buggé évoqué précédemment.)
Pour éviter cela, on peut insérer une première media query, en prenant le soin d’ajouter quand même à l’intérieur une règle (sinon la media query sera ignorée, et le bug quand même présent). Attention, comme ce bug est bien spécifique au webmail de La Poste, cela signifie que cette media query sera interprétée par d’autres applications ou webmails. Il est donc impératif d’ajouter un code bidon qui n’aura pas d’impact sur les autres. On peut par exemple cibler un max-width:0
.
En reprenant le code de l’exemple initial, on obtient alors le code suivant :
.toto { background:red; }
.tutu { background:blue; }
@media only screen and (max-width:0) {
body { margin:0; }
}
@media only screen and (max-width:600px) {
.toto { background:white; }
.tutu { background:black; }
}
@media only screen and (min-width:320px) {
.toto { color:white; }
.tutu { color:black; }
}
Le code final transformé par La Poste sera alors :
.wrapper_h8ufTw .toto { background:red; }
.wrapper_h8ufTw .tutu { background:blue; }
@media only screen and (max-width:600px) {
.toto { background:white; }
.wrapper_h8ufTw .tutu { background:black; }
.wrapper_h8ufTw }
@media only screen and (min-width:320px) {
.toto { color:white; }
.wrapper_h8ufTw .tutu { color:black; }
.wrapper_h8ufTw }