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.
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.
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.
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.
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 :
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 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.
Si on spécifie un axe vertical, les axes sont inversés.
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 :
row (affichage sur
une ligne de gauche à droite - par défaut), row-reverse (affichage en
ligne de droite à gauche), column pour un affichage vertical (de haut
en bas), ou column-reverse pour un affichage vertical (de bas en haut).nowrap (tous les éléments sont sur l'axe principal),
wrap (pour autoriser le retour à la ligne/colonne), ou wrap-reverse
pour organiser les éléments sur plusieurs axes.flex-start (début du conteneur -- par exemple, gauche
pour la direction row, droite pour row-reverse),
flex-end (la fin du conteneur), center (centrage du contenu),
space-between (pour répartir le même espace entre
les éléments), space-around (pour répartir le même espace autour de chaque
élément), ou space-evenly (pour répartir un espace équitable de part et
d'autre des éléments). flex-start,
flex-end, center, stretch (pour étirer le contenu),
ou baseline (pour aligner sur la ligne de base -- où le texte de la première
ligne du contenu sera écrit). flex-start,
flex-end, center, stretch, space-between ou
space-around. Pour les blocs enfants, on pourra spécifier, entre autres, les propriétés suivantes :
Une description plus complète de ce modèle est disponible sur le site de CSS Tricks.