Makina Blog

Le blog Makina-corpus

Introduction à Flexbox


Aujourd'hui implémenté par tous les navigateurs récents, le module flexbox de CSS3 s'avère très pratique pour disposer et aligner des éléments sur une page web.

Inline-block et float c'est fini : utilisez flexbox, c'est bon pour le moral (et la productivité de votre projet).

Description des propriétés

Le principe de flexbox est simple : la propriété principale, display: flex appliquée au conteneur, assure que les éléments fils directs seront alignés sur une ligne.

Ensuite, il est possible d'inverser le sens ou d'aligner en colonne plutôt qu'en ligne, et / ou dans un ordre inverse, avec flex-direction. Pour que les éléments s'affichent sur plusieurs lignes c'est flex-wrap qu'il faut modifier.

Par défaut les items sont alignés à gauche, ce qui peut être changé avec la propriété justify-content, qui permet de les aligner également à droite, au centre, ou avec de l'espace entre les éléments ou autour. L'alignement vertical sur la ligne est assuré paralign-items. Enfin l'alignement de l'ensemble des éléments est positionné en hauteur et largeur avec la propriété align-content.

Il est ensuite possible de définir des propriétés pour chaque item : leur largeur, l'ordre d'apparition, l'espace occupé.

Toutes ces directives sont clairement expliquées sur CSS Tricks.

Mais passons maintenant aux exemples.

Disposition en trois colonnes

Notre site a besoin de trois colonnes : une partie principale et deux colonnes latérales de même largeur. Le markup html reste très simple :

… … …

Après avoir appliqué la propriété display: flex à l'élément contenant les trois colonnes, celles-ci se retrouvent alignées sur une ligne.

.flex-container {
    display: flex;
}

Occuper tout l'espace

Par défaut les éléments ne prennent toute la largeur que si leur contenu en a besoin ; appliquer flex-grow: 1 à un élément fait en sorte qu'il occuppe tout l'espace disponible quel que soit son contenu.

.main {
    flex-grow: 1;
}

Il reste à fixer la même largeur pour les colonnes latérales, ce qui se fait aussi bien avec width qu'avec flex-basis.

.col-1,
.col-2 {
    flex-basis: 20%;
}

Changer l'ordre des choses

Et si on souhaite afficher d'abord la colonne 3, la propriété order permet de modifier l'ordre d'un élément.

.col-2 {
    order: -1;
}

Augmenter l'espacement

Enfin, ajouter de l'espacement (padding) ou des marges aux éléments ne pose pas de problème sur la disposition. Petite astuce, une hauteur minimale fixée à 100vh permettra d'occuper tout l'espace disponible.

.main {
    margin-left: 20px;
    margin-right: 20px;
    min-height: 100vh;
}

Grille d'éléments

Flexbox est également adapté si on souhaite afficher plusieurs éléments similaires sur la page.

<div class="gallery-container">
    <div class="gallery-item">
      <img src="images/thumb.jpg" />
    </div>
    <div class="gallery-item">
      <img src="images/thumb.jpg" />
    </div>
    ...
</div>

Et pour la CSS, simplement :

.gallery-container {
    display: flex;
}

Comme pour l'exemple précédent, les élément sont alignés sur une seule ligne.

Retourner à la ligne

On peut leur permettre de s'afficher sur plusieurs lignes en flex-wrap: wrap sur le conteneur.

Justifier le contenu

La propriété justify-content ajuste l'alignement horizontal, à gauche, centré ou à droit, ou encore avec de l'espace autour (space-around) ou entre chaque élément (space-between) : à appliquer également au conteneur.

Mettre en avant

Et si on souhaite mettre le premier et le deuxième élément en avant :

.gallery-item:nth-child(1) {
    flex-basis: 60%;
}
.gallery-item:nth-child(2) {
    flex-basis: 40%;
}

Voilà donc une petite introduction au module flexbox, utilisable dans de nombreux cas.

Aller plus loin

La documentation sur Mozilla Developper Network

Des tutoriels

L'implémentation des navigateurs

Les spécifications

Un petit jeu pour finir

Photo break dancer par fotosderianxo, CC-By 2.0

Actualités en lien

Image
Capture d'une partie de carte montrant un réseau de voies sur un fond de carte sombre. Au centre, une popup affiche les information de l'un des tronçons du réseau.
28/02/2024

Géné­rer un fichier PMTiles avec Tippe­ca­noe

Exemple de géné­ra­tion et d’af­fi­chage d’un jeu de tuiles vecto­rielles en PMTiles à partir de données publiques.

Voir l'article
Image
Read The Docs
01/02/2024

Publier une documentation VitePress sur Read The Docs

À l'origine, le site de documentation Read The Docs n'acceptait que les documentations Sphinx ou MKDocs. Depuis peu, le site laisse les mains libres pour builder sa documentation avec l'outil de son choix. Voici un exemple avec VitePress.

Voir l'article
Image
Widget
04/04/2023

Créer une application en tant que composant web avec Stencil

Mise en place dans le cadre de Geotrek, cette solution permet de se passer d'une iFrame pour afficher une application dans n'importe quel site.

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus