J'ai un conteneur flexbox avec deux éléments flex dedans. L'un est une image et l'autre un paragraphe. J'ai essayé de redimensionner l'image proportionnellement en donnant width: some-pourcentage et height: auto mais ça ne fonctionne pas. Aidez-moi à résoudre ce problème.
<div class="item"> <img src= "https://png.pngtree.com/element_origin_min_pic/16/10/16/105802ebe43fe0f.jpg"/> <p>some paragraph</p> </div>
.item{
display:flex;
}
img{
width: 25%; /* not working */
height: auto;
}
Lien JSFiddle - https://jsfiddle.net/dizzyramen/xfot3Lwv/2 /
3 Réponses :
voici une autre option:
et définissez la gestion de la largeur dans ce nœud.
- asign
largeur: 100%; height: auto; à img pour qu'il s'ajuste proportionnellement à son parent.
- Ici, vous l'avez dans un extrait. J'espère que ça aide.
<div class="item">
<div class="image-wrapper">
<img
src=
"https://png.pngtree.com/element_origin_min_pic/16/10/16/105802ebe43fe0f.jpg"/>
</div>
<p>some paragraph</p>
</div>
<style>
.item{
display:flex;
}
.image-wrapper {
width: 25%; /* means 25% of .item */
}
img{
width: 100%; /* means 100% of its parent .image-wrapper */
height: auto;
}
</style>
Je pense avoir compris cette approche, mais pourquoi la largeur de .image-wrapper est-elle devenue si grande que vous deviez utiliser width: 25%?
Si vous ne définissez pas de largeur spécifique sur un div, par exemple .item , le div a un bloc d'affichage par défaut qui remplit tout l'espace horizontal.
Une partie importante de la question était pourquoi height: auto ne fonctionnait pas.
Cela se produit car, par défaut, la balise est en ligne. Vous devez le changer pour bloquer ou flex
Sergio, vous ne pouvez pas contrôler la valeur display des éléments flex. Une fois que vous faites d'un élément un conteneur flex, la propriété display sur les éléments flex est contrôlée par l'algorithme flex. Les tentatives de définition d'une règle d'affichage sur les éléments flexibles sont ignorées par le navigateur. Ainsi, changer la valeur display de img en block ou flex n'aurait pas d'importance.
Voir le bas de ma réponse ici pour plus de détails: stackoverflow.com/a/52471797/3597276
Un paramètre par défaut sur un conteneur flex est align-items: flex-start .
Dans un conteneur dans le sens des lignes, cela fait que les éléments flexibles, n'ayant pas de hauteur définie (par exemple height: auto ), étendent la hauteur totale du conteneur ( explication complète ).
Dans ce cas particulier, cependant, l'image s'étire au maximum et agrandit la taille du conteneur le long
La solution est de définir une limite de hauteur sur le conteneur ou de remplacer la valeur par défaut avec align-items: flex-start sur le conteneur ou align-self : flex-start sur l'élément.
<div class="item"> <img src="https://png.pngtree.com/element_origin_min_pic/16/10/16/105802ebe43fe0f.jpg" /> <p>some paragraph</p> </div>
.item {
display: flex;
}
img {
width: 25%;
align-self: start; /* new */
}
utilisez
align-self: flex-startsur l'image - cela se produit car stretch est le comportement par défaut (align-itemssur le conteneur flex oualign-selfsur l ' élément flex ) ... voir jsfiddle.net/947uqszj@kukkuz ça marche! Merci beaucoup