TODO: multicolumn est bien supporté maintenant TODO: parler de span pour grid pour les L1 ?
Arrivée de l'iPhone, puis des autres smartphones, puis des tablettes : les sites web doivent s'adapter à de multiples tailles d'écran
En parallèle, taille et définition des écrans d'ordinateur augmente
Il n'est plus pertinent de proposer une « version mobile » et une « version desktop » de son site web…
un seul site, qui doit s'adapter à toutes les possibilités
@media (max-width: 800px) { p { background: black; color: yellow; } }
@media
contient des règles CSS !Les propriétés sont de la forme critère: valeur
color
, color-index
, monochrome
device-height
, device-width
, device-aspect-ratio
, resolution
height
, width
, orientation
, aspect-ratio
La plupart des critères peuvent prendre les opérateurs
min-
et max-
Par exemple, min-width: 400px
signifie « largeur supérieure à 400px »
(autrement dit, la largeur minimale pour laquelle la propriété s'applique est 400px)
En pratique, on ne va quasiment utiliser que max-width
et min-width
Si on met des media queries un peu partout dans son CSS et dans plusieurs sens (max/min), impossible de s'y retrouver !
On va plutôt avoir un CSS de base, modifié ensuite avec des requêtes média — si possible dans une seule direction
Soit on part de la version mobile et on fait des modifications pour des largeurs de plus en plus grandes, soit l'inverse
/* version par défaut: sur grand écran */
.menu { width: 30em; /* etc. */ }
/* écran plus petit: on passe le menu en horizontal */
@media (max-width: 100em) {
.menu { width: 100%; }
.menu li { display: inline-block; }
/* etc. */
}
/* écran encore plus petit: on cache le menu */
@media (max-width: 50em) {
.menu { display: none; }
}
Remarque : on peut aussi utiliser les media queries dans l'attribut media
de l'élément link
, pour choisir quelle feuille de style charger
<link rel="stylesheet" media="print" href="print.css" />
<link rel="stylesheet" media="screen" href="all_screens.css" />
<link rel="stylesheet" media="screen and (max-width: 600px)"
href="small_screens.css"
/>
meta
:
<meta name="viewport" content="initial-scale=1" />
<meta name="viewport" content="maximum-scale=1.0, minimum-scale=1.0" />Très déconseillé (sauf si vous savez ce que vous faites) : la possibilité de zoomer est indispensable pour l'accessibilité !
@viewport
en CSS a été abandonné (pb de performances pour le chargement des images)pt
: point, utilisé pour les médias destinés à l'impressionin
: pouce (2,54cm, 1/72in = 1pt)px
: pixel = 1/96 in (un pixel CSS peut recouvrir plusieurs pixels de l'écran)mm
, cm
em
: taille dépendant de la police de caractères.%
: relatif au bloc parent (par ex. taille de la police du bloc parent, largeur du bloc parent)rem
, correspond à la valeur font-size
de l'élément racinevw
: 1% de la largeur courante de la fenêtre (viewport width)vh
: 1% de la hauteur courante de la fenêtre (viewport height)vw
vaut 12 pixelsvw
et des vh
partout à la place des px
ou des em