display
display
block
, qui est la valeur par défaut des éléments de type bloc (en général, mais pas toujours !),
et inline
valeur par défaut des éléments de fluxdisplay:block
, l'élément sera considéré comme bloc : il va notamment prendre toute la largeur laissée dans le bloc parentdisplay:inline
, l'élément sera considéré comme un élément de flux : ses marges verticales disparaissent, sa hauteur et sa largeur sont ignorées. Rarement utiledisplay:inline-block
: mélange des deux, permet de mettre des blocs sur une ligne. Se comporte comme un inline pour la position (pas de saut de ligne), et comme un bloc pour le reste (marges, dimensions)display:none
: la boîte et tous ses enfants n'apparaissent pas du tout (comme s'ils n'étaient même pas dans le HTML)run-in
(pour les titres en enfilade), list-item
, table
et table-cell
…display:flex
et display:grid
:
je reviens dessus plus basposition
: static, relative, absolute, fixed
static
par défaut, l'élément prend sa position normaletop
, bottom
, left
, right
static
,
et à défaut, par rapport au canevas. Démo : positionnement absolu dans la pageDémo : positionnement absolu par rapport à un parentfixed
: l'élément est également sorti du flux, mais il est positionné par rapport au viewport, c'est-à-dire qu'il n'est pas sensible au scrollz-index
(position en profondeur) tutorielfloat
: permet de faire flotter un bloc.position:absolute
),
et il est repositionné tout à droite ou tout à gauche de son parent en repoussant les éléments inlineinline-block
n'est apparu qu'au milieu des années 2000)float:center
)float
pour autre chose que son usage prévu,
c'est-à-dire quand on veut faire flotter un élément (typiquement une image ou une figure) sur le côté d'un texte.
inline-block
comme alternative aux flottantsdisplay:inline-block
est arrivé au milieu des années 2000,
il a été accueilli comme une meilleure façon de faire des colonnes que float
float
, inline-block
n'est pas
non plus conçu pour faire de la mise en page
display: inline-block
transforme le bloc en élément inline, c'est-à-dire qu'il se comporte plus ou moins comme un mot… en particulier les espaces dans le HTML autour de l'élément se voient dans le rendu.inline-block
, mais pas avec ce genre de bidouille.Les navigateurs modernes implémentent des spécifications plus récentes de CSS, apparues au début des années 2010, et quasiment utilisables en production aujourd'hui
Attention cependant, ça ne fonctionnera pas partout ! Mais si votre page est bien faite, au pire les navigateurs trop anciens afficheront le contenu sans mise en page… (Viser la graceful degradation !)
Les outils modernes de mise en page s'activent avec deux valeurs spéciales de display
: flex
ou grid
Contrairement aux autres valeurs de display
,
elles ne modifient pas le comportement de l'élément en question mais celui de
ses enfants :
en d'autres termes,
elles permettent de mettre en page ce qui est à l'intérieur d'un élément.
display:flex
permet d'utiliser le module « Flexbox » de CSS, qui est particulièrement utile pour mettre en page
des suites d'éléments sur plusieurs lignes. On ne l'abordera pas dans ce cours.
display:grid
permet d'utiliser le module « Grid Layout » de CSS, qui permet de faire de la mise en page en deux dimensions
avec des grilles CSS.
On voit en TP les bases du fonctionnement des grilles CSS pour créer des colonnes et des rangées et aligner les différents éléments. Les grilles CSS sont beaucoup plus riches que ça, mais on ne peut pas tout voir !