Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site
Dans un chapitre précédent je vous ai présenté les différents types d'images pouvant être insérés dans une page web : les images matricielles et moins
connues mais promis à un bel avenir, les images vectorielles (le plus souvent au format SVG).
Pour insérer une image (matricielle ou vectorielle) dans une page vous pouvez utiliser le HTML ou le CSS.
Pour insérer une image dans une page, le plus simple est d'utiliser du code HTML et plus précisèment la balise IMG.
L'image sera à l'occasion redimensionnée.
Notez que la balise IMG est une balise orpheline ; elle ne peut contenir aucune autre balise.
Ces deux images sont côte à côte c'est logique. La balise IMG est une balise "inline" mais on peut la transformer en élément "block".
Les deux images ont la même largeur (30% de celle du conteneur) mais pas la même hauteur afin qu'elles ne soient
pas déformées (respect du ration hauteur/largeur).
Par défaut les images sont alignées verticalement par le bas ! Ce qui n'est pas très joli. En effet valeur par défaut de vertical-align est "baseline".
Le code corrigé :
Les images sont désormais alignées par le haut car j'ai rajouté dans la règle de style en ligne : "vertical-align : top".
J'ai aussi rajouté l'attribut alt qui n'est pas obligatoire pour le navigateur mais exigé par la spécification sinon le code HTML n'est pas considéré comme valide.
La valeur de cet attribut est un texte alternatif qui s'affiche uniquement si l'image n'a pu être chargée.
Cet attribut est aussi utilisé dans le cadre du SEO (référencement naturel de la page).
J'ai mis en forme les images via une règle de style en ligne. Il serait plus logique de créer une classe CSS pour simplifier le code HTML.
Pour disposere beaucoup de photos sur une page, attribuez leur la propriété "display : inline-block".
Ce qui veut dire que les images passent (ou pas) à la ligne suivante selon la largeur de l'écran.
Attention les images sont par défaut alignées par le bas sur la ligne ; rajoutez donc "vertical-align : top".
Les images ont toutes la même largeur (180px) mais pas la même hauteur pour respecter le proportions.
Pour que les images ne soient pas collées : "margin : 10px 10px".
Sur vous affichez cette page sur un PC, réduisez progressivement la largeur de la fenêtre et observez ...
D'abord 8 images de front puis 6, puis 4 puis 2. Donc un afficage "responsive".
Cette technique de positionnement est désormais obsolète. Je vous conseille d'utiliser l'outil "flexbox".
Si les "flex items" sont des images, vous pourrez utiliser la propriété object-fit pour que les images aient toutes la même
taille et avec le respect des proportions (mais au prix d'un rognage).
CSS3 - révolution dans le positionnement ...
Ces deux images sont centrées horizontalement.
J'ai rajouté à chaque élément IMG l'attribut TITLE. Il y a alors ajout d'une étiquette lisible seulement lorsque l'utilisateur laisse la souris
sur l'image.
Grâce à la classe "centrage" l'image concernée devient un élément "block" qui est centré horizontalement dans son conteneur avec une largeur égale à 40%
de celle du conteneur.
Je rappelle que "margin:auto" ne peut s'appliquer qu'à des éléments "block" !
Si on veut que le texte d'un paragraphe encadre une image, il suffit de faire "flotter" cette image à gauche ou à droite dans son conteneur (le paragraphe).
Les classes CSS utilisées dans les exemples ci-dessous :
Notez bien la propriété "float: left" pour la première classe ; "float : right" pour la seconde !
Huic Arabia est conserta, ex alio latere Nabataeis contigua; opima varietate conmerciorum castrisque oppleta validis et castellis, quae ad repellendos gentium vicinarum excursus sollicitudo pervigil veterum per oportunos saltus erexit et cautos. haec quoque civitates habet inter oppida quaedam ingentes Bostram et Gerasam atque Philadelphiam murorum firmitate cautissimas. hanc provinciae inposito nomine rectoreque adtributo obtemperare legibus nostris Traianus conpulit imperator incolarum tumore saepe contunso cum glorioso marte Mediam urgeret et Parthos.
Accedebant enim eius asperitati, ubi inminuta vel laesa amplitudo imperii dicebatur, et iracundae suspicionum quantitati proximorum cruentae blanditiae exaggerantium incidentia et dolere inpendio simulantium, si principis periclitetur vita, a cuius salute velut filo pendere statum orbis terrarum fictis vocibus exclamabant.
L'image se positionne à gauche et le texte est décalé à sa droite.
Le code HTML correspondant :
Accedebant enim eius asperitati, ubi inminuta vel laesa amplitudo imperii dicebatur, et iracundae suspicionum quantitati proximorum cruentae blanditiae exaggerantium incidentia et dolere inpendio simulantium, si principis periclitetur vita, a cuius salute velut filo pendere statum orbis terrarum fictis vocibus exclamabant.
Le texte continue désormais sous les images flottantes ; il n'ya plus de retrait.
Huic Arabia est conserta, ex alio latere Nabataeis contigua; opima varietate conmerciorum castrisque oppleta validis et castellis, quae
ad repellendos gentium vicinarum excursus sollicitudo pervigil veterum per oportunos saltus erexit et cautos. haec quoque civitates habet
inter oppida quaedam ingentes Bostram et Gerasam atque Philadelphiam murorum firmitate cautissimas. hanc provinciae inposito nomine rectoreque
adtributo obtemperare legibus nostris Traianus conpulit imperator incolarum tumore saepe contunso cum glorioso marte Mediam urgeret et Parthos.
Le code correspondant :
Une image positionnée à gauche et une autre à droite.
Le texte du premier paragraphe est en retrait tant à gauche qu'à droite.
Par contre le texte du deuxième paragraphe n'est plus en retrait ; on a mis fin au retrait grâce à la propriété CSS "clear: both" appliquée
au paragraphe.
La règle de style dans la feuille de style externe est la suivante :
img {width : 200px ; }
Par contre la règle de style dans la feuille de style de la page est :
img {height : 200px ; }
Conséquence : dans la page toutes les images seront affichées avec la taille 200 pixels par 200 !
Donc si leur ratio d'origine largeur/hauteur est différent de un, les images seront déformées.
Solution :
Dans la feuille de style interne il faut écrire la règle de style de la façon suivante (rajout d'une propriété) :
img {height : 200px ; width : auto ; }
Vous forcez le navigateur à recalculer la largeur (width : auto) afin de respecter le ratio d'origine entre hauteur et largeur.
Dans une page certaines images doivent être affichées avec une grande taille, d'autres avec une taille moyenne et enfin d'autres doivent
être minuscules (logo).
Il est donc fortement conseillé de créer différentes classes pour les éléments IMG.
CSS : 3 classes pour les images ; à chaque fois recalcul de la largeur en fonction de la hauteur ou inversement afin qu'il n'y ait jamais déformation.
HTML : chaque image se voit appliquer une classe.
Si vous voulez que du texte soit écrit au dessus d'une image, il faut insérer l'image dans une boite via le raccourci CSS "background" (ou toutes les propriétés CSS préfixées "background". Cette image doit être relativement transparente afin que le texte reste lisible.
Une boite avec en fond une image dupliquée et du texte :
La propriété background est très utile :
Blabla ...
Blabla ...
Blabla ...
Blabla ...
Par défaut l'image est insérée avec sa taille native et si celle-ci est plus petite que la boite conteneur, elle est répétée sur les deux axes car la valeur par défaut de "background-repeat" est "repeat" !
La propriété background est très utile :
Blabla ...
Blabla ...
Blabla ...
Blabla ...
L'image n'est insérée qu'une fois !
A la place du raccourci "background" j'ai utilisé deux propriétés préfixées "background-".
Dans le cadre des nouvelles spécifications CSS, le raccourci "background" est notablement enrichi. Désormais une boite peut avoir plusieurs images de fond OU l'image de fond unique peut s'adapter parfaitement aux dimensions du conteneur, etc. CSS3 - raccourci background enrichi
Par ailleurs il est possible avec HTML5 d'intégrer l'élément IMG dans le nouveau conteneur FIGURE pour légender une image. Nouvelle balise FIGURE
En combinant le nouvel outil de positionnement "flexbox" et la nouvelle propriété pour les images object-fit on peut réaliser facilement de superbes galeries photos ou toutes les images ont la même taille même avec des proportions différentes ... : rognage automatique ! CSS3 - nouveaux outils de positionnement