J'ai deux éléments à l'intérieur d'un conteneur, qui sont côte à côte en utilisant une boîte flexible. Sur le deuxième élément (.flexbox-2
), Je mets sa hauteur dans le CSS. Cependant, alors le premier élément (.flexbox-1
) correspondra à la hauteur de .flexbox-2
. Comment pourrais-je m'arrêter .flexbox-1
correspondant à la hauteur de .flexbox-2
et conserve-t-il sa hauteur naturelle?
Voici ce que j'ai jusqu'ici (également disponible en tant que jsFiddle )
.container {
display: -webkit-flex;
-webkit-flex-direction: row;
}
.flexbox-1 {
-webkit-flex: 1;
border: solid 3px red;
}
.flexbox-2 {
-webkit-flex: 2;
border: solid 3px blue;
height: 200px;
margin-left: 10px;
}
<div class="container">
<div class="flexbox-1">.flexbox-1</div>
<div class="flexbox-2">.flexbox-2</div>
</div>
Ceci est une ancienne solution. Ma réponse est remplacée par celle-ci nouvelle réponse d'Aaron utilisant
align-self
. C'est une meilleure solution qui ne repose pas sur une bizarrerie CSS.
Tant que le conteneur flex n'a pas de hauteur lui-même , vous pouvez définir height: 0%
sur le premier élément flexible. Parce qu'il n'a pas de hauteur à hériter de son parent, toute pourcentage hauteur le réduira. Il va ensuite grandir avec son contenu.
Dans cet exemple, j'ai supprimé le -webkit
préfixe. Ce n'est vraiment nécessaire que pour Safari et le préfixe peut être ajouté ci-dessus la version sans préfixe. J'ai aussi enlevé flex-direction: row
comme il s’agit de la valeur par défaut.
.container {
display: flex;
}
.flexbox-1 {
flex: 1;
height: 0%;
border: solid 3px red;
}
.flexbox-2 {
flex: 2;
border: solid 3px blue;
height: 200px;
margin-left: 10px;
}
<div class="container">
<div class="flexbox-1">.flexbox-1</div>
<div class="flexbox-2">.flexbox-2</div>
</div>
Je sais que c’est une vieille question, mais une meilleure solution consiste à définir l’élément Flex de manière à ce qu’il soit aligné au sommet en utilisant flex-start
.
/* Default Styles */
.container {
display: flex;
}
.flexbox-2 {
flex: 2;
border: solid 3px blue;
height: 200px;
margin-left: 10px;
}
.flexbox-1 {
flex: 1;
align-self: flex-start;
border: solid 3px red;
}
<div class="container">
<div class="flexbox-1">"align-self: flex-start;"</div>
<div class="flexbox-2">.flexbox-2</div>
</div>
Paramétrer le height
des enfants sur max-content
va les empêcher de rétrécir.
.container {
display: -webkit-flex;
-webkit-flex-direction: row;
}
.flexbox-1 {
-webkit-flex: 1;
border: solid 3px red;
height: max-content;
}
.flexbox-2 {
-webkit-flex: 2;
border: solid 3px blue;
height: 200px;
margin-left: 10px;
}
<div class="container">
<div class="flexbox-1">.flexbox-1</div>
<div class="flexbox-2">.flexbox-2</div>
</div>