Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

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

css
/* 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 de flex-basis sont calculées par rapport au conteneur flexible. Si la taille du conteneur flexible n'est pas définie, la valeur utilisée pour flex-basis est content.
  • auto utilise la valeur de width en mode d'écriture horizontal, et la valeur de height en mode d'écriture vertical ; lorsque la valeur correspondante est aussi auto, la valeur content est utilisée à la place.
  • max-content définit la largeur intrinsèque préférée.
  • min-content définit la largeur intrinsèque minimale.
  • fit-content définit la taille maximale possible de la zone de contenu du bloc englobant, limitée par les valeurs min-content et max-content, et calculée en fonction du contenu de l'élément courant.

Définition formelle

Valeur initialeauto
Applicabilitééléments flexibles, y compris les pseudo-éléments intégrés dans le flux
Héritéenon
Pourcentagesse rapporte à la principale taille interne du conteneur flexible
Valeur calculéecomme défini, mais avec les longueurs relatives converties en longueurs absolues
Type d'animationune 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

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

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.

html
<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.

css
.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