La propriété display gére le mode d'affichage des boîtes des éléments HTML.

CSS 2 définit plusieurs modes d'affichage (bloc, en-ligne, liste, table et aucun) et CSS 3 ajoute des nouveaux modes (bloc en-ligne et flexbox). Nous étudierons dans cette partie plus particulièrement les modes bloc, en-ligne, bloc en-ligne et nous terminerons par les blocs flexibles.

Comment est défini le mode d'affichage

La valeur par défaut de la propriété display est définie de la façon suivante :

1 tous les élements sont considérés comme des éléments en ligne (spécifications CSS)

2 les navigateurs redéfinissent comme des éléments de bloc : address, article, aside, blockquote, body, dd, div, dl, dt, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, hr, html, main, nav, ol, p, pre, section, ul

3 les navigateurs redéfinissent comme des éléments non affichés : area, base, basefont, datalist, head, link, meta, param, script, style, title

4 les navigateurs redéfinissent les lignes de lignes (li) avec un mode d'affichage particulier (list_item)

5 les navigateurs redéfinissent les éléments de tableau table, caption, tr, col, colgroup, tbody, thead, tfoot, td, th avec un mode d'affichage particulier (table-header-group | table-footer-group | table | inline-table | table-caption | table-cell | table-row | table-row-group | table-column | table-column-group).

En tant qu'auteur de feuille de style, nous pouvons modifier la valeur par défaut de la propriété display et ainsi modifier le la façon dont sera affiché l'élément HTML de notre choix.

Masquer/afficher un élément

La manipulation la plus souvent faite de la propriété display consiste à utiliser alternativement les valeurs none et block pour masquer ou afficher un élément.
Remarque : masquer un élément entraîne que tous les éléments imbriqués dans cet éléments sont également masqué.

Une utilisation typique est la réalisation d'un menu avec des sous-menus comme dans l'exemple suivant. Les liens dans les listes sont volontairement absents pour ne pas surcharger le code.

Exemple : masquage / affichage d'éléments
Fichier CSS : styles.css

Liste horizontale

Un autre exemple d'utilisation de la propriété display permet d'afficher les lignes d'une liste horizontalement. Il suffit de donner la valeur inline à la propriété display des éléments li. Encore une fois cette manipulation est souvent utilisée pour la réalisation de menus.

Exemple : liste horizontale
Fichier CSS : styles.css

Mode "bloc en ligne"

La valeur inline-block affectée à la propriété display permet d'associer les caractèristiques des affichages bloc et en ligne.

En affichage inline-block on pourra :

L'exemple suivant affiche les éléments figure en mode inline-block. Les boîtes adoptent les caractéristiques suivantes du mode en ligne :

Exemple : block changé en inline-block
Fichier CSS : styles.css

Mode "flexible"

La valeur flex affectée à la propriété display permet d'affecter à un conteneur un mode d'affichage sous forme de boîte flexible (flexbox), qui organise tout seul les boîtes qu'elle contient dans une direction, et en proposant une gestion automatique des espacements entre les enfants ou l'étirement automatique de ceux-ci.

Le modèle flexbox

Le contenu (les items) s'organisent suivant un axe principal qui sera défini avec la propriété flex-direction. Perpendiculairement à l'axe principal se trouve l'axe transversal, suivant lequel il sera également possible d'aligner les éléments. Cette axe présentera deux extrémités, nommées flex-start et flex-end.

Les axes pour un alignement horizontal (row | row-reverse)
Positionnement des extrémités sur un axe horizontal

Si on spécifie un axe vertical, les axes sont inversés.

Les axes pour un alignement vertical (column | column-reverse)
Positionnement des extrémités sur un axe vertical

Pour le bloc conteneur, on précisera un display: flex qui pourra être complété, entre autres, par des propriétés permettant de spécifier :

Pour les blocs enfants, on pourra spécifier, entre autres, les propriétés suivantes :

Exemple : block conteneur en boite flexible
Fichier CSS : styles.css

Une description plus complète de ce modèle est disponible sur le site de CSS Tricks.