User Tools

Site Tools


2016_2017:s1:webdoc:td6

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
2016_2017:s1:webdoc:td6 [2016/12/05 13:11]
logre created
2016_2017:s1:webdoc:td6 [2016/12/09 09:18] (current)
logre [Et en pratique ?]
Line 26: Line 26:
 Deux mots : //media queries//. Deux mots : //media queries//.
  
-===== Les media queries en CSS3 =====+===== Le principe des media queries en CSS3 =====
  
 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. 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.
Line 32: Line 32:
 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. 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 : 
 +  * augmenter la taille du texte,
 +  * changer la couleur de fond,
 +  * positionner différemment votre menu,
 +  * diminuer la taille des images,
 +  * etc.
 +
 +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.
 +
 +===== Media queries : mode d'​emploi =====
 +
 +Il y a globalement deux façons d'​utiliser les //media queries//:
 +  * en chargeant une feuille de style .css différente en fonction de la règle
 +        * (ex : « Si la résolution est inférieure à 1024px de large, charge le fichier minipouce.css ») ;
 +  * en écrivant la règle directement dans le fichier .css habituel
 +        * (ex : « Si la résolution est inférieure à 600px de large, exécute les propriétés CSS suivantes »).
 +
 +Nous allons voir un peu mieux ces deux méthodes puis nous détaillerons leur syntaxe.
 +
 +===== Méthode 1 : une feuille de style par résolution =====
 +
 +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 :
 +<code html>
 +<link rel="​stylesheet"​ media="​screen and (max-width: 1024px)"​ href="​minipouce.css"​ />
 +</​code>​
 +
 +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. ​
 +
 +<code html>
 +<​!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>​
 +...
 +</​code>​
 +===== Méthode 2 : ajouter une garde à une règle CSS =====
 +
 +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.
 +
 +<code css>
 +@media screen and (max-width: 640px) {
 +  .bloc {
 +    display:​block;​
 +    clear:both;
 +  }
 +}
 +</​code>​
 +
 +Pour d'​autres exemples au besoin : [[https://​course.oc-static.com/​ftp-tutos/​cours/​html-css/​p4/​ch5/​media_query_base/​index.html|Un ici]], [[http://​www.alsacreations.com/​article/​lire/​930-css3-media-queries.html|quelques uns là]], [[http://​dailygeekshow.com/​wp-content/​uploads/​2014/​11/​mouton.jpg|et pourquoi pas ?]]
 +
 +===== Un pas de recul =====
 +
 +<box round rgb(185,​211,​238) 95%|**A Faire** :  >
 +  * Comparez les avantages et les inconvénients des deux méthodes.
 +  * Y a-t-il des cas où l'une est impossible à appliquer ?
 +  * Sont-elles incompatibles ?
 +</​box>​
 +===== Syntaxe =====
 +
 +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 :
 +  * color : gestion de la couleur (en bits/​pixel).
 +  * height : hauteur de la zone d'​affichage (fenêtre).
 +  * width : largeur de la zone d'​affichage (fenêtre).
 +  * device-height : hauteur du périphérique.
 +  * device-width : largeur du périphérique.
 +  * orientation : orientation du périphérique (portrait ou paysage).
 +  * media : type d'​écran de sortie. Quelques-unes des valeurs possibles :
 +      * screen : écran « classique » ;
 +      * handheld : périphérique mobile ;
 +      * print : impression ;
 +      * tv : télévision ;
 +      * projection : projecteur ;
 +      * all : tous les types d'​écran.
 +
 +<note tip>On peut rajouter le préfixe min- ou max- devant la plupart de ces règles. Ainsi, min-width signifie « Largeur minimale », max-height « Hauteur maximale », etc.</​note>​
 +
 +<box round rgb(185,​211,​238) 95%|**A Faire** :  >
 +Ecrire les //media queries// et les règles CSS permettant de cibler :
 +  * les écrans, quand la largeur de la fenêtre fait au maximum 1280px, pour mettre le fond en noir.
 +  * tous types de supports, quand la largeur de la fenêtre est comprise entre 1024px et 1280px, pour mettre le texte en rouge.
 +  * tous types d'​écrans orientés verticalement,​ pour mettre les titres en gras.
 +</​box>​
 +
 +===== Les navigateurs mobiles =====
 +
 +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 :
 +  * **Opera Mobile** 850 pixels
 +  * **iPhone Safari** 980 pixels
 +  * **Android** 800 pixels
 +  * **Windows Phone** 1024 pixels
 +
 +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).
 +
 +
 +<box round rgb(185,​211,​238) 95%|**A Faire** :  >
 +  * Ecrire la //media query// et les règles CSS permettant d'​afficher tous les liens en vert sur mobile et testez.
 +  * Mettez en évidence la différence de viewport avec un même code exécuté sur Android et sur iPhone (ou windows phone si vous en trouvez un)
 +  * Théoriquement,​ quelle autre media query devrait nous éviter ce problème ? Pourquoi ne fonctionne-t-elle pas ?
 +</​box>​
 +
 +
 +===== Et en pratique ? =====
 +
 +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.
 +
 +<box round rgb(185,​211,​238) 95%|**A Faire** :  >
 +  * Concevez ou reprenez une page web disposant d'un menu visible à tout instant et d'une colonne à gauche et à droite présentant respectivement le menu de la page et les partenaires du site.
 +  * Ecrivez le CSS nécessaire à l'​adaptation de cette page à une navigation sur mobile. Testez.
 +  * Quels changements proposez-vous pour une adaptation vers un écran géant 40" ? Implémentez-les dans votre CSS.
 +</​box>​
 +
 +
 +
 +===== Je dois savoir =====
 + 
 +<box round rgb(255,​150,​103) 97%|Je dois savoir :   >
 +  * Les media queries permettent d'​appliquer différents styles CSS en fonction de certaines conditions.
 +  * Il existe de nombreux paramètres booléens à disposition : nombre de couleurs, résolution de l'​écran,​ orientation...
 +  * On utilise a directive @media d'une ou plusieurs conditions, le style CSS qui suit sera appliqué si elles sont remplies.
 +  * Les navigateurs mobiles simulent une largeur d'​écran : on appelle cela le viewport.
 +  * On peut cibler les smartphones grâce à une règle basée sur le nombre réel de pixels affichés à l'​écran : ''​max-device-width''​.
 +</​box>​
  
2016_2017/s1/webdoc/td6.1480939899.txt.gz · Last modified: 2016/12/05 13:11 by logre