Le flux normal, ou ce que les anglophones appellent le “flow”, est la façon dont les éléments sont affichés dans une page web lorsqu’aucun style ne leur est appliqué.
Dans le flux normal, les éléments block (div, p, section, etc.) sont positionnés un à la suite de l’autre, tandis que les éléments inline (span, strong, em, etc.), sont positionnés un à côté de l’autre en fonction de leur ordre d’apparition dans le code HTML.
À titre de base comparative, chaque exemple sur cette page utilise le gabarit suivant 👇 composé d'éléments en display: block; placés un en dessous de l’autre. Seule la propriété position de ces boites fluctue d'un exemple à l'autre afin d'illustrer la différence engendrée par cette propriété. Un top: 15vmin; a aussi été attribué à la boite afin de mettre en évidence l'impact de position.
Par défaut, le navigateur attribue la position static à tous les éléments. La particularité principale de cette position est que les propriétés top, right, bottom, left ou encore z-index n’ont aucun impact sur ces éléments 🚫.
Cette valeur de position à pour objectif de positionner les éléments comme le ferait le code HTML sans l’intervention du CSS. On remarque donc que la propriété top n'affecte aucunement la boite
Les éléments en position: relative; se positionnent d'abord en fonction du flux normal de la page. Ils sont ensuite déplacés relativement à cet emplacement, d'où leur nom position: relative;.
On remarque donc dans l'exemple ci-dessous que la boite est décalée d'une demi-hauteur de boite par rapport à sa position normale dans le flux.
Les éléments en position: absolute; ignorent complètement le flux de la page et se positionnent en fonction du parent le plus près aillant une position autre que static.
On remarque dans l'exemple ci-dessous que les éléments respectant le flux se positionnent exactement comme si la boite 2 n'existait pas (aucun espace vide entre la boite 1 et la 3). La boite 2 quant à elle se positionne par rapport au <body> qui en l'absence de parent avec une position devient sont point de référence.
Les éléments en position: fixed; ressemblent aux éléments en position absolute. Tout comme eux, ils ignorent le flux de la page. Cependant, plutôt que de se positionner en fonction d'un parent, ils se positionnent en fonction de la fenêtre (viewport).
On remarque dans l'exemple ci-dessous que les éléments respectant le flux se positionnent exactement comme si la boite 2 n'existait pas (aucun espace vide entre la boite 1 et la 3). La boite 2 quant à elle se positionne par rapport à la fenêtre, donc même si la page défile, la boite reste fixe.
Les éléments en position: sticky; ressemblent aux éléments en position static. Tout comme eux, ils se positionnent d'abord en fonction du flux normal de la page. Cependant, lorsqu'une de leurs propriétés top, right, bottom ou left correspond au défilement de la page, l'élément devient fixe.
Dans l'exemple ci-dessous, la boite 2 n'est à priori pas affectée par la propriété top. Cependant, lorsque la page défile et que la boite se trouve à une distance du sommet équivalente à la valeur de sa propriété top, celle-ci devient fixe et arrête de défiler avec le reste de la page.