Règle CSS @media
Utilisez la règle @media pour appliquer des styles selon des media queries. Apprenez à l'utiliser grâce à des exemples pratiques.
La règle at-rule @media applique un bloc de styles uniquement lorsqu'une media query est évaluée à vrai — par exemple, uniquement sur des écrans plus étroits qu'un téléphone, ou uniquement lorsqu'un document est imprimé. C'est le fondement du design web responsive : une seule feuille de style qui s'adapte aux ordinateurs de bureau, aux laptops, aux tablettes et aux téléphones mobiles, au lieu de livrer un site distinct pour chaque appareil.
Cette page couvre la syntaxe de @media, les types de médias et les fonctionnalités de médias disponibles, comment combiner des conditions avec des opérateurs logiques, et des exemples interactifs que vous pouvez redimensionner pour observer l'effet.
Comment une media query est construite
Une media query comporte deux parties :
- Un type de média optionnel —
all,print,screen, ouspeech— qui cible une catégorie de périphérique. - Une ou plusieurs fonctionnalités de médias entre parenthèses, comme
(min-width: 768px), qui testent une condition telle que lawidthdu viewport, saheight, l'orientation ou la résolution.
Si le type de média correspond à l'appareil actuel et que chaque fonctionnalité est évaluée à vrai, les styles à l'intérieur du bloc s'appliquent. Une fonctionnalité de média ressemble à une propriété CSS (name: value), mais elle teste une condition plutôt que de styliser un élément directement.
Quand utiliser ceci ? Dès que vous souhaitez que la mise en page, l'espacement ou la visibilité changent selon l'appareil — empiler des colonnes sur les téléphones, masquer une barre latérale sur les petits écrans, ou supprimer les couleurs d'arrière-plan lors de l'impression d'une page.
En JavaScript, l'interface CSSMediaRule représente une règle @media individuelle et peut être utilisée pour lire ou modifier des règles créées avec @media.
Syntaxe
CSS @media
@media <media-query> {
/* styles */
}Les media queries peuvent combiner plusieurs conditions en utilisant des opérateurs logiques : and, not, only, et une virgule (,).
Exemple de la règle @media :
CSS @media code example
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
body {
background-color: #1c87c9;
}
@media screen and (max-width: 411px) {
body {
background-color: #cce5ff;
}
}
@media screen and (min-width: 768px) {
body {
background-color: #eee;
}
}
@media screen and (max-width: 962px) and (min-width: 450px),
(min-width: 1366px) {
body {
background-color: #333;
}
}
</style>
</head>
<body>
<h2>@media rule example</h2>
<p>Resize the browser to see the effect.</p>
<p>The background color changes based on the viewport width: light blue for screens up to 411px, light gray for 768px and wider, and dark gray for screens between 450px and 962px, or 1366px and wider.</p>
</body>
</html>Résultat
Dans l'exemple suivant, lorsque la largeur du navigateur est comprise entre 500 et 800 px ou au-dessus de 1000 px, l'apparence du <div> change. Redimensionnez la fenêtre du navigateur pour voir l'effet.
Exemple de la règle @media avec un changement d'apparence de <div> :
CSS @media multiple queries example
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
body {
background-color: #1c87c9;
}
@media screen and (min-width: 200px) {
body {
background-color: #8ebf42;
}
}
@media screen and (min-width: 600px) {
body {
background-color: #ccc;
}
}
@media screen and (max-width: 800px) and (min-width: 500px),
(min-width: 1000px) {
div.box {
font-size: 50px;
padding: 50px;
border: 8px solid #000;
background: #eee;
}
}
</style>
</head>
<body>
<h2>@media rule example</h2>
<p>Media queries set the background-color to grey if the viewport is 600 pixels wide or wider, to green if the viewport is between 200 and 599 pixels wide. If the viewport is smaller than 200 pixels, the background-color is blue.</p>
<h3>Change the appearance of DIV on different screen sizes</h3>
<div class="box">DIV</div>
</body>
</html>Combiner des conditions avec des opérateurs logiques
Les media queries peuvent enchaîner plusieurs conditions :
and— toutes les conditions doivent être vraies :@media screen and (min-width: 768px).,(virgule) — agit commeor; les styles s'appliquent si n'importe quelle requête séparée par une virgule correspond :@media (max-width: 600px), (min-width: 1200px).not— nie une requête entière :@media not all and (monochrome).only— masque la requête aux très anciens navigateurs qui ne comprennent pas les fonctionnalités de médias ; cela n'a aucun effet dans les navigateurs modernes mais son inclusion est sans danger.
Types de médias
| Valeur | Description |
|---|---|
| all | Cette valeur est utilisée pour tous les appareils. C'est la valeur par défaut de cette propriété. |
| Utilisé pour les imprimantes. | |
| screen | Utilisé pour les écrans d'ordinateur couleur. |
| speech | Utilisé pour les haut-parleurs. |
Exemple d'utilisation de media pour masquer un élément sur les très petits appareils :
CSS @media Rule
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<style>
@media (max-width: 767px) {
.hide-mobile {
display: none;
}
}
</style>
</head>
<body>
<h1>Hi</h1>
<p>There is some text for example.</p>
<p class="hide-mobile">This text will be hidden on large devices.</p>
<p>There is some text for example.</p>
</body>
</html>Exemple d'utilisation de media pour changer la couleur d'arrière-plan du contenu selon les appareils.
CSS @media Rule
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
@media screen and (max-width: 767px) {
.content {
background-color: lightblue;
padding: 30px;
}
}
@media screen and (min-width: 768px) {
.content {
background-color: pink;
padding: 10px;
}
}
@media screen and (min-width: 800px) {
.content {
background-color: lightgreen;
color: white;
padding: 50px;
}
}
</style>
</head>
<body>
<div class="content">
<h2>Resize the browser to see the effect.</h2>
<p>
CSS is a rule-based language, which means that you define
rules specifying groups of styles applying to particular
elements or groups of elements on the web page.
</p>
</div>
</body>
</html>Fonctionnalités de médias
Les fonctionnalités de médias testent une caractéristique spécifique de l'appareil ou du viewport. Les plus courantes dans le design responsive quotidien sont les fonctionnalités basées sur la width — min-width et max-width — mais la liste complète ci-dessous couvre tout, de l'orientation de l'appareil à la profondeur des couleurs et au mécanisme de saisie. Les fonctionnalités de plage (width, height, aspect-ratio, color, resolution, monochrome) acceptent également les préfixes min- et max-.
| Valeur | Description |
|---|---|
| width | La largeur du viewport. |
| height | La hauteur du viewport. |
| orientation | L'orientation du viewport. |
| aspect-ratio | Le rapport entre la valeur de la fonctionnalité de média "width" et la valeur de la fonctionnalité de média "height". |
| grid | Interroge si le périphérique de sortie est de type grille ou bitmap. |
| color | Le nombre de bits par composante de couleur du périphérique de sortie. Si le périphérique n'est pas en couleur, la valeur est 0. |
| color-gamut | La gamme approximative de couleurs supportée par l'agent utilisateur et le périphérique de sortie. |
| inverted-colors | Interroge si le navigateur ou le système d'exploitation sous-jacent inverse les couleurs ou non. |
| hover | Interroge si le mécanisme de saisie principal permet à l'utilisateur de survoler des éléments ou non. |
| any-hover | Interroge si le mécanisme de saisie disponible permet à l'utilisateur de survoler des éléments ou non. |
| any-pointer | Interroge si le mécanisme de saisie disponible est un dispositif de pointage ou non. |
| light-level | Le niveau de luminosité de l'environnement. |
| max-aspect-ratio | Le rapport maximal entre la largeur et la hauteur de la zone d'affichage. |
| max-color | Le nombre maximum de bits par composante de couleur pour le périphérique de sortie. |
| max-height | La hauteur maximale de la zone d'affichage. |
| max-monochrome | Le nombre maximum de bits par couleur sur un périphérique monochrome. |
| max-resolution | La résolution maximale du périphérique. |
| max-width | La largeur maximale de la zone d'affichage. |
| min-aspect-ratio | Le rapport minimal entre la largeur et la hauteur de la zone d'affichage. |
| min-color | Le nombre minimum de bits par composante de couleur pour le périphérique de sortie. |
| min-height | La hauteur minimale de la zone d'affichage. |
| min-monochrome | Le nombre minimum de bits par couleur sur un périphérique monochrome. |
| min-resolution | La résolution minimale du périphérique. |
| min-width | La largeur minimale de la zone d'affichage. |
| overflow-block | Interroge comment le périphérique de sortie gère le contenu qui déborde du viewport sur l'axe de bloc. |
| overflow-inline | Interroge si le contenu qui déborde du viewport sur l'axe en ligne peut être défilé ou non. |
| pointer | Interroge si le mécanisme de saisie principal est un dispositif de pointage ou non. |
| resolution | Décrit la résolution du périphérique de sortie. |
| scripting | Interroge si les scripts sont disponibles ou non. |
| update | Interroge à quelle vitesse le périphérique de sortie peut modifier l'apparence du contenu. |