J'ai plusieurs colonnes auxquelles je donne une largeur égale en utilisant flex. Chacune contient des balises img
, et j'aimerais que ces images présentent le dimensionnement object-fit: cover
.
.container {
display: flex;
flex-direction: row;
width: 100%;
}
.test {
flex: 1;
margin-right: 1rem;
overflow: hidden;
height: 400px;
}
img {
object-fit: cover;
}
<div class="container">
<div class="test"><img src="http://placehold.it/1920x1080"></div>
<div class="test"><img src="http://placehold.it/1920x1080"></div>
<div class="test"><img src="http://placehold.it/1920x1080"></div>
<div class="test"><img src="http://placehold.it/1920x1080"></div>
</div>
Les images ne sont pas en train de redimensionner, comme on peut le voir dans cette démo . Pourquoi donc?
À partir de spécification :
La propriété
object-fit
spécifie comment le contenu d'un fichier .__ remplacé. L'élément doit être monté sur la boîte établie en fonction de sa hauteur et de largeur.
Le terme clé étant: adapté à la boîte établie en fonction de la hauteur et de la largeur utilisées
L'image est remplacée, pas son conteneur. Et la boîte établie par sa hauteur et sa largeur utilisées se rapporte à l'image elle-même, pas à son conteneur.
Alors, jetez le conteneur et faites les images elles-mêmes les éléments flexibles.
.container {
display: flex;
flex-direction: row;
width: 100%;
}
img {
object-fit: cover;
flex: 1;
margin-right: 1rem;
overflow: hidden;
height: 400px;
}
<div class="container">
<img src="http://placehold.it/1920x1080">
<img src="http://placehold.it/1920x1080">
<img src="http://placehold.it/1920x1080">
<img src="http://placehold.it/1920x1080">
</div>
5.5. Dimensionnement des objets: le
object-fit
propriétéLa propriété
object-fit
spécifie comment le contenu d'un fichier .__ remplacé. L'élément doit être monté sur la boîte établie en fonction de sa hauteur et de largeur.Voici trois des valeurs:
cover
Le contenu remplacé est dimensionné pour conserver ses proportions tout en remplir toute la zone de contenu de l'élément.
contain
Le contenu remplacé est dimensionné pour conserver ses proportions tout en ajustement dans la zone de contenu de l'élément.
fill
Le contenu remplacé est dimensionné pour remplir la zone de contenu de l'élément.
Avec cover
, l'image conserve son format d'image et couvre tout l'espace disponible. Avec cette option, une grande partie de l'image peut être recadrée en dehors de l'écran.
Avec contain
, le rapport de format est également conservé, mais l'image est redimensionnée pour s'adapter à la zone. Cela peut entraîner des espaces à gauche et/ou à droite (ajustement Portrait) ou en haut et/ou en bas (ajustement Paysage). La propriété object-position
peut être utilisée pour déplacer l'image dans sa boîte.
Avec fill
, le rapport de format est abandonné et l'image est redimensionnée pour s'adapter à la boîte.
Compatibilité du navigateur
A ce jour, object-fit
n'est pas pris en charge par Internet Explorer . Pour une solution de contournement, voir:
object-fit
fallback sur Edge (et autres navigateurs)object-fit
polyfill pour Internet Explorerobject-fit
sur IE9, IE10, IE11, Edge et d'autres anciens navigateursobject-fit
propriété de remplir/adapter les images dans des conteneurs.Le problème est que object-fit
spécifie comment une image est peinte dans la img
, mais vous n'avez pas spécifié la taille de ces éléments, mais uniquement celle de leurs parents .test
.
Donc, une alternative à La réponse de Michael_B donne aux images la même taille que les éléments flex:
img {
height: 100%;
width: 100%;
object-fit: cover;
}
.container {
display: flex;
flex-direction: row;
width: 100%;
}
.test {
flex: 1;
margin-right: 1rem;
overflow: hidden;
height: 400px;
}
img {
height: 100%;
width: 100%;
object-fit: cover;
}
<div class="container">
<div class="test"><img src="http://placehold.it/1920x1080"></div>
<div class="test"><img src="http://placehold.it/1920x1080"></div>
<div class="test"><img src="http://placehold.it/1920x1080"></div>
<div class="test"><img src="http://placehold.it/1920x1080"></div>
</div>
Pour ceux qui ne peuvent pas simplement "supprimer le conteneur et transformer les images elles-mêmes en éléments flexibles", ajoutez simplement des niveaux de conteneur:
<div class="display-flex">
<div class="flex-grow position-relative">
<div class="pos-absolute top-left-right-bottom-0">
<img class="object-fit-cover height-width-100">