4. Développement Web - CSS





4.1. Principe

Pour pouvoir utiliser le positionnement Flexbox il faut créer un container (dit flexible) et le déclarer de display : flex.

Ce container peut être un div ou une balise structurelle : body, header, footer, main, section, ...

Flexbox se base sur deux axes pour positionner les items :

Mozilla Flexbox description
Positionnement flex-direction: row

4.2. Positionnement sur l'axe principal

L'attribut flex-direction peut prendre les valeurs suivantes :

On peut ensuite positionner les items en utilisant deux propriétés :

Par exemple, pour centrer horizontalement et verticalement les items, on utilise la valeur center, mais il existe bien d'autres manières de positionner les items : exemple.

Dans les exemples qui suivent on utilise un container doté des propriétés suivantes :

display: flex; 
flex-direction: row; 
margin: auto; 
width: 80%; 
height: 250px; 
background: BurlyWood; 
gap: 10px;

On a défini un espace de 10 pixels entre les items (gap).

On utilise 3 div appelés box 1, 2 et 3 qui possèdent les propriétés suivantes :

4.2.1. justify-content: flex-start

On remarque que l'item box 1 est étiré pour occuper la totalité de la longueur de l'axe croisé puisque sa hauteur n'est pas définie.

box 1
box 2
box 3

4.2.2. justify-content: flex-end

box 1
box 2
box 3

4.2.3. justify-content: center

box 1
box 2
box 3

4.2.4. justify-content: space-between

box 1
box 2
box 3

4.2.5. justify-content: around

box 1
box 2
box 3

4.2.6. justify-content: space-evenly

box 1
box 2
box 3

4.3. Positionnement sur l'axe croisé

On part d'un container ayant un positionnement sur l'axe principal de type flex-start.

4.3.1. align-items: flex-start

Il s'agit du positionnement par défaut.

On remarque que box 1 dont la hauteur n'est pas fixée occupe uniquement l'espace de son contenu.

box 1
box 2
box 3

4.3.2. align-items: flex-end

box 1
box 2
box 3

4.3.3. align-items: center

box 1
box 2
box 3

4.3.4. align-items: baseline

box 1
box 2
box 3

4.3.5. align-items: stretch

box 1
box 2
box 3

4.4. Autre propriétés

4.4.1. Wrap

Si on dispose de plusieurs items de largeur prédéfinie, ils seront par défaut, redimensionnés.

box 1
box 2
box 3.1
box 3.2
box 3.3
box 3.4
box 3.5

Cependant avec la propriété flex-wrap fixée à wrap, ils garderont leur largeur mais ils peuvent déborder du container.

box 1
box 2
box 3.1
box 3.2
box 3.3
box 3.4
box 3.5

4.4.2. Contrôler l'axe principal

Il existe trois propriétés qui gèrent la flexibilité des items :

On peut résumer ces trois propriétés en utilisant la propriété flex. Le code suivant définit :

.box {
    flex: 2 1 auto;
}

Voici un exemple pour lequel la largeur des items n'est pas définie et sera déterminée en fonction de flex-grow :

box 1: 2 1 auto
box 2: 1 1 auto
box 3: 3 1 auto