Propriété CSS flex-basis
Baseline
Large disponibilité
*
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.
* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.
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 défini, 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 |
<box-size> |
<anchor-size()>
<box-size> =
<length-percentage [0,∞]> |
stretch |
contain |
min-content |
max-content |
fit-content |
stretch( <length-percentage [0,∞]> ) |
fit-content( <length-percentage [0,∞]> ) |
<calc-size()>
<anchor-size()> =
anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )
<length-percentage> =
<length> |
<percentage>
<calc-size()> =
calc-size( <calc-size-basis> , <calc-sum> )
<anchor-name> =
<dashed-ident>
<anchor-size> =
width |
height |
block |
inline |
self-block |
self-inline
<calc-size-basis> =
<size-keyword> |
<calc-sum> |
<calc-size()> |
any
<calc-sum> =
<calc-product> [ [ '+' | '-' ] <calc-product> ]*
<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 sont 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 n'est pas défini comme élément flexible mais auquel une hauteur est 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 incise (inline en anglais) 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
| Spécification |
|---|
| 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