flex-basis
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2015.
La propriété flex-basis CSS définit la taille principale initiale d'un élément flexible. Elle définit la taille de la boîte de contenu sauf si elle est modifiée par box-sizing.
Note :
Il est recommandé d'utiliser la propriété raccourcie flex avec une valeur clé comme auto ou initial au lieu de définir flex-basis seule. Les valeurs clés s'étendent en combinaisons fiables de flex-grow, flex-shrink et flex-basis, ce qui permet d'obtenir les comportements flexibles couramment recherchés.
Exemple interactif
flex-basis: auto;
flex-basis: 0;
flex-basis: 200px;
<section class="default-example" id="default-example">
<div class="transition-all" id="example-element">Élément un</div>
<div>Élément deux</div>
<div>Élément trois</div>
</section>
.default-example {
border: 1px solid #c5c5c5;
width: auto;
max-height: 300px;
display: flex;
}
.default-example > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
margin: 10px;
flex-grow: 1;
flex-shrink: 1;
flex-basis: auto;
}
Dans cet exemple, les propriétés flex-grow et flex-shrink sont toutes deux définies à 1 sur les trois éléments, ce qui indique que l'élément flexible peut croître et rétrécir à partir de la valeur initiale de flex-basis.
La démonstration modifie la valeur de flex-basis appliquée au premier élément flexible, ce qui le fait croître ou rétrécir pour occuper l'espace disponible. Les autres éléments flexibles vont également changer de taille ; ils auront au moins la taille min-content. Par exemple, lorsque la valeur de flex-basis du premier élément est réglée à 200px, il commence à 200px mais rétrécit ensuite pour s'adapter à l'espace disponible.
Si la propriété flex-basis est définie sur une valeur autre que auto et qu'une propriété width (ou height dans le cas de flex-direction: column) est également définie pour ce même élément flexible, la valeur de flex-basis prévaut.
Syntaxe
/* Définit une largeur <'width'> */
flex-basis: 10em;
flex-basis: 3px;
flex-basis: 50%;
flex-basis: auto;
/* Dimensions intrinsèques avec un mot-clé */
flex-basis: max-content;
flex-basis: min-content;
flex-basis: fit-content;
/* Taille automatique en fonction du contenu de l'élément */
flex-basis: content;
/* Valeurs globales */
flex-basis: inherit;
flex-basis: initial;
flex-basis: revert;
flex-basis: revert-layer;
flex-basis: unset;
La propriété flex-basis est définie grâce au mot-clé content ou grâce à une valeur de type <'width'>.
Valeurs
content-
Indique un dimensionnement automatique, basé sur le contenu de l'élément flexible.
<'width'>-
L'une des unités suivantes :
<length>définit une valeur absolue.<percentage>définit un pourcentage de la largeur ou de la hauteur de la zone de contenu du bloc englobant. Les valeurs en pourcentage deflex-basissont calculées par rapport au conteneur flexible. Si la taille du conteneur flexible n'est pas définie, la valeur utilisée pourflex-basisestcontent.autoutilise la valeur dewidthen mode d'écriture horizontal, et la valeur deheighten mode d'écriture vertical ; lorsque la valeur correspondante est aussiauto, la valeurcontentest utilisée à la place.max-contentdéfinit la largeur intrinsèque préférée.min-contentdéfinit la largeur intrinsèque minimale.fit-contentdéfinit la taille maximale possible de la zone de contenu du bloc englobant, limitée par les valeursmin-contentetmax-content, et calculée en fonction du contenu de l'élément courant.
Définition formelle
| Valeur initiale | auto |
|---|---|
| Applicabilité | éléments flexibles, y compris les pseudo-éléments intégrés dans le flux |
| Héritée | non |
| Pourcentages | se rapporte à la principale taille interne du conteneur flexible |
| Valeur calculée | comme spécifié, mais avec les longueurs relatives converties en longueurs absolues |
| Type d'animation | une longueur, pourcentage ou calc() ; |
Syntaxe formelle
flex-basis =
content |
<'width'>
<width> =
auto |
<length-percentage [0,∞]> |
min-content |
max-content |
fit-content( <length-percentage [0,∞]> ) |
<calc-size()> |
<anchor-size()> |
stretch |
fit-content |
contain
<length-percentage> =
<length> |
<percentage>
<calc-size()> =
calc-size( <calc-size-basis> , <calc-sum> )
<anchor-size()> =
anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )
<calc-size-basis> =
<size-keyword> |
<calc-size()> |
any |
<calc-sum>
<calc-sum> =
<calc-product> [ [ '+' | '-' ] <calc-product> ]*
<anchor-name> =
<dashed-ident>
<anchor-size> =
width |
height |
block |
inline |
self-block |
self-inline
<calc-product> =
<calc-value> [ [ '*' | / ] <calc-value> ]*
<calc-value> =
<number> |
<dimension> |
<percentage> |
<calc-keyword> |
( <calc-sum> )
<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN
Exemples
Définir les tailles initiales des éléments flexibles
HTML
<ul class="container">
<li class="flex flex1">1: flex-basis test</li>
<li class="flex flex2">2: flex-basis test</li>
<li class="flex flex3">3: flex-basis test</li>
<li class="flex flex4">4: flex-basis test</li>
<li class="flex flex5">5: flex-basis test</li>
</ul>
<ul class="container">
<li class="flex flex6">6: flex-basis test</li>
</ul>
CSS
.container {
font-family: "Arial", sans-serif;
margin: 0;
padding: 0;
list-style-type: none;
display: flex;
flex-wrap: wrap;
}
.flex {
background: #6ab6d8;
padding: 10px;
margin-bottom: 50px;
border: 3px solid #2e86bb;
color: white;
font-size: 14px;
text-align: center;
position: relative;
}
.flex::after {
position: absolute;
z-index: 1;
left: 0;
top: 100%;
margin-top: 10px;
width: 100%;
color: #333333;
font-size: 12px;
}
.flex1 {
flex-basis: auto;
}
.flex1::after {
content: "auto";
}
.flex2 {
flex-basis: max-content;
}
.flex2::after {
content: "max-content";
}
.flex3 {
flex-basis: min-content;
}
.flex3::after {
content: "min-content";
}
.flex4 {
flex-basis: fit-content;
}
.flex4::after {
content: "fit-content";
}
.flex5 {
flex-basis: content;
}
.flex5::after {
content: "content";
}
Résultat
flex-basis 0 contre 0%
Cet exemple montre la différence entre une valeur de flex-basis de 0 et une valeur de flex-basis de 0% lorsque flex-direction est définie sur column et que les conteneurs flexibles et les éléments flexibles n'ont pas de hauteur définie ; tandis que 0 est une longueur absolue, les valeurs en pourcentage de flex-basis sont résolues en valeurs content.
HTML
Nous incluons deux conteneurs flexibles de même structure, qui seront mis en forme de façon similaire à l'exception de leur valeur de flex-basis. Chaque conteneur possède deux enfants : un en-tête <div> et une balise <section>. L'élément <section> contient un enfant <div> de contenu, qui ne sera pas défini comme élément flexible mais auquel une hauteur sera attribuée.
<div class="container basis-0">
<div>en-tête</div>
<section>
<div class="content">flex-basis: 0;</div>
</section>
</div>
<div class="container basis-0-percent">
<div>en-tête</div>
<section>
<div class="content">flex-basis: 0%;</div>
</section>
</div>
CSS
Nous appliquons une mise en forme aux conteneurs pour qu'ils soient des conteneurs flexibles en ligne qui apparaissent côte à côte afin de faciliter leur comparaison. Nous définissons la propriété flex-direction à column. Les éléments flexibles du premier conteneur ont une valeur de flex-basis de 0, tandis que ceux du second conteneur ont une valeur de flex-basis de 0%. Ni les conteneurs flexibles ni leurs éléments flexibles n'ont de hauteur explicitement définie ; cependant, la hauteur des éléments section doit être d'au moins 200px, et celle de leurs enfants est de 300px.
.container {
width: 40vw;
padding: 1rem;
border: 1px dashed blue;
display: inline-flex;
flex-direction: column;
}
section {
outline: 1px solid red;
overflow: auto;
min-height: 200px;
}
.content {
background: wheat;
height: 300px;
}
.container.basis-0 > * {
flex-basis: 0;
}
.container.basis-0-percent > * {
flex-basis: 0%;
}
Résultat
Dans le premier conteneur, avec flex-basis: 0, l'élément <section> a une taille principale initiale de zéro, et il grandit jusqu'à la hauteur minimale de 200px. Dans le second conteneur, avec flex-basis: 0%, l'élément <section> a une taille principale initiale de 300px car, comme le conteneur flexible n'a pas de hauteur définie, les valeurs en pourcentage de flex-basis sont résolues en valeur content.
Spécifications
| Specification |
|---|
| CSS Flexible Box Layout Module Level 1 # flex-basis-property |
Compatibilité des navigateurs
Voir aussi
- La propriété raccourcie
flex - La propriété
inline-size - Les concepts de bases
- Contrôler les proportions des boîtes flexibles le long de l'axe principal
- Le module du modèle de boîte flexible CSS