Au cours du dernier mois j'ai utilisé plusieurs types d'écrans pour visiter des pages webs:
Pour ma seule utilisation, les concepteurs des sites que je dois utiliser quotidiennement pour le travail ou pour mes loisirs devraient déjà prendre en considération 7 formats d'affichage différents.
Mauvaise nouvelle : la plupart ne le font pas. Le résultat ?
Fort heureusement, en bon étudiants modernes ravis de combler cette lacune, vous voilà avide de trouver une solution à ce problème intolérable !
Spoiler : la solution n'est pas de dire ”mon site n'est consultable que sur un écran de 27 pouces, va t'en acheter un.“
Deux mots : media queries.
Les media queries ont été introduite par CSS3 et permettent de définir un ensemble de règles de style en fonction de la résolution de l'appareil.
En effet, pour rappel, le CSS est interprété par le navigateur, qui est un logiciel s'exécutant sur une machine cliente. Au moment de l'interprétation effective des règles CSS que vous concevez, la résolution de l'écran qui en affiche le résultat est fixée.
Dans la pratique, il s'agit d'ajouter une condition à un ensemble de règles CSS. Celles-ci ne seront alors prises en compte que si ces conditions sont respectées. Cela vous permet de changer l'apparence de votre site pour vous adapter au support :
Toutefois ces conditions ne portent pas seulement sur la résolution de l'écran, mais peuvent également interroger d'autres critères matériels comme le type d'écran (smartphone, télévision, projecteur…), le nombre de couleurs disponibles, l'orientation de l'écran (portrait ou paysage), etc.
Il y a globalement deux façons d'utiliser les media queries:
Nous allons voir un peu mieux ces deux méthodes puis nous détaillerons leur syntaxe.
Il suffit de préciser la condition dans la balise d'inclusion du CSS au sein de l'HTML. La balise <link> dispose en effet d'un attribut “media” qui peut prendre une media query comme valeur, incluant une condition sur le type d'écran et la résolution par exemple. L'exemple minimal :
<link rel="stylesheet" media="screen and (max-width: 1024px)" href="minipouce.css" />
Il est donc possible de jouer avec les priorités de chargement des fichiers CSS pour avoir un fichier de style par défaut et un style retravaillé pour certains écrans plus petits.
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="style.css" /> <!-- Pour tout le monde --> <link rel="stylesheet" media="screen and (max-width: 1024px)" href="minipouce.css" /> <!-- Pour ceux qui ont une résolution inférieure à 1280px --> <title>Media queries</title> </head> ...
L'autre solution est de préciser directement dans votre feuille de style quelles règles sont spécifique à l'adaptation.
L'exemple suivant cible les écrans de largeur inférieure à 640 pixels grâce à la règle max-width associée à la valeur 640px.
@media screen and (max-width: 640px) { .bloc { display:block; clear:both; } }
Pour d'autres exemples au besoin : Un ici, quelques uns là, et pourquoi pas ?
A Faire :
Ces conditions sont des expressions booléennes, elles tolèrent donc l'usage des opérateur et (and), non (not) et seulement (only). Pour obtenir l'équivalent du “ou”, il suffit d'énumérer différentes media queries à la suite, séparées par des virgules : si l'une d'entre elles est valable, alors l'ensemble de la règle sera appliquée.
Il existe de nombreuses règles permettant de construire des media queries et qui peuvent être composable. Voici quelques exemples :
A Faire :
Afin d'optimiser l'affichage sur les plus petits écrans, les navigateurs mobiles utilisent un affichage dézoomé qui simule une meilleure résolution.
Cela s'appelle le viewport.
Une media query qui cible le support mobile avec un max-width
sur un mobile va donc utiliser la longueur du viewport.
Or, celle-ci est inhérente au navigateur lui-même ! Puisque chacun implémente cette simulation par zoom à sa façon.
Quelques exemples :
Ainsi, un Android se comporte comme si la fenêtre faisait 800px de large, tandis que l'utilisateur de Windows phone voit son CSS considérer qu'il en a 1024!
Simple palliatif : max-device-width
qui demande la largeur du périphérique (du support) et non du navigateur (le logiciel).
A Faire :
Une bonne idée est de limiter les menus latéraux sur les petits écrans verticaux voir d'éliminer les menus qui défilent avec le scroll. Cela nécessite de restructurer sa page.
A Faire :
Je dois savoir :
max-device-width
.