Dans la conception web, la notion de format d'image réprésente la manière dont un élément doit être redimensionné proportionnellement à sa largeur ainsi que sa hauteur.
Le format d'image est le plus souvent exprimé par deux nombres entiers (exemple : 4:3), la largeur en premier puis la hauteur. Les rapports d'aspect les plus courants pour la photographie sont 4:3 et 3:2, tandis que la vidéo et les appareils photo les plus récents ont un rapport d'aspect de 16:9.
Le hack css avec la propriété padding
Il s'agit d'une vieille méthode pour conserver un rapport d'aspect qui, avec l'arrivée de la propriété aspect-ratio, dont le support est désormais étendu, ne s'avère plus utile. Il faut avouer que cette solution n'est ni naturelle ni intuitive.
Lorsqu'un élément possède un pourcentage de rembourrage vertical, il est alors basé sur la largeur de son élément parent.
Pour exemple :
Le format d'image 16:9 équivaut à 9 / 16 * 100% = 56.25%
Le format d'image 4:3 équivaut à 3 / 4 * 100% = 75%
Le format d'image 3:2 équivaut à 2 / 3 * 100% = 66.66%
Le format d'image 1:1 équivaut à 1 / 1 * 100% = 100%
Testez par vous-même :
La propriété aspect-ratio
Contrairement au padding hack, avec cette propriété, nous n'avons plus besoin d'un élément parent en se basant sur sa largeur pour englober le contenu dont nous tenons à garder les proportions. C'est beaucoup plus simple et cela allège le code.
Testez par vous-même :
En effet, il suffit de déclarer une largeur ou une hauteur à un élément et de définir un rapport d'aspect. C'est tout !
Si vous déclarez une largeur ainsi qu'une hauteur à un élément, la propriété aspect-ratio n'aura aucun effet.
Dans le cas où vous avez un élément à l'intérieur d'un parent auquel vous avez défini une hauteur, il suffit de déclarer la propriété aspect-ratio sur l'élément enfant.
Dans l'exemple ci-dessous, nous avons défini un format d'image fixe. Le problème est simple. Si nous ajoutons trop de contenu à l'intérieur de notre élément, ledit contenu va immanquablement dépasser de son conteneur lorsque nous allons passer sur un écran plus petit.
Nous pourrions alors ajouter simplement la propriété overflow pour ainsi faire apparaître une barre de défilement et, de fait, englober tout le contenu, comme ceci :
Mais, vous l'aurez compris, l'objectif est que le conteneur suive le flux du contenu. Une solution existe là-aussi avec la propriété padding. Il s'agit d'utiliser celle-ci avec les pseudo-éléments ::before et ::after :
Grâce à la propriété aspect-ratio, vous allez voir que la mise en place est beaucoup plus rapide et cohérente qu'avec le padding hack. En retirant la hauteur fixe, la taille de l'élément va s'adapter.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Nous remarquons que l'image est allongée avec le format 16:9. Pour éviter que l'image ne soit écrasée par le nouveau format, nous ajoutons la propriété object-fit associée à la valeur cover de manière à occuper tout l'espace. Je vous invite à vous renseigner sur les propriétés d'images.
Avec le padding hack, il faudrait bien entendu déclarer un conteneur et placer notre image en positionnement absolu :
Autre exemple avec trois colonnes en utilisant la propriété aspect-ratio. Vous pouvez mettre des images de tailles différentes. Elle auront toutes les mêmes proportions (ici le format est 3:2).
Un exemple où la méthode avec le padding hack s'est avérée très utile se portait sur les diaporamas, sliders et autres carrousels. Comme les images se superposent en positionnement absolu, cette solution permettait de rendre la galerie responsive.
Définir une image comme arrière-plan n'est pas une bonne pratique pour afficher une image. En effet, celle-ci ne sera pas reconnue par les technologies d'assistance. L'image d'arrière-plan ne doit être définie qu'à des fins décoratives.
Comme il s'agit d'une image de fond, nous n'allons pas utiliser la propriété object-fit propre aux images, mais la propriété background-size afin de définir le type de remplissage.
Rien de mieux pour réaliser un header (entête) sur votre site/blog. En quelques déclarations, vous obtenez un résultat très satisfaisant et responsive.
<div class="entete-aspect">
<h1>Bienvenue sur mon blog</h1>
</div>
Un élément remplacé est un élément dont le contenu est en dehors de la portée du modèle de formatage CSS, comme une image, une vidéo ou encore un document intégré (iframe).
Un élément remplacé est différent des autres boîtes en CSS. En effet, celui-ci possède des dimensions et un comportement propres. On dit que les éléments remplacés ont un rapport d'aspect intrinsèque, car ils ont des dimensions.
Comme nous avons pu le voir, il est possible de définir une proportion sur un élément qui possède un rapport d'aspect intrinsèque. Dans ce cas, la déclaration du ratio remplacera le rapport d'aspect intrinsèque.
<iframe src="" width="560" height="315" style="--aspect-ratio: 560 / 315"></iframe>
<!--ici on choisit d'écrire la largeur divisée par la hauteur ce qui revient à écrire --aspect-ratio:16/9 -->
Comme nous avons pu le voir, le padding hack ne devrait pas être utilisé. Mais force est de constater qu'il fonctionne très bien et que le support est très bon. Si vous souhaitez mettre en place une solution de repli, celle-ci devrait vous convenir :