Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Dans un passé encore récent un site devait s'afficher seulement sur un écran d'ordinateur de bureau voire sur un écran de PC portable.
Mais dans les deux cas la largeur de l'écran était supérieure à 900 pixels. Et donc le plus souvent la largeur de chaque page du site
était réglée sur 900 pixels.
Mais l'internet mobile c'est à dire la visite de sites à partir de terminaux disposant de petits écrans
(tablettes et smartphone) a connu un développement extraordinaire.
Comment concevoir un site qui s'adapte à la diversité des écrans ?
L'adaptabilité d'un site à tous types d'écrans est appelé le "responsive web design".
Dans ce chapitre je n'aborderai que la solution CSS : les media queries.
Imaginons un site dont chaque page comprend quatre grandes divisions :
Le corps de la page (conteneur SECTION) comprend beaucoup de texte répartis dans sixe petites boites (élément DIV affecté de la classe "boite").
Aperçu de la page dans un iframe :
Sur PC réduisez la largeur de la fenêtre : les boites vertes passent à trois de front puis à deux de front ;
réduisez encore la fenêtre, les boites vertes sont les unes sous les autres.
Par contre les boites à fond bleu occupent toujours toute la largeur de la fenêtre.
Dans la partie HEAD de la page une instruction meta. J'évoquerai son rôle plus loin.
Concernant le code de la partie BODY six éléments div class ='boite' ... dans le conteneur SECTION.
Dans le conteneur STYLE de la partie HEAD.
/* pour tous les écrans */
header, nav,footer {float : left ; width : 100% ;
background : skyblue ; margin-top : 10px;}
.boite {float : left ; background : lime; }
h1,h2 {text-align : center ; line-height : 40px;
font-size : 1.2em; }
p {font-size : 1em ; padding : 5px ; }
/* écran dont largeur inférieure à 480 */
* {font-size :10px;}
section {width : 100%; }
.boite{width : 100%; margin-top : 5px; }
/* écrans qui font au minimum 480 de large */
@media (min-width: 480px)
{
section{width : 100%; }
.boite {width: 100%; }
* {font-size : 12px ; }
}
/* écrans qui font au minimum 800 de large */
@media (min-width: 800px)
{
section {width : 760px ; margin : auto; }
.boite {width : 47%; margin : 5px 1% 5px 1% ; }
* {font-size : 14px ; }
}
/* écrans qui font au minimum 1000 de large */
@media (min-width: 1000px)
{
section {width : 900px; margin : auto;}
.boite {width : 30%; margin : 5px 1% 5px 1%; }
* {font-size : 16px ; }
}
/* écrans qui font au minimum 1200 de large */
@media (min-width: 1200px)
{
section {width : 1100px; margin : auto; }
.boite {width : 22% ; margin : 5px 1% 5px 1%; }
* {font-size : 18px ; }
}
/* écrans qui font au minimum 1400 de large */
@media (min-width: 1400px)
{
section {width : 1300px; margin : auto; }
.boite {width : 14% ; margin : 5px 1% 5px 1%; }
* {font-size : 20px ; }
}
Bien évidemment dans le cadre d'un site (avec de nombreuses pages) la feuille de style serait externe ; avec dans chaque page un lien (link ... ) vers cette feuille de style.
Il y a d'abord toutes les règles indépendantes du type de terminal.
Il y a ensuite les règles relatives aux écrans dont la largeur est inférieure à 480px.
Et enfin des tests par rapport à des "breakpoints" sont effectués sous forme de "media queries".
Les boites header, nav & footer ont toujours pour largeur celle de la fenêtre.
Par contre la largeur de l'élément section est fonction de la largeur du terminal.
Il en est de même pour la largeur des DIV affectés de la classe "boite" et de la taille de référence du texte.
Dans la feuille de style nous trouvons désormais des tests sous forme de requêtes de média ("media queries" en anglais).
Une requête de média commence par "@media" suivi entre parenthèses d'une condition.
Il y a ensuite entre accolades les règles de style qui s'appliquent si la condition est VRAI.
Il y a cinq tests !
A chaque fois on compare la largeur du terminal utilisé par rapport à une valeur en pixels.
Notez bien que les tests sont ici ordonnés par "break points" croissants.
C'est une bonne pratique aujourd’hui de créer son site en version mobile d’abord, puis d’utiliser les requêtes de média pour modifier
la disposition du code pour les écrans d’ordinateurs ou de tablettes.
Aussi dans la suite des tests il faut comparer d'abord aux petites résolutions jusqu'aux grandes en passant pas les résolutions médiums.
Vous avez sans doute remarqué que désormais il y a dans la partie HEAD de chaque page une instruction HTML étrange :
<meta name="viewport" content = "width=device-width, user-scalable=yes" />
Cette instruction est fondamentale dans le cadre du Web mobile !
Les écrans des mobiles sont beaucoup plus étroits que les écrans de PC (seulement quelques centaines de pixels de large). Pour s'adapter, les navigateurs mobiles affichent le site en "dézoomant" ce qui permet d'avoir un aperçu de l'ensemble de la page mais alors c'est tellement écrit petit que c'est illisible !
Cette zone d'affichage simulée est appelée le viewport.
Attention la valeur du viewport ne dépend pas du terminal mais du navigateur mobile installé sur ce terminal.
Ainsi le viewport est compris entre 800 pixels (Android 3) et 980 (Android 4 et Safari).
Prenons un exemple concret. Votre iphone 6 a les dimensions utiles d'écran de 377 par 667 pixels ; le viewport possible est de 980 pixels grâce au navigateur
safari mobile qui est installé.
Mais grâce à l'instruction meta name ="viewport" content= "width=device-width, user-scalable=yes" la largeur effective ne sera plus que
377 pixels ou (667 selon l'orientation).
Autre exemple : le Samsung Galaxy A12 le "device-width" est 360 ou 800 pixels (selon l'orientation).
Pour certaines résolutions on peut imaginer que certains éléments ou boites affectées d'une certaine classe soient masqués.
Exemple :
Sens de cette condition CSS : si la largeur du terminal est inférieure à 601 (écran de smartphone) les éléments ASIDE et les boites affectées de la classe "grandecran" sont masqués !
Pour que les images ne soient jamais rognées sur un petit écran tel celui d'un smartphone il ne faut pas exprimer leur largeur en pixels mais en pourcentage ou en vw : une nouvelle unité de mesure (voir chapitre précédent).
Le CSS :
body {width : 90vw ; margin : 20px auto; border : 1px solid navy ; }
section {width : 70vw; background : skyblue ; margin : 10px auto; }
img.centre {display : block ; width : 50% ; margin : 10px auto; }
img.gauche {display : inline-block ; width : 28%; margin :1% ; vertical-align : top ; }
img.miniature {float : left ; width : 10%; margin : 5px 1% ;
Notez l'emploi de l'unité de mesure vw pour exprimer les largeurs des éléments BODY & SECTION.
Par contre dans les différentes classes spécifiques aux éléments IMG, la largeur est exprimée en % donc de façon relative.
Le code HTML de la partie BODY :
Le rendu :