Structure

Comportement et positionnement

Les "boites" CSS

Les balises HTML block

Les balises HTML inline

Les balises HTML inline-block

display

Modifie l'affichage par défaut d'un élément
display:none; : n'est pas affiché
display:block; : l'élément commence une nouvelle ligne et prend toute la largeur possible
display:inline; : l'élément se comporte comme du texte, pas de largeur ou hauteur possibles
display:inline-block; : se comporte comme inline mais permet de donner hauteur et largeur
display:flex; : devient un container flexbox et se comporte comme un block
display:grid; : devient un container grid et se comporte comme un block
position
Modifie la position d'un élément dans le flux
position:static; : suit le flux normal du HTML par défaut
position:relative; : la boite reste dans le flux et peut être déplacé relativement à sa place initiale.
Elle devient aussi la référence d'un positionnement absolu chez ses descendants.
position:absolute; : la boite sort du flux et s'ancre à la première parente "relative"
position:fixed; : la boite sort du flux et s'ancre au viewport (la fenêtre du navigateur)
position:sticky; : la boite se fixe lorsque son parent atteint un seuil défini (par exemple :
top:20px;
)
top | right | bottom | left
Déplace un élément relative
Positionne un élément absolute ou fixed par rapport à son ancêtre référent
Détermine le seuil à partir duquel un élément sticky va se fixer
z-index
Détermine l'ordre de superposition des boites sur l'axe z, le chiffre le plus élevé à l'avant
overflow
Gère le contenu qui dépasse de la boîte
overflow:visible; : le contenu qui dépasse sera visible
overflox:hidden; : le contenu qui dépasse sera invisible
overflow:scroll; : un ascenseur va permettre un défilement à l'intérieur de la boîte
overlow-x et overflow-y appliquent l'effet uniquement horizontalement ou verticalement
float
Un élément flottant va sortir du flux et influer sur le contenu des éléments suivants, qui vont l'envelopper.
float:left; : l'élément va flotter à gauche de son parent
float:right; : l'élément va flotter à droite de son parent
float:none; : l'élément ne flotte plus
clear
Empêche un élément d'être influencé par un autre élément flottant
clear:left; : ne sera plus influencé par les éléments flottants à gauche
clear:right; : ne sera plus influencé par les éléments flottants à droite
clear:both; : ne sera plus influencé par les éléments flottants

Modèle de boîte et box-sizing

*, ::after, ::before {box-sizing: border-box;}
Applique box-sizing à tout les éléments et pseudo-elements

Modèle de boîte par défaut :

width:300px;
height:200px;
margin:2rem;
padding:2rem;
border:3px solid orange;
 
margin:2rem;
padding:2rem;
Surface déterminée par width et height

Largeur totale de la boîte : 300px + 4rem (paddings) + 6px (borders)
Hauteur totale de la boîte : 200px + 4rem (paddings) + 6px (borders)

Modèle de boîte avec box-sizing :

width:300px;
height:200px;
margin:2rem;
padding:2rem;
border:3px solid orange;
box-sizing:border-box;
margin:2rem;
padding:2rem;
Surface déterminée par width et height

Largeur totale de la boîte : 300px, paddings et borders inclus
Hauteur totale de la boîte : 200px, paddings et borders inclus

Flexbox

Flexbox fournit une façon efficace de disposer, aligner et distribuer l'espace entre les items d'un container, même lorsque leurs dimensions sont inconnues et/ou dynamiques.

Par défaut, les enfants (items) sont disposés dans le parent (container) le long d'un axe principal qui, par défaut, est horizontal. l'axe secondaire va donc par défaut de haut en bas

Instructions à appliquer au parent

div.card {display:flex;}
Transforme la <div class="card"> en container flexbox
flex-direction

flex-direction:row; (par défaut) l'axe principal va de gauche à droite
flex-direction:column; change la direction de l'axe principal du haut vers le bas
flex-direction:row-reverse; change la direction de l'axe principal de droite à gauche
flex-direction:column-reverse; change la direction de l'axe principal du bas vers le haut
flex-wrap
Détermine si le container ne fait qu'une seule ligne ou plusieurs
flex-wrap:nowrap; (par défaut) les items sont tous sur une seule ligne
flex-wrap:wrap; quand les items arrivent en bout de ligne, ils passent à la ligne suivante
flex-wrap:wrap-reverse; même chose dans l'autre sens
flex-flow:row-reverse wrap
Raccourci des deux dernières instructions
justify-content
Aligne les enfants le long de l'axe principal
justify-content:flex-start; (par défaut) aligne au début
justify-content:flex-end; aligne à la fin
justify-content:center; aligne au centre
justify-content:space-between; distribue avec un espacement égal entre chacun
justify-content:space-around; distribue avec un espacement égal autour de chacun
align-items
Aligne les enfants le long de l'axe secondaire
align-items:flex-start; (par défaut) aligne au début
align-items:flex-end; aligne à la fin
align-items:center; aligne au centre
align-items:baseline; aligne sur leur ligne de base
align-items:stretch; étire jusqu'à remplir le container

Instructions à appliquer à un enfant

order:-1;
Déplace visuellement l'enfant en fonction de l'ordre du document initial.
Dans cet exemple, -1 déplacera l'enfant avant tout les autres
flex:1;
Raccourci de plusieurs propriétés flexbox qui, dans cet exemple, oblige un enfant à utiliser tout l'espace rendu disponible par l'alignement
align-self
Permet à un item de passer outre la règle d'alignement dictées par le parent (align-items). Les valeurs à utiliser sont les mêmes que ce dernier.

Plus d'infos sur flexbox

Grid

CSS Grid Layout est un système de structuration du document basé sur les grilles. Cette technique présente quelques analogies avec Flexbox mais lui est très complémentaire

Par défaut, les enfants (items) sont disposés dans le parent (container) sur une grille.

Cette grille est composée de :

Instructions à appliquer au parent

section {display:grid;}
Transforme la <section> en container grid
grid-template-columns:40px 50px auto 50px 40px;
Définit le nombre de colonnes et leur taille. Dans cet exemple, 5 colonnes de tailles différentes dont la centrale occupe automatiquement tout l'espace restant
grid-template-rows:25% 100px auto;
Définit le nombre de rangées et leur taille. Dans cet exemple, 3 lignes de tailles différentes
grid-template-areas:"header header header header"
	            "main main . sidebar"
	            "footer footer footer footer"
Donne un nom à des zones de la grille.
Dans cet exemple, une grille de 4 colonnes et 3 lignes est découpée en 4 zones "header", "main", "sidebar" et "footer" et une zone reste vide "."
grid-gap:15px 10px;
Définit un espace entre les colonnes et les lignes.
Dans cet exemple : 15px entre les colonnes et 10px entre les lignes
justify-content:space-between;
Distribue les colonnes dans la grille (voir flexbox plus haut)
align-content:start;
Aligne les lignes à la fin de la grille
justify-items:center;
Centre les éléments contenus dans les cellules de la grille
align-items:end;
Aligne les éléments contenus à la fin des cellules de la grille

Instructions à appliquer à un enfant

grid-column: 3 / 5;
grid-row: 3 / 4;
Place un enfant à un endroit précis de la grille.
Dans cet exemple : de la 3ème ligne à la 5ème ligne, donc les 3ème et 4ème colonnes, et de la 3ème à la 4ème ligne, donc la 3ème colonne.
grid-area:sidebar;
Définit à quel endroit de la grille l'enfant doit aller s'afficher.
Dans cet exemple (lié à grid-template-areas vu plus haut), l'enfant doit aller dans la zone "sidebar"
justify-self:center;
Centre le contenu d'une cellule en passant outre la règle justify-items
align-self:stretch;
Remplit une cellule de son contenu en passant outre la règle align-items

Plus de possibilités avec Grid ?

Multicolonnage

column-count:3;
L'élément se divise en trois colonnes
column-gap:10px;
Espace de 10px entre les colonnes
column-width:25%;
La largeur des colonnes est de 25% de son parent
column-span:2;
L'élément ciblé se répartit sur 2 colonnes
column-rule:2px solid #aaaaaa;
Un filet gris de 2x sépare les colonnes
column-span:2;
L'élément ciblé se répartit sur 2 colonnes
column-span:2;
L'élément ciblé se répartit sur 2 colonnes

En savoir plus sur les colonnes CSS