Mise en page CSS avec Flexbox et les grilles

Apprends comment les navigateurs disposent les boîtes sur une page et comment maîtriser cette disposition. Commence par le flux normal, la propriété display et les éléments flottants, puis positionne les éléments avec les positionnements relatif, absolu, fixe et adhérent et gère les couches superposées avec z-index. Crée des rangées et des colonnes d’éléments avec Flexbox et des mises en page bidimensionnelles avec les grilles CSS, en réglant notamment les dimensions, les espaces et l’alignement. Pour finir, choisis la méthode adaptée à chaque partie d’une page, crée des mises en page courantes pour les pages et les composants, puis repère et corrige les problèmes de mise en page avec les outils de développement du navigateur.

DébutantUnité 5 sur 8 de la formation Formation : HTML et CSS : création et publication de sites web

Ce que tu vas apprendre

  1. Décris comment un navigateur place les boîtes lorsqu’aucun CSS de mise en page n’est appliqué, modifie ce comportement avec la propriété display et utilise des éléments flottants pour faire habiller un élément par le texte.
    • Suis le flux normal : boîtes de bloc et boîtes en ligne
      Prévois où apparaissent les boîtes de bloc et les boîtes en ligne dans le flux normal, comment leurs dimensions se comportent et quand les marges verticales fusionnent.
    • Modifie la mise en page avec la propriété display
      Utilise display pour modifier la participation d’un élément à la mise en page de son parent et la disposition de ses propres enfants, et masque correctement des éléments.
    • Fais habiller un élément par le texte avec la propriété float
      Fais flotter une image ou une citation pour que le texte l’habille, place du contenu sous les éléments flottants et fais en sorte qu’un parent contienne ses éléments flottants.
  2. Décale des éléments de leur place normale, fixe-les à un conteneur ou à la zone d’affichage, garde-les visibles pendant le défilement et règle l’ordre de superposition des éléments.
    • Décale les éléments avec les positionnements relatif et absolu
      Utilise les positionnements relatif et absolu pour décaler légèrement des éléments et placer précisément des éléments superposés, comme des badges, dans un conteneur choisi.
    • Garde les éléments visibles avec les positionnements fixe et adhérent
      Fixe des éléments à la zone d’affichage avec le positionnement fixe, rends les en-têtes et les titres adhérents pendant le défilement et évite les problèmes causés par chaque méthode.
    • Règle l’ordre de superposition des éléments avec z-index
      Prévois l’ordre d’empilement des éléments qui se chevauchent, utilise z-index dans les contextes d’empilement et corrige les problèmes classiques où « z-index ne fonctionne pas ».
  3. Dispose une rangée ou une colonne d’éléments avec Flexbox : définis sa direction et son retour à la ligne, règle la façon dont les éléments grandissent et rétrécissent, puis aligne-les et espace-les.
    • Configure un conteneur flexible et ses axes
      Transforme un élément en conteneur flexible, explique les axes principal et secondaire, et règle la direction, le retour à la ligne et l’ordre visuel sans perturber l’ordre de lecture.
    • Dimensionne les éléments flexibles avec flex-grow, flex-shrink et flex-basis
      Calcule comment Flexbox répartit l’espace libre et le débordement entre les éléments avec flex-basis, flex-grow et flex-shrink, et utilise la propriété raccourcie flex en toute confiance.
    • Aligne et espace les éléments flexibles
      Répartis l’espace sur l’axe principal, aligne les éléments sur l’axe secondaire, écarte-les avec des marges automatiques et espace-les avec gap.
  4. Définis des lignes et des colonnes avec les grilles CSS, place les éléments à l’aide de lignes et de zones nommées, laisse la grille placer les éléments automatiquement et aligne les éléments et les pistes.
    • Définis les pistes de grille avec fr, repeat et minmax
      Crée les lignes et les colonnes d’une grille, calcule les dimensions des pistes avec l’unité fr et utilise repeat(), minmax() et gap.
    • Place les éléments avec les numéros de lignes, le mot-clé span et les zones nommées
      Place les éléments de grille avec les numéros de lignes, span et les zones nommées du modèle, et maintiens la cohérence entre l’ordre visuel et l’ordre de lecture.
    • Laisse la grille placer les éléments automatiquement
      Utilise le placement automatique et la grille implicite pour placer un nombre quelconque d’éléments, et crée des grilles de cartes dont le nombre de colonnes s’adapte grâce à auto-fill et auto-fit.
    • Aligne les éléments et les pistes dans une grille
      Aligne chaque élément dans sa zone de grille, aligne l’ensemble des pistes dans le conteneur et centre le contenu avec les propriétés raccourcies place-.
  5. Choisis la méthode de mise en page adaptée à chaque partie d’une page, crée des mises en page courantes pour les pages et les composants, puis repère et corrige les problèmes de mise en page.
    • Choisis la méthode de mise en page adaptée
      Choisis entre le flux normal, Flexbox, les grilles, le positionnement, les éléments flottants et la mise en page multicolonne selon la disposition voulue, et combine ces méthodes sur une même page.
    • Crée la mise en page générale des pages
      Crée une colonne de contenu lisible, une page avec en-tête, barre latérale, région principale et pied de page, un pied de page qui reste en bas et une barre latérale adhérente.
    • Crée les mises en page des composants courants
      Dispose les éléments d’interface récurrents : contenu centré, barres de navigation, blocs avec image à côté du texte, grilles de cartes aux parties alignées, calques de superposition, formulaires et groupes de saisie.
    • Repère et corrige les problèmes de mise en page
      Utilise les outils de développement du navigateur et une liste de causes courantes pour comprendre pourquoi une mise en page se dégrade ou une propriété n’a aucun effet, puis teste les mises en page avec du contenu réel.

Mise en page CSS : cours

5 chapitres

1

Le flux des boîtes

Les navigateurs disposent des pages lisibles avant même l’ajout de règles de mise en page particulières. Les boîtes de bloc et les boîtes en ligne expliquent cette disposition initiale, notamment pourquoi un paragraphe étroit occupe tout de même sa propre ligne et pourquoi certaines marges fusionnent. Découvre comment display modifie l’extérieur et l’intérieur d’une boîte, puis utilise les éléments flottants pour une tâche précise : faire habiller une image par le texte. Ces règles t’aident à prévoir ce qui changera lorsque tu introduiras Flexbox ou une grille.

1.1 Comment les boîtes de bloc et les boîtes en ligne partagent une page

Une page possède déjà une mise en page avant que tu ajoutes Flexbox ou une grille. Le flux normal place les boîtes dans l’ordre du HTML. Dans un texte horizontal en français, les blocs s’empilent vers le bas et le contenu en ligne se déroule de gauche à droite, puis passe à la ligne lorsque celle-ci est pleine.

Les blocs prennent une ligne

Les paragraphes, titres, divisions et sections sont par défaut des boîtes de bloc. Un bloc avec width: auto remplit la largeur disponible de son conteneur et grandit en hauteur avec son contenu. Définir sa largeur ne place pas pour autant le bloc suivant sur la même ligne.

<p>Read the <a href="/guide">setup guide</a> first.</p>
<p>Then install it.</p>

Les paragraphes commencent sur des lignes distinctes. Le lien est une boîte en ligne dans le premier paragraphe. Même si le premier paragraphe ne mesure que 300px de large, le second commence toujours en dessous.

Les boîtes en ligne suivent le texte

Un <span>, <a>, <strong> ou <em> ne prend normalement que la largeur de son texte. Une boîte en ligne non remplacée ignore width et height. Ajouter a { width: 200px; } ne donne donc pas au lien une largeur de 200 px.

Les marges intérieures, bordures et marges extérieures horizontales écartent le texte adjacent. Les marges intérieures et bordures verticales sont dessinées, mais elles n’écartent pas davantage les lignes environnantes ; un grand arrière-plan peut chevaucher la ligne du dessus ou du dessous. Les marges extérieures verticales n’ont aucun effet. Une image est un élément remplacé : elle est en ligne par défaut, mais width et height s’y appliquent.

Les marges verticales peuvent fusionner

Dans le flux normal, les marges verticales de boîtes de bloc qui se touchent peuvent fusionner en un seul espace. Un paragraphe avec margin-bottom: 24px suivi d’un titre avec margin-top: 32px laisse 32 px entre les deux. La plus grande marge positive l’emporte ; l’espace n’est pas de 56 px. Avec une marge positive de 24 px et une marge de −10 px, le résultat est de 14 px. Les marges horizontales restent distinctes.

La marge supérieure d’un premier enfant peut aussi fusionner avec celle de son parent lorsqu’aucune bordure, marge intérieure ou contenu en ligne ne les sépare. Une marge supérieure de 20 px sur un titre peut déplacer vers le bas tout un en-tête sans marge intérieure, sans laisser d’espace à l’intérieur. Utilise une marge intérieure supérieure pour créer un espace intérieur, ajoute une bordure ou donne display: flow-root au parent. La marge inférieure d’un dernier enfant peut aussi fusionner avec celle de son parent.

Les éléments flexibles et les éléments de grille ne fusionnent pas leurs marges entre eux. Si tu fais passer un parent du flux normal à Flexbox, les deux mêmes marges positives peuvent alors s’additionner. Les boîtes flottantes et celles positionnées en absolu gardent elles aussi leurs marges distinctes.

Les directions suivent le mode d’écriture

La direction de bloc est celle dans laquelle vont les blocs successifs ; la direction en ligne est celle dans laquelle le texte se déroule. L’arabe et l’hébreu utilisent aussi des lignes horizontales, mais leur direction en ligne va de droite à gauche. Les propriétés logiques suivent ces directions : margin-inline-start: 16px donne une marge à gauche en français et une marge à droite en arabe. padding-block définit la marge intérieure dans la direction de bloc.

Points clés

  • Les blocs commencent de nouvelles lignes même lorsqu’une largeur étroite leur est donnée.
  • Les boîtes en ligne non remplacées ignorent width et height ; les images font exception.
  • Les marges verticales de blocs qui se touchent peuvent fusionner ; les marges horizontales ne fusionnent pas.
  • Les propriétés logiques suivent les directions de bloc et en ligne.
  • Une marge intérieure ou flow-root peut empêcher la marge d’un enfant de fusionner avec celle de son parent.

1.2 Ce que display modifie

La propriété display contrôle la relation d’une boîte avec son parent et la disposition de ses enfants. Ce sont deux choix distincts. Un conteneur flexible peut occuper toute une ligne tout en disposant ses propres enfants côte à côte.

Lire display de l’extérieur vers l’intérieur

Le type d’affichage externe est de bloc ou en ligne. Le type d’affichage interne décrit la mise en page à l’intérieur de la boîte, par exemple un flux, une mise en page flexible ou une grille.

ValeurExtérieurIntérieur
blockBlocFlux normal
inline-blockEn ligneRégion de flux distincte
flexBlocMise en page flexible
inline-flexEn ligneMise en page flexible
gridBlocMise en page en grille
inline-gridEn ligneMise en page en grille

La syntaxe moderne à deux mots-clés rend cette distinction visible : display: inline flex signifie la même chose que inline-flex. display: block flow-root signifie la même chose que flow-root. Une valeur unique comme grid fournit par défaut un type externe de bloc.

Faire accepter des dimensions à une boîte en ligne
nav a {
  display: inline-block;
  padding: 12px 16px;
}

Chaque lien reste sur une ligne de texte, mais accepte désormais une largeur, une hauteur et des marges verticales. Sa marge intérieure verticale crée de la place dans la disposition des lignes au lieu d’être simplement dessinée sur les lignes voisines. Le lien dispose ainsi d’une cible de clic plus grande.

Les espaces et sauts de ligne entre les éléments inline-block dans le HTML apparaissent sous la forme d’un petit espace entre les boîtes. Si tu as besoin d’une rangée maîtrisée avec un espace précis, Flexbox le permet directement.

Modifier display ne change pas le sens de l’élément HTML. Une division mise en forme en ligne reste un conteneur générique. Choisis une liste, un lien ou un bouton selon sa fonction, puis mets sa boîte en forme.

Masquer une boîte avec l’effet voulu
RègleEffet sur la mise en page
display: noneL’élément et ses descendants ne génèrent aucune boîte.
visibility: hiddenLa boîte conserve son espace dans la mise en page pendant qu’elle est masquée.

Un message d’erreur masqué avec display: none ne crée aucun espace. L’afficher pousse le contenu suivant vers le bas. Utiliser visibility: hidden réserve l’espace : révéler le message n’a donc pas nécessairement besoin de déplacer quoi que ce soit. display: none empêche aussi le focus clavier et retire le contenu masqué de ce qu’annoncent les lecteurs d’écran. Une classe de masquage visuel a une autre fonction : garder le texte accessible aux lecteurs d’écran tout en le masquant visuellement.

Enfants et régions indépendantes

Avec ul { display: grid; }, les éléments de liste deviennent des éléments de grille. Les liens à l’intérieur de ces éléments de liste restent dans la mise en page de leur propre parent. Pour disposer ces liens, donne à l’élément de liste sa propre mise en page ou utilise une sous-grille lorsque des pistes partagées sont nécessaires.

display: contents supprime la boîte propre au conteneur pour que ses enfants participent à la mise en page environnante. Le comportement des navigateurs en matière d’accessibilité peut aussi supprimer le rôle du conteneur : évite donc cette valeur sur les contrôles porteurs de sens, les listes et les tableaux.

display: flow-root crée un contexte de formatage de bloc, une région de flux indépendante. Il contient les enfants flottants et empêche les marges du parent de fusionner avec celles de ses enfants. Il produit ces effets sans ajouter de découpage ni de barres de défilement.

Points clés

  • Display possède un type externe et un type interne.
  • Flex et grid concernent les enfants directs.
  • inline-block conserve le placement en ligne tout en acceptant les dimensions de boîte.
  • display: none supprime l’espace dans la mise en page ; visibility: hidden le conserve.
  • flow-root contient les éléments flottants et sépare les marges du parent et de ses enfants.
  • Utilise display: contents avec prudence, car le comportement des navigateurs peut supprimer le rôle accessible du conteneur.

1.3 Habillage du texte autour des éléments flottants

Dans un article, un portrait doit souvent être accompagné de texte sur quelques lignes, puis le texte doit reprendre toute la largeur en dessous. Un élément flottant crée cette disposition du texte. Il a un rôle différent de celui d’une barre latérale qui reste dans une colonne distincte.

Placer une image à côté du texte
img.portrait {
  float: left;
  width: 160px;
  margin: 0 16px 8px 0;
}

Place l’image avant les paragraphes qui doivent l’habiller. L’image se déplace vers le bord gauche de son conteneur. Le texte qui suit utilise l’espace à sa droite, en restant à 16 px horizontalement et à 8 px sous son bord inférieur. Une fois le bas de l’image dépassé, les lignes reprennent toute la largeur du conteneur. Utilise float: right pour le bord opposé et float: none pour supprimer le flottement.

Un élément flottant est retiré du flux normal, mais le contenu en ligne voisin continue à l’habiller. Les boîtes de bloc qui suivent ignorent elles-mêmes l’élément flottant : leurs arrière-plans et leurs bordures peuvent s’étendre derrière lui. Voir l’arrière-plan d’un paragraphe sous l’image ne signifie pas que son texte ne l’habille pas correctement.

Un élément flottant devient une boîte de niveau bloc. Un <span> flottant peut donc accepter une largeur et une hauteur. Sans largeur définie, une boîte de texte flottante se réduit pour s’adapter à son contenu ; une image possède ses propres dimensions.

Commencer la section suivante sous l’image

Supposons que le texte soit plus court que le portrait et qu’un nouveau titre de section commence à côté de celui-ci. La propriété clear contrôle cette disposition :

.next-section {
  clear: both;
}

Le titre se déplace sous les éléments flottants précédents, quel que soit leur côté. clear: left ne le place que sous les éléments flottants à gauche ; clear: right uniquement sous ceux à droite. Appliquer clear à un titre ultérieur ne transforme pas pour autant l’image précédente en bloc ordinaire.

Faire contenir les éléments flottants par le parent

Un parent qui ne possède que des enfants flottants ne tire d’eux aucune hauteur dans le flux normal. Son arrière-plan et sa bordure peuvent sembler réduits, et le contenu suivant peut remonter à côté des éléments flottants. Fais en sorte que le parent les contienne :

.profile {
  display: flow-root;
}

La hauteur du parent englobe désormais l’image flottante. C’est différent de clear : flow-root modifie la région de flux du parent, tandis que clear déplace un élément suivant sous les éléments flottants.

Les feuilles de style plus anciennes contiennent souvent un clearfix : un pseudo-élément ::after avec content: "", display: block et clear: both. Tu peux aussi rencontrer overflow: auto utilisé pour contenir les éléments flottants. Cette solution peut ajouter un défilement lorsque le contenu est trop grand ; flow-root exprime directement le confinement recherché.

Reconnaître les anciennes mises en page en colonnes

Avant Flexbox et les grilles, les colonnes de page étaient souvent flottantes, avec des largeurs en pourcentage et des règles clear. Assure la maintenance de ces règles en comprenant les éléments flottants, mais choisis Flexbox ou une grille pour les nouvelles colonnes qui nécessitent un dimensionnement et un alignement.

Un enfant direct d’un conteneur flexible ou de grille suit cette mise en page : float n’a donc aucun effet sur cet élément. Si le texte cesse d’habiller une image flottante après l’ajout de display: flex à son parent, inspecte d’abord la mise en page du parent.

Points clés

  • Un élément flottant permet au contenu en ligne qui suit de l’habiller.
  • clear déplace une boîte ultérieure sous les éléments flottants précédents.
  • flow-root permet à un parent de contenir ses enfants flottants.
  • Les éléments flottants n’ont aucun effet sur les éléments flexibles ou de grille.
2

Positionnement et couches superposées

Le positionnement contrôle les décalages, les calques de superposition et les éléments qui restent visibles pendant le défilement. L’essentiel est de savoir quel espace une boîte conserve et quel ancêtre lui sert de référence. Pars d’un badge dans une carte pour passer aux contrôles fixes et aux titres adhérents, puis examine les couches superposées. Les contextes d’empilement expliquent pourquoi un menu déroulant peut rester masqué même lorsque son propre z-index est très élevé et montrent quel ancêtre doit réellement être modifié.

2.1 Les décalages et leur boîte de référence

Le positionnement permet à une boîte d’en chevaucher une autre ou de s’éloigner de sa place normale. Avant de définir un décalage, décide si la boîte doit conserver son espace d’origine et quel ancêtre doit lui servir de référence.

Positionnements statique, relatif et absolu
PositionEspace dans le flux normalRéférence des décalages
staticConservéLes décalages n’ont aucun effet
relativeConservéPosition d’origine de la boîte
absoluteSuppriméSon bloc englobant

Avec position: relative; top: 10px; left: 20px, une boîte est dessinée 10 px plus bas et 20 px plus à droite que sa position d’origine. Ses voisins restent à leur place. L’espace d’origine est conservé : un grand décalage peut donc faire chevaucher la boîte et ses voisins.

Un parent positionné en relatif n’a pas besoin de décalage pour servir de référence à un enfant positionné en absolu. C’est un usage courant du positionnement relatif.

Ancrer un badge à une carte
.card {
  position: relative;
}
.badge {
  position: absolute;
  top: 8px;
  right: 8px;
}

Le badge est hors du flux normal : la carte ne lui réserve donc aucun espace. Ses bords supérieur et droit sont situés 8 px vers l’intérieur à partir des bords de la marge intérieure de la carte. Laisse assez de place dans le contenu de la carte pour qu’un long titre ne passe pas sous le badge.

Le bloc englobant d’une boîte positionnée en absolu est généralement la boîte incluant la marge intérieure de son ancêtre positionné le plus proche. Un élément positionné possède une valeur de position autre que static. Si la carte reste statique, le badge cherche plus haut dans la chaîne des ancêtres. En l’absence d’ancêtre répondant à ce critère, il utilise le bloc englobant initial : un rectangle de la taille de la zone d’affichage, situé en haut du document et qui défile avec la page. Une propriété transform, filter ou perspective d’un ancêtre dont la valeur est autre que none peut aussi établir cette référence.

Étendre ou centrer un calque de superposition

Une boîte positionnée en absolu, de taille automatique et dont les décalages ne l’étirent pas, se réduit pour s’adapter à son contenu. Définir les décalages gauche et droit avec une largeur automatique lui fait remplir l’espace entre les deux ; la paire supérieure et inférieure fonctionne de façon similaire pour une hauteur automatique.

.overlay {
  position: absolute;
  inset: 0;
}

inset définit ensemble les décalages supérieur, droit, inférieur et gauche. Avec des dimensions automatiques et sans marges, ce calque remplit le bloc englobant. Une largeur ou une hauteur définie modifie le dimensionnement : supprime donc ces limites lorsque le calque doit couvrir toute la boîte.

Pour centrer un badge de dimensions inconnues, utilise top: 50%; left: 50%; transform: translate(-50%, -50%). Les décalages déplacent son coin supérieur gauche au centre du bloc englobant. La translation le ramène en arrière de la moitié de sa propre largeur et de sa propre hauteur. Lorsque la largeur et la hauteur sont connues, inset: 0; margin: auto constitue une autre méthode de centrage.

Vérifier la référence des pourcentages

Un parent en content-box avec width: 400px et une marge intérieure horizontale de 20 px possède une boîte incluant la marge intérieure de 440 px. Un enfant positionné en absolu avec width: 50% possède donc une largeur de contenu de 220 px. Mesurer uniquement la boîte de contenu de 400 px du parent donne un résultat erroné.

Utilise le positionnement absolu pour un badge, une infobulle ou un calque de superposition. Les colonnes d’une page ont besoin de boîtes qui réagissent aux dimensions les unes des autres ; Flexbox, les grilles et le flux normal offrent cette relation.

Points clés

  • Le positionnement relatif conserve l’espace d’origine ; le positionnement absolu le supprime.
  • Une boîte positionnée en absolu mesure généralement ses décalages à partir de la boîte incluant la marge intérieure de son ancêtre positionné le plus proche.
  • inset: 0 étire un calque positionné en absolu et de taille automatique jusqu’aux bords de son bloc englobant.
  • Les pourcentages des décalages et ceux de la translation utilisent des boîtes de référence différentes.
  • Utilise le flux normal, Flexbox ou une grille pour la structure principale de la page.

2.2 Les éléments qui restent visibles pendant le défilement

Un contrôle de retour en haut et un en-tête de tableau doivent tous deux rester visibles, mais ils entretiennent des relations différentes avec la page. Le positionnement fixe attache un contrôle à une fenêtre de référence. Le positionnement adhérent garde une boîte dans le flux et limite son déplacement à sa section.

Fixer un contrôle à la zone d’affichage
.back-to-top {
  position: fixed;
  right: 16px;
  bottom: 16px;
}

Le bouton reste dans le coin inférieur droit de la fenêtre pendant le défilement du document. Il ne prend aucune place dans le flux normal. Un en-tête fixe ne réserve pas non plus d’espace et peut recouvrir le premier paragraphe.

Pour un en-tête fixe de 64 px, body { padding-top: 64px; } laisse de la place pour le premier contenu. Définis aussi html { scroll-padding-top: 64px; } pour que les liens vers les sections ne placent pas leurs titres cibles sous l’en-tête. Donne un arrière-plan à l’en-tête pour que le texte qui défile derrière ne transparaisse pas.

Une propriété transform, filter ou perspective d’un ancêtre dont la valeur est autre que none peut faire de cet ancêtre le bloc englobant de l’élément fixe. L’élément reste alors à l’intérieur de cet ancêtre et peut défiler avec lui. Inspecte les ancêtres lorsqu’un contrôle fixe se déplace avec la page sans que tu t’y attendes.

Faire adhérer un titre dans une section
thead th {
  position: sticky;
  top: 0;
  background: white;
}

Un titre adhérent occupe d’abord sa place normale. Lorsque le défilement le ferait passer au-dessus du seuil top: 0, il reste à ce seuil. Il ne peut pas dépasser son bloc englobant : la fin de sa section finit par le pousser hors de la zone visible. C’est utile pour les longs tableaux et la navigation entre sections.

ComportementFixeAdhérent
Espace dans le flux normalSuppriméRéservé
Commence à sa place habituelleNonOui
S’arrête à la fin de sa sectionNonOui

La zone d’affichage est la référence habituelle du positionnement fixe. Le positionnement adhérent utilise l’ancêtre de défilement pertinent le plus proche ; la page sert de référence lorsqu’aucune boîte de défilement plus proche n’intervient.

Diagnostiquer une boîte adhérente qui n’adhère pas

Vérifie ces causes dans l’ordre :

  1. Définis un décalage autre que auto sur l’axe où l’élément doit adhérer, comme top: 0 pour un défilement vertical. Le mot-clé sticky seul ne définit aucun seuil.
  2. Cherche parmi les ancêtres ceux qui possèdent overflow: hidden, auto ou scroll. Ils peuvent devenir la référence de l’élément adhérent même lorsqu’une autre boîte défile réellement.
  3. Compare la hauteur de la boîte adhérente à celle de son bloc englobant. Un conteneur qui n’est pas plus haut que son titre ne laisse à celui-ci aucune place pour se déplacer.

Une barre latérale adhérente dans une grille peut aussi s’étirer sur toute la hauteur de la ligne. align-self: start lui permet de garder la hauteur de son contenu et lui laisse de la place pour se déplacer.

Garder le contenu et le focus visibles

Les barres fixes et adhérentes utilisent une partie de l’écran visible. Lorsque le texte est agrandi à 200 %, une barre de navigation peut devenir beaucoup plus haute. Teste la navigation au clavier ainsi que le défilement. Le critère 2.4.11 des WCAG 2.2, Focus non masqué (minimum), exige que le contenu ajouté par l’auteur ne masque pas entièrement un élément ayant le focus. Garde les barres peu hautes et prévois un espace de défilement adapté autour des cibles.

Points clés

  • Le positionnement fixe retire la boîte du flux ; le positionnement adhérent conserve sa place.
  • Le positionnement adhérent nécessite un décalage et de la place pour se déplacer dans son bloc englobant.
  • La propriété overflow d’un ancêtre peut modifier la référence du positionnement adhérent.
  • Réserve de l’espace pour les en-têtes fixes et vérifie que le contenu ayant le focus reste visible.

2.3 Niveaux et contextes d’empilement

Lorsque des boîtes se chevauchent, l’ordre d’empilement détermine celle que tu vois au premier plan. Une valeur de z-index plus élevée peut faire passer une boîte devant, mais uniquement dans le groupe où cette valeur est comparée.

Faire appliquer z-index

z-index fonctionne sur les éléments positionnés ainsi que sur les éléments flexibles ou de grille. Un paragraphe statique dans le flux normal l’ignore. Un élément de grille statique peut l’utiliser sans ajouter position: relative.

Sans niveaux explicites, les boîtes positionnées sont dessinées au-dessus des boîtes ordinaires non positionnées. Pour des boîtes comparables au même niveau, celle qui se trouve le plus loin dans le HTML est dessinée au-dessus. Les valeurs positives, nulles et négatives de z-index te donnent davantage de contrôle sur cet ordre.

Un contexte est empilé comme une seule unité

Un contexte d’empilement contient un groupe que le navigateur empile comme un tout. Le niveau d’un enfant ne peut pas faire passer le groupe au-dessus d’un contexte frère situé plus haut.

.site-header {
  position: relative;
  z-index: 1;
}
.menu {
  position: absolute;
  z-index: 9999;
}
main {
  position: relative;
  z-index: 2;
}

Ici, .menu se trouve dans .site-header, tandis que main est son élément frère. Compare d’abord les groupes extérieurs : l’en-tête est au niveau 1 et main au niveau 2. Main est dessiné au-dessus de tout l’en-tête, y compris du menu. Augmenter 9 999 ne change que la place du menu dans l’en-tête.

Augmente le niveau de l’en-tête lui-même, par exemple à z-index: 3, ou supprime le niveau inutile sur main. Choisis la modification qui correspond à l’ordre voulu pour toute la page.

Trouver ce qui crée le groupe

L’élément racine crée un contexte d’empilement. Parmi les autres causes courantes :

  • Une boîte positionnée en relatif ou en absolu avec un z-index autre que auto.
  • Un élément flexible ou de grille avec un z-index autre que auto.
  • Toute boîte fixe ou adhérente.
  • Une valeur de opacity inférieure à 1, ou une valeur de transform ou filter autre que none.
  • isolation: isolate.

Un parent avec opacity: 0.9 peut donc piéger un menu déroulant même si personne n’a défini de niveau sur ce parent. Remonte les ancêtres dans les outils de développement lorsqu’un nombre plus élevé ne produit aucune différence visible. Cherche la première paire de groupes frères dont l’ordre est incorrect.

Garder les décorations à l’intérieur d’un composant
.panel {
  position: relative;
  isolation: isolate;
}
.panel-decoration {
  position: absolute;
  inset: 0;
  z-index: -1;
}

isolation: isolate crée un contexte sans changer l’apparence du panneau. L’enfant dont le niveau est négatif est dessiné derrière le texte du panneau mais au-dessus de son arrière-plan. Sans contexte local, il peut passer derrière l’arrière-plan du parent et disparaître.

Utilise une petite échelle partagée pour les couches prévues sur la page : par exemple, 1 pour les cartes surélevées, 10 pour un en-tête adhérent, 100 pour les menus déroulants et 1 000 pour une boîte de dialogue modale. Les propriétés personnalisées CSS telles que --z-dropdown: 100 facilitent la maintenance de ces choix.

Points clés

  • z-index s’applique aux boîtes positionnées et aux éléments flexibles ou de grille.
  • Un contexte d’empilement est comparé aux contextes voisins comme une seule unité.
  • Un niveau élevé sur un enfant ne peut pas le faire sortir d’un contexte ancêtre de niveau inférieur.
  • L’opacité et les transformations peuvent créer des contextes inattendus.
  • isolation: isolate confine les niveaux d’empilement d’un composant.
  • Utilise une petite échelle partagée après avoir vérifié les contextes des ancêtres.
3

Rangées et colonnes avec Flexbox

Flexbox transforme un groupe d’enfants en une rangée ou une colonne qui peut se partager l’espace disponible. Ses axes expliquent la direction et l’alignement, tandis que la base, l’agrandissement et le rétrécissement expliquent les dimensions finales. Étudie une rangée avec retour à la ligne et fais les calculs avant de choisir les espaces, les marges automatiques et l’alignement. Tu verras aussi pourquoi modifier l’ordre visuel peut perturber la navigation au clavier et pourquoi une longue ligne de code peut empêcher une colonne flexible de rétrécir.

3.1 Rangées, colonnes et retour à la ligne avec Flexbox

Flexbox dispose un groupe selon une direction principale. Il convient aux liens de navigation, aux barres d’outils et aux autres éléments dont les dimensions dépendent de leur contenu. Une mise en page flexible avec retour à la ligne peut comporter plusieurs lignes, mais chacune partage son espace indépendamment.

Créer le conteneur
.nav {
  display: flex;
}

Les enfants directs de la navigation deviennent des éléments flexibles. Un lien dans un élément de liste n’est pas un élément flexible de la navigation, sauf s’il en est aussi un enfant direct. Le texte placé directement dans le conteneur forme un élément flexible anonyme.

Par défaut, les éléments sont disposés en rangée, sans retour à la ligne ni agrandissement, mais peuvent rétrécir. Ils commencent au bord de début de l’axe principal. Dans une rangée horizontale, les éléments de hauteur automatique s’étirent jusqu’à la hauteur de la ligne et semblent donc souvent avoir la même hauteur.

Nommer les axes avant d’aligner

L’axe principal suit flex-direction. L’axe secondaire lui est perpendiculaire. Dans un texte horizontal en français :

DirectionAxe principalDébut du premier élément
rowHorizontalÀ gauche
row-reverseHorizontalÀ droite
columnVerticalEn haut
column-reverseVerticalEn bas

Une rangée suit la direction en ligne : son début se trouve donc à droite dans un texte écrit de droite à gauche. Une colonne suit la direction de bloc. Les termes principal et secondaire décrivent des rôles, pas des directions horizontale et verticale permanentes.

justify-content agit sur l’axe principal. align-items agit sur l’axe secondaire. Après le passage d’une rangée à une colonne, justify-content: center centre verticalement, à condition qu’il reste de la hauteur disponible.

Calculer quels éléments tiennent
.cards {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}
.card {
  flex: 1 1 200px;
}

Considère cinq cartes dans une zone de contenu de 700 px de large. Chacune commence à 200 px et peut grandir ou rétrécir. Trois cartes et deux espaces nécessitent 632 px ; quatre cartes et trois espaces nécessitent 848 px. Trois cartes tiennent sur la première ligne.

La première ligne se partage 700 px moins 32 px d’espaces : chaque carte mesure environ 222,7 px de large. Les deux restantes se partagent 700 px moins un espace de 16 px : chacune mesure 342 px de large. Les éléments de la seconde ligne n’héritent pas des largeurs de la première. Utilise une grille lorsque les colonnes doivent être alignées d’une ligne à l’autre.

flex-flow: row wrap est une propriété raccourcie pour la direction et le retour à la ligne. Sans retour à la ligne, Flexbox garde tous les éléments sur une seule ligne et les fait rétrécir lorsque leurs limites de dimensionnement le permettent.

Garder un ordre de lecture cohérent

order vaut 0 par défaut. Les valeurs les plus faibles apparaissent en premier ; order: -1 place un élément avant les éléments ordinaires. Les directions inversées et order changent l’ordre d’affichage, tandis que les lecteurs d’écran et le focus clavier normal suivent toujours le HTML.

Garde les séquences importantes dans un ordre cohérent dans le HTML. Modifier l’ordre visuel peut faire sauter une personne qui utilise le clavier d’un endroit à l’autre de l’écran et peut contrevenir aux critères WCAG 1.3.2, Ordre séquentiel logique, ou 2.4.3, Parcours du focus, lorsque le sens ou l’utilisation en pâtit.

Un élément peut aussi être un conteneur. Une carte dans une rangée flexible peut utiliser son propre display: flex; flex-direction: column pour empiler son contenu. Utilise inline-flex lorsque le conteneur externe doit se placer dans une ligne de texte, comme un bouton contenant une icône et un libellé.

Points clés

  • Flexbox modifie la mise en page des enfants directs.
  • La direction définit l’axe principal ; l’axe secondaire lui est perpendiculaire.
  • Les lignes flexibles issues d’un retour à la ligne sont dimensionnées indépendamment.
  • Les changements d’ordre visuel ne modifient pas l’ordre de lecture ou de focus du HTML.
  • Un élément flexible peut contenir sa propre mise en page flexible.

3.2 Comment les éléments flexibles grandissent et rétrécissent

Flexbox commence par attribuer une taille à chaque élément, puis ajuste ces tailles pour les adapter au conteneur. Les trois parties de flex contrôlent cet ajustement : agrandissement, rétrécissement et base, dans cet ordre.

Partir de la base

flex-basis fournit la taille de départ sur l’axe principal. Avec auto, elle utilise la largeur de l’élément dans une rangée ou sa hauteur dans une colonne ; si cette dimension est également automatique, c’est le contenu qui la détermine. Une base explicite prend le pas sur la largeur, tandis que les tailles minimale et maximale limitent toujours le résultat final.

Soustrais toutes les bases et tous les espaces de la taille du contenu du conteneur. Un résultat positif représente l’espace libre disponible pour l’agrandissement. Un résultat négatif représente l’espace que les éléments doivent céder.

Partager l’espace positif

Trois éléments dans une rangée de 600 px ont chacun une base de 100 px et des facteurs d’agrandissement de 1, 1 et 2. Sans espaces, les bases occupent 300 px et il reste 300 px. Les quatre parts d’agrandissement divisent ce reste en parts de 75 px chacune. Les tailles finales sont de 175 px, 175 px et 250 px.

Ajoute maintenant gap: 20px. Deux espaces occupent 40 px et il reste 260 px après déduction des bases. Chaque part passe à 65 px ; les largeurs finales deviennent 165 px, 165 px et 230 px. Un facteur de 2 double l’espace ajouté, pas la largeur finale entière.

Céder de l’espace par un rétrécissement pondéré

Deux éléments dont les bases mesurent 300 px et 400 px occupent un conteneur de 500 px sans espace entre eux. Ils doivent perdre 200 px. Si les deux ont flex-shrink: 1, leurs poids de rétrécissement sont 300 et 400 : chaque facteur est multiplié par sa taille de base.

Le premier perd environ 85,7 px et mesure finalement environ 214,3 px. Le second perd environ 114,3 px et mesure finalement environ 285,7 px. Des facteurs de rétrécissement égaux ne signifient pas des pertes égales en pixels. flex-shrink: 0 protège la taille de base d’un élément, ce qui est utile pour un avatar ou un logo.

Ces calculs décrivent des éléments sans marges intérieures, bordures, marges extérieures ou limites de taille qui modifieraient le résultat. Vérifie ces contraintes lorsqu’une mise en page réelle donne un résultat différent.

Lire les valeurs raccourcies courantes
DéclarationValeur développéePoint de départ
flex: initial0 1 autoLargeur ou contenu ; peut rétrécir
flex: auto1 1 autoLargeur ou contenu ; peut grandir ou rétrécir
flex: none0 0 autoLargeur ou contenu ; conserve cette taille
flex: 11 1 0%Base nulle dans une rangée de largeur définie

Deux éléments dont le contenu mesure 80 px et 200 px de large dans une rangée de 600 px atteignent 240 px et 360 px avec flex: auto : chacun gagne la moitié des 320 px restants. Avec flex: 1 et sans minimum limitant, les deux partent de zéro et atteignent 300 px de large.

Permettre à une colonne flexible de rétrécir

Le minimum automatique d’un élément flexible peut le maintenir aussi large qu’une URL ou une ligne de code sans coupure. Autorise le rétrécissement de l’élément et gère le contenu à l’intérieur :

.sidebar { flex: 0 0 240px; }
.main { flex: 1; min-width: 0; }
.main pre { overflow-x: auto; }

La barre latérale reste large de 240 px. La région principale prend le reste. Le code défile à l’intérieur de la région principale au lieu de forcer toute la page à s’élargir. Pour du texte long ordinaire, overflow-wrap: anywhere autorise les coupures. Un minimum nul rend de l’espace disponible ; il ne provoque pas à lui seul le retour à la ligne ou le défilement du contenu.

Points clés

  • L’ordre de la propriété raccourcie est agrandissement, rétrécissement, base.
  • Les facteurs d’agrandissement répartissent l’espace ajouté, pas les largeurs finales.
  • Les pertes dues au rétrécissement dépendent de chaque facteur multiplié par sa taille de base.
  • Une base autre que auto prend le pas sur la largeur.
  • flex: 1 et flex: auto utilisent des tailles de départ différentes.
  • min-width: 0 autorise le rétrécissement ; le débordement du contenu intérieur doit toujours être traité de façon adaptée.

3.3 Espacement et alignement avec Flexbox

L’alignement intervient après le dimensionnement. Repère l’axe principal, l’axe secondaire et l’espace restant sur chacun. Une propriété peut être valide sans produire de différence visible lorsqu’il ne reste plus de place à répartir.

Partager l’espace sur l’axe principal

justify-content positionne le groupe sur l’axe principal. Pour trois éléments de 100 px dans une rangée de 600 px sans espace entre eux, il reste 300 px :

ValeurRésultat
center150 px avant et après le groupe
space-between150 px entre les éléments voisins ; rien aux extrémités
space-around50 px à chaque extrémité extérieure ; 100 px entre les éléments voisins
space-evenlyQuatre espaces égaux de 75 px

flex-start regroupe les éléments au début de l’axe principal ; flex-end les regroupe à la fin. start et end suivent la direction d’écriture. Dans un conteneur row-reverse en français, flex-start regroupe les éléments contre le bord droit, mais start les regroupe contre le bord gauche.

Si des éléments avec flex: 1 utilisent tout l’espace de la ligne, justify-content n’a plus rien à répartir. Réduire ou supprimer l’agrandissement change cette situation.

Aligner dans chaque ligne

align-items positionne les éléments sur l’axe secondaire à l’intérieur de leur ligne. La valeur habituelle par défaut, stretch, permet aux éléments de hauteur automatique d’une rangée de remplir la hauteur de la ligne. Un élément dont la hauteur est définie ne s’étire pas ainsi. Utilise center, start ou end pour d’autres positions, ou baseline pour aligner des textes de tailles différentes sur leur ligne de base.

align-self remplace ce choix pour un élément. Flexbox ne possède pas de justify-self : les éléments partagent l’axe principal en tant que groupe. justify-items n’aligne pas non plus les éléments flexibles.

Pour centrer un enfant unique dans les deux directions, définis justify-content: center; align-items: center sur son parent flexible. Un parent plus haut, par exemple avec min-height: 100vh, laisse assez de place pour que le centrage vertical soit visible. Si l’élément unique remplit déjà la dimension de la ligne sur l’axe secondaire, le centrer sur cet axe ne produit aucun déplacement.

Séparer des groupes avec des marges automatiques
nav {
  display: flex;
  align-items: center;
  gap: 16px;
}
.logo {
  margin-inline-end: auto;
}

Dans un texte horizontal en français, le logo reste à gauche tandis que les liens se déplacent à droite. Sa marge automatique de fin absorbe l’espace restant. Une marge automatique de début sur un élément pousse au contraire cet élément et ceux qui le suivent vers la fin. Les marges logiques s’adaptent lorsque la direction du texte change.

Un élément unique avec margin: auto peut être centré sur les deux axes. Lorsqu’un élément est trop grand, les marges automatiques évitent de placer son débordement au-delà du bord de début inaccessible, ce que peut faire un centrage ordinaire.

Distinguer les lignes des éléments

align-content déplace les lignes en groupe sur l’axe secondaire dans un conteneur avec retour à la ligne qui dispose d’espace libre. Cette propriété n’a aucun effet avec flex-wrap: nowrap. Avec wrap, elle peut tout de même positionner une ligne même si les éléments actuels tiennent sur une seule ligne. align-items gère les éléments à l’intérieur de chaque ligne.

gap: 16px 24px définit un espace de 16 px entre les lignes et de 24 px entre les colonnes. La propriété gap crée de l’espace entre les éléments et les lignes, jamais autour de l’extérieur du conteneur. Ajoute une marge intérieure pour obtenir un espace extérieur. Tout espace réparti par l’alignement s’ajoute à l’espace défini par gap.

Points clés

  • justify-content répartit l’espace restant sur l’axe principal.
  • flex-start suit la direction flexible ; start suit la direction d’écriture.
  • align-items aligne les éléments dans les lignes ; align-content répartit les lignes issues d’un retour à la ligne.
  • Les marges automatiques absorbent l’espace libre et peuvent séparer des groupes.
  • Gap ajoute des espaces intérieurs ; la marge intérieure ajoute un espace extérieur.
  • Utilise align-self pour aligner un élément sur l’axe secondaire.
  • Flexbox ne prend pas en charge justify-self pour placer un élément individuellement sur l’axe principal.
4

Des pistes partagées avec les grilles

Une grille donne à plusieurs lignes un ensemble de colonnes partagées et permet à chaque boîte de s’étendre sur ces pistes ou de les chevaucher. Définis les dimensions, calcule les parts fractionnaires et place les éléments à l’aide de limites ou de zones nommées. Laisse ensuite le placement automatique gérer une collection qui s’agrandit et compare auto-fill à auto-fit. Pour finir, distingue l’alignement des éléments dans leurs zones de l’alignement des pistes dans l’ensemble du conteneur, afin que chaque propriété déplace la partie voulue.

4.1 Les pistes de grille et l’espace qu’elles se partagent

Une grille définit ensemble des lignes et des colonnes. Définis les pistes sur un conteneur, puis laisse ses enfants directs les occuper. Contrairement aux lignes flexibles issues d’un retour à la ligne, les lignes d’une grille partagent la même structure de colonnes.

Nommer les parties

Une piste est une ligne ou une colonne située entre deux lignes de grille. Une cellule est l’intersection d’une ligne et d’une colonne. Une zone de grille est un rectangle d’une ou de plusieurs cellules. Des espaces séparent les pistes.

.dashboard {
  display: grid;
  grid-template-columns: 200px 1fr 2fr;
  gap: 20px;
}

grid-template-columns définit les colonnes explicites ; grid-template-rows définit les lignes explicites. Sans colonnes explicites, une grille possède une colonne et ses éléments s’empilent en lignes.

Calculer une part en fr

L’unité fr partage l’espace restant après déduction des pistes fixes et des espaces. Dans un conteneur de 900 px, l’exemple comporte une colonne fixe de 200 px et deux espaces de 20 px. Soustrais-les d’abord : il reste 660 px. Les deux colonnes flexibles demandent trois parts au total ; une part mesure donc 220 px. Les largeurs sont de 200 px, 220 px et 440 px.

Les fractions divisent l’espace restant pour les pistes, pas les 900 px entiers. Une piste 2fr reçoit deux fois la part flexible d’une piste 1fr lorsque les tailles minimales ne les contraignent pas.

Répéter des pistes et définir des limites

repeat(4, 1fr) est une forme raccourcie pour quatre pistes flexibles égales. Il est aussi possible de répéter un motif : repeat(2, 100px 1fr) crée 100px 1fr 100px 1fr.

Les dimensions des pistes peuvent aussi utiliser des longueurs, des pourcentages, auto, min-content et max-content. Les mots-clés relatifs au contenu demandent des dimensions fondées sur les besoins intrinsèques du contenu.

minmax(150px, 1fr) donne à une piste un minimum de 150 px et un maximum flexible. Pour les lignes créées automatiquement, utilise grid-auto-rows: minmax(100px, auto) afin d’obtenir un minimum de 100 px tout en permettant à un contenu plus haut d’agrandir une ligne.

Une piste 1fr seule possède un minimum automatique, comme minmax(auto, 1fr). Une longue URL sans coupure peut rendre une colonne plus large que les autres. Utilise repeat(3, minmax(0, 1fr)) lorsque les colonnes doivent se partager également la largeur disponible, et prévois le retour à la ligne ou le défilement du contenu trop grand à l’intérieur.

Garder les espaces dans la largeur disponible

gap: 16px 32px signifie 16 px entre les lignes et 32 px entre les colonnes. Cette propriété ne crée aucune marge intérieure autour de la grille.

Trois colonnes de 33.33% utilisent déjà presque toute la largeur d’un conteneur de 900 px. Deux espaces de 20 px ajoutent alors environ 40 px au-delà de sa largeur. Les pistes fractionnaires tiennent compte de ces espaces avant de partager la place ; repeat(3, 1fr) évite donc ce débordement dû aux pourcentages et aux espaces lorsque les minimums du contenu tiennent dans le conteneur.

Laisser les lignes s’adapter au contenu

grid-template-rows: auto 1fr auto convient à un en-tête, une région principale et un pied de page. Les lignes extérieures s’adaptent à leur contenu. Lorsqu’une hauteur ou une hauteur minimale de conteneur est à remplir, la ligne centrale prend la hauteur restante. Garde de la place pour un contenu qui grandit ; une hauteur minimale de page permet à une page plus longue de s’agrandir.

Points clés

  • Les lignes et les colonnes sont des pistes délimitées par des lignes de grille.
  • fr partage l’espace après déduction des pistes fixes et des espaces.
  • repeat() peut répéter une dimension ou un motif de pistes.
  • minmax() définit les dimensions minimale et maximale d’une piste.
  • minmax(0, 1fr) supprime le minimum automatique d’une piste flexible.
  • Les pistes en pourcentage peuvent déborder lorsque des espaces sont ajoutés.

4.2 Placer les éléments avec les lignes et les zones nommées

Le placement dans une grille décrit les limites d’un élément. Compte les lignes de grille autour des colonnes et des lignes, ou nomme une région rectangulaire et places-y l’élément. Les deux méthodes disposent les boîtes sans modifier leur ordre dans le HTML.

Compter les limites, pas les colonnes

Une grille à trois colonnes possède quatre lignes de grille verticales. Dans un texte horizontal en français, la ligne verticale 1 est à gauche et la ligne horizontale 1 est en haut. Les nombres négatifs comptent à rebours depuis la fin de la grille explicite : -1 est sa dernière ligne.

DéclarationPlacement
grid-column: 1 / 3Couvre les deux premières colonnes
grid-column: 1 / -1S’étend sur toute la largeur de la grille explicite
grid-column: 2 / span 2Commence à la ligne 2 et couvre deux colonnes
grid-column: span 2Couvre deux colonnes à un emplacement automatique

Pour couvrir trois colonnes à partir de la ligne 1, termine à la ligne 4. Terminer à la ligne 3 ne couvre que deux pistes.

Dans un tableau de bord à quatre colonnes et trois lignes, place un graphique avec grid-column: 1 / 4; grid-row: 1 / 3. Il occupe trois colonnes et deux lignes : six cellules. Un panneau de statistiques placé avec grid-column: 4; grid-row: 1 / 3 occupe la dernière colonne à côté. Un tableau placé avec grid-column: 1 / -1; grid-row: 3 remplit la troisième ligne.

Dessiner la page avec des noms de zones
.page {
  display: grid;
  grid-template-columns: 220px minmax(0, 1fr);
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "nav    main"
    "footer footer";
}
header { grid-area: header; }
nav    { grid-area: nav; }
main   { grid-area: main; }
footer { grid-area: footer; }

Chaque chaîne décrit une ligne et chaque mot décrit une cellule. Répéter header sur la première ligne permet à l’en-tête de couvrir les deux colonnes. Un point marque une cellule vide. Chaque ligne doit contenir le même nombre de cellules et chaque nom répété doit former un rectangle. Une zone nommée en forme de L rend toute la déclaration grid-template-areas invalide.

Une zone appelée main crée aussi des lignes appelées main-start et main-end. Tu peux utiliser ces noms pour les limites d’un autre élément. Définis des noms de lignes personnalisés entre crochets dans la liste des pistes, comme [content-start] 600px [content-end].

Superposer des éléments dans une zone de grille

Une image et sa légende peuvent toutes deux utiliser grid-area: 1 / 1. Elles partagent la première cellule ; la légende, située plus loin dans le HTML, est dessinée sur l’image. align-self: end déplace la légende vers le bas de cette zone. Les éléments de grille acceptent z-index sans nécessiter une position non statique : tu peux donc modifier explicitement leur ordre de superposition.

Préserver l’ordre de lecture

Le placement manuel modifie l’apparence, pas l’ordre du HTML suivi par les lecteurs d’écran et le focus clavier. Garde les instructions, les titres et les liens dans un ordre cohérent dans le code source. Une mise en page peut sembler logique alors que la navigation par tabulation saute entre des cellules éloignées ; cela peut contrevenir aux critères WCAG 1.3.2 ou 2.4.3 lorsque le sens ou l’utilisation en pâtit.

Points clés

  • Le placement utilise les lignes de grille ; trois pistes ont quatre limites.
  • -1 désigne la dernière ligne de la grille explicite.
  • Chaque zone nommée doit être rectangulaire et toutes les lignes du modèle doivent avoir le même nombre de cellules.
  • Des éléments peuvent se chevaucher dans une même zone et utiliser z-index sans positionnement.
  • Le placement dans une grille ne modifie pas l’ordre de lecture ou de focus.

4.3 Des grilles automatiques adaptées à leur contenu

Une liste de produits peut passer de quelques cartes à un grand nombre sans modification de son CSS. Définis les colonnes, laisse le placement automatique créer les lignes et choisis si les colonnes inutilisées doivent conserver leur espace.

Laisser les éléments trouver la cellule suivante

La valeur par défaut grid-auto-flow: row place les éléments sans position définie dans l’ordre du code source, en parcourant une ligne puis en descendant à la suivante. Elle saute les cellules occupées. Les pistes supplémentaires forment la grille implicite.

.products {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: minmax(150px, auto);
}

Sept éléments créent trois lignes. La dernière ligne contient un élément. Chaque ligne mesure au moins 150 px de haut et peut grandir avec son contenu. Les pistes explicites proviennent du modèle ; les pistes implicites sont ajoutées selon les besoins du placement.

Les numéros de ligne négatifs ne comptent que dans la grille explicite. Si tu définis des colonnes mais aucune ligne, grid-row: 1 / -1 ne peut pas désigner toutes les lignes créées automatiquement. Définis des lignes explicites lorsqu’un élément doit couvrir toute leur hauteur.

grid-auto-flow: column remplit les colonnes et crée des colonnes supplémentaires dimensionnées par grid-auto-columns. Ajouter dense permet à des éléments plus petits situés plus loin dans le code de combler les trous laissés par des éléments qui s’étendent davantage. Cela peut modifier l’ordre visuel : évite donc cette valeur pour des instructions ordonnées ou tout autre contenu dont l’ordre compte.

Compter les colonnes à partir d’un minimum
.products {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 16px;
}

Dans une zone de contenu de 1 000 px de large, quatre colonnes de 200 px et trois espaces de 16 px nécessitent 848 px. Cinq colonnes et quatre espaces nécessitent 1 064 px : seules quatre colonnes tiennent donc. Leurs largeurs finales flexibles sont de 238 px : soustrais 48 px d’espaces et divise les 952 px restants par quatre.

À 500 px, deux colonnes à leur minimum et un espace nécessitent 416 px ; trois nécessitent 632 px. Deux tiennent et chacune atteint 242 px. Le nombre de colonnes change avec l’espace disponible sans point de rupture.

Choisir le sort des colonnes inutilisées

Avec assez d’éléments, auto-fill et auto-fit donnent le même aspect. Avec seulement trois éléments dans cette grille de 1 000 px, auto-fill conserve une quatrième colonne vide : chaque colonne occupée reste donc large de 238 px. auto-fit réduit cette piste vide et son espace. Les trois colonnes occupées se partagent alors 968 px et atteignent environ 322,7 px chacune.

Une colonne qui contient un élément, quel que soit son emplacement, est occupée, même si une cellule de sa dernière ligne est vide. Auto-fit réduit les pistes vides, pas chaque cellule vide.

Préserver le conteneur le plus étroit

La répétition automatique nécessite une dimension minimale ou maximale de piste définie. repeat(auto-fill, 1fr) est invalide. Un minimum fixe de 400 px peut aussi déborder d’un conteneur de 320 px. Utilise :

grid-template-columns:
  repeat(auto-fit, minmax(min(100%, 400px), 1fr));

min(100%, 400px) choisit le plus petit minimum : un conteneur étroit peut donc accueillir une piste sans être forcé à 400 px. Continue à gérer le texte ou les images trop grands à l’intérieur des cartes.

Points clés

  • Le placement automatique remplit les cellules disponibles et crée des pistes implicites selon les besoins.
  • grid-auto-rows dimensionne les lignes créées automatiquement.
  • Auto-fill conserve les pistes vides ; auto-fit les réduit.
  • Le calcul du nombre de colonnes doit inclure les espaces entre elles.
  • Utilise un minimum ou un maximum défini pour la répétition automatique.
  • min(100%, …) maintient le minimum d’une piste dans les limites d’un conteneur étroit.
  • Le placement dense peut modifier l’ordre visuel.

4.4 Aligner les boîtes dans leurs zones ou les pistes dans un conteneur

L’alignement dans une grille agit à deux échelles différentes. Tu peux déplacer un élément dans sa zone ou déplacer l’ensemble des pistes dans le conteneur. Détermine d’abord quel espace tu souhaites répartir.

Aligner les éléments dans leurs zones

Dans un texte horizontal en français, les propriétés justify- agissent sur l’axe en ligne, horizontal. Les propriétés align- agissent sur l’axe de bloc, vertical. La grille permet d’aligner les éléments sur les deux axes.

Définie sur le conteneurRemplacée sur un élémentEffet
justify-itemsjustify-selfPosition en ligne dans la zone
align-itemsalign-selfPosition de bloc dans la zone

Les valeurs comprennent start, end, center et stretch. align-items: baseline aligne les lignes de base du texte. La plupart des éléments de taille automatique s’étirent par défaut. Une image qui possède son propre rapport largeur-hauteur se place normalement au bord de début de la zone au lieu d’être étirée dans les deux directions.

Pour une rangée de cartes, l’étirement fait remplir la hauteur de la ligne par chaque carte. Passe à align-items: start et chaque carte conserve la hauteur de son contenu ; leurs bords inférieurs peuvent différer. align-self: end sur une légende la place en bas de sa zone de grille.

Centrer une boîte dans les deux directions
.hero {
  display: grid;
  place-items: center;
  min-height: 60vh;
}

place-items combine align-items suivi de justify-items. Avec une seule valeur, elle l’applique aux deux. La hauteur minimale crée de l’espace vertical autour d’un élément court. place-self est la propriété raccourcie correspondante pour un élément individuel.

L’élément reste une boîte contenant du texte. Pour centrer les mots dans cette boîte, définis text-align: center sur l’élément. Déplacer une boîte au centre d’une cellule ne change pas l’alignement de son texte.

Déplacer les pistes en groupe

justify-content positionne l’ensemble des colonnes sur l’axe en ligne. align-content positionne les lignes sur l’axe de bloc. Ces propriétés nécessitent de l’espace supplémentaire à l’extérieur des pistes pour que leur effet soit visible.

Pour trois colonnes fixes de 200 px dans un conteneur de 900 px sans espaces, il reste 300 px. justify-content: center laisse 150 px avant la première colonne et après la dernière. justify-content: space-between place les colonnes extérieures contre les bords du conteneur et répartit 150 px entre les colonnes voisines. Les éléments restent dans leurs propres pistes lorsque celles-ci se déplacent.

Si les colonnes utilisent fr et remplissent toute la largeur disponible, il ne reste aucun espace horizontal à répartir pour justify-content. Définir justify-items: center peut tout de même centrer visiblement un enfant étroit dans sa piste large. La première propriété positionne les pistes ; la seconde positionne les éléments.

Points clés

  • justify- suit l’axe en ligne ; align- suit l’axe de bloc.
  • L’alignement des éléments déplace les boîtes dans leurs zones.
  • L’alignement du contenu déplace les pistes dans le conteneur.
  • place-items combine les deux propriétés d’alignement des éléments.
  • Utilise text-align pour aligner le texte dans un élément.
5

Créer et déboguer des mises en page concrètes

Les pages réelles combinent plusieurs mises en page : une grille de page peut contenir une barre d’outils flexible, des cartes et un badge positionné. Choisis la méthode adaptée à chaque relation, puis crée des modèles qui continuent de fonctionner lorsque le texte grandit ou que l’espace se réduit. Étudie les colonnes de contenu, les pieds de page, les barres latérales et les contrôles de formulaire avant d’utiliser les outils de développement pour repérer les propriétés inactives et les débordements. Des textes plus longs, le zoom et les vérifications au clavier révèlent des problèmes que le contenu d’exemple peut masquer.

5.1 Choisir une méthode adaptée à la relation recherchée

Une page peut utiliser plusieurs méthodes de mise en page à la fois. Choisis chaque méthode selon la relation entre les boîtes dans la partie concernée : une suite de textes, un groupe flexible, des colonnes partagées ou une couche superposée.

Partir du contenu

Le flux normal gère déjà les articles, les titres et les paragraphes. Il fait passer le texte à la ligne et déplace les blocs suivants vers le bas lorsque le contenu précédent grandit. Ajoute une structure lorsque la conception demande une autre relation.

BesoinMéthode utileRaison
Une rangée ou une colonne de contrôlesFlexboxPartage l’espace entre des éléments dimensionnés selon leur contenu
Des colonnes alignées sur plusieurs lignesGrilleDéfinit des pistes de lignes et de colonnes partagées
Un badge sur une imagePositionnement absoluPlace une couche par rapport à un conteneur choisi
Un contrôle visible sur toute la pagePositionnement fixeLe garde attaché à la zone d’affichage
Un titre visible dans sa sectionPositionnement adhérentConserve son espace dans le flux et s’arrête à la fin de la section
Du texte qui habille une photoÉlément flottantRaccourcit les lignes de texte voisines autour de l’image
Du texte réparti en colonnes de journalMise en page multicolonneFait continuer le texte d’une colonne à la suivante

Flexbox est unidimensionnel : il partage l’espace le long d’une rangée ou d’une colonne, chaque ligne issue d’un retour à la ligne étant indépendante. La grille est bidimensionnelle : elle définit ensemble les colonnes et les lignes. Ces choix concernent les contraintes de la mise en page ; ils n’interdisent pas d’utiliser l’un ou l’autre outil pour une simple rangée.

Comparer une rangée avec retour à la ligne et des colonnes partagées

Sept cartes occupent une zone de contenu de 1 000 px de large avec des espaces de 16 px. Avec Flexbox, donne à chaque carte flex: 1 1 200px et autorise le retour à la ligne. Quatre cartes tiennent sur la première ligne et atteignent 238 px chacune. Les trois cartes de la seconde ligne atteignent environ 322,7 px chacune. Chaque ligne répartit son propre espace libre.

Utilise maintenant repeat(auto-fill, minmax(200px, 1fr)) dans une grille. Quatre colonnes tiennent. Les sept cartes utilisent les mêmes colonnes de 238 px de large ; la dernière ligne laisse une cellule vide. La grille maintient l’alignement d’une ligne à l’autre.

Utilise la version flexible lorsque des éléments plus larges sur la dernière ligne conviennent à la conception. Utilise la grille lorsqu’une structure de colonnes cohérente compte.

Combiner les méthodes à différents niveaux

Une page peut utiliser une grille pour une barre latérale et une région principale, Flexbox pour la barre d’outils de la région principale et un badge positionné en absolu dans une carte. Une carte peut être un élément de grille à l’extérieur et un conteneur flexible à l’intérieur. Définis la relation extérieure sur son parent et la disposition intérieure sur la carte elle-même.

Pour une longue liste de textes, columns: 3 ou column-width: 250px crée un flux multicolonne. Le texte descend dans une colonne puis continue dans la suivante ; ce n’est pas une grille de cartes indépendantes. Vérifie que ce parcours de lecture convient au contenu.

Lire les anciennes mises en page avec attention

Les colonnes flottantes, les grilles inline-block et les tableaux HTML utilisés pour la mise en page apparaissent encore dans le code ancien. Leurs règles d’espacement et de confinement diffèrent de celles de Flexbox et des grilles. Pour construire une nouvelle structure de page, utilise les outils de mise en page modernes. Réserve <table> aux données dont les lignes et les colonnes expriment des relations tabulaires.

Points clés

  • Choisis une grille pour des lignes et colonnes partagées, et Flexbox pour une rangée ou une colonne indépendante.
  • Utilise des éléments flottants lorsque le texte doit habiller une image.
  • Utilise le positionnement pour les superpositions ou les placements liés au défilement.
  • La mise en page multicolonne fait continuer le texte d’une colonne à l’autre.
  • Une boîte peut être l’élément d’une mise en page et le conteneur d’une autre.

5.2 Des modèles de page qui grandissent avec le contenu

Une mise en page utile offre une largeur de contenu lisible, de l’espace sur les bords et de la place pour un contenu plus long. Construis ses régions principales dans le flux pour qu’un article qui grandit pousse naturellement le pied de page vers le bas.

Centrer une colonne de contenu
.container {
  max-width: 1100px;
  margin-inline: auto;
  padding-inline: 16px;
}

Le maximum limite l’agrandissement sur les écrans larges. Les marges automatiques en ligne répartissent l’espace restant des deux côtés. La marge intérieure maintient le texte à distance des bords sur les écrans étroits. Pour le texte courant, max-width: 65ch donne une longueur de ligne approximative de 65 caractères ; un ch correspond à la largeur du chiffre 0 dans la police utilisée. Une longueur de ligne d’environ 45 à 75 caractères constitue une plage utile pour la lecture, même si la largeur réelle des lettres varie.

Placer les régions de la page sur une grille
.page {
  display: grid;
  grid-template-columns: 240px minmax(0, 1fr);
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header  header"
    "sidebar main"
    "footer  footer";
}
header { grid-area: header; }
aside  { grid-area: sidebar; }
main   { grid-area: main; }
footer { grid-area: footer; }

L’en-tête et le pied de page couvrent les deux colonnes. La barre latérale garde 240 px et la région principale reçoit le reste. Le minimum nul de la piste flexible empêche un contenu large de forcer la piste au-delà de la part disponible. Gère ce contenu par un retour à la ligne ou un défilement dans la région principale.

Le modèle à trois colonnes souvent appelé mise en page du Saint Graal utilise 200px 1fr 200px et les zones "nav main aside" sur la ligne centrale, l’en-tête et le pied de page couvrant les trois colonnes. Les colonnes latérales fixes ont tout de même besoin d’une largeur disponible suffisante ; teste la mise en page à des largeurs réduites.

Garder le pied d’une page courte en bas
body {
  margin: 0;
  min-height: 100dvh;
  display: grid;
  grid-template-rows: auto 1fr auto;
}

Avec l’en-tête, la région principale et le pied de page comme enfants directs, la ligne centrale remplit la hauteur inutilisée. Le pied d’une page courte atteint le bas de la fenêtre ; celui d’une page longue suit le contenu. Ce modèle est appelé pied de page collé en bas, mais le pied de page n’a pas besoin de position: sticky.

L’unité traditionnelle relative à la zone d’affichage est vh. Sur les téléphones, 100vh peut s’étendre derrière les contrôles visibles du navigateur. La hauteur dynamique de la zone d’affichage, dvh, suit la hauteur visible lorsque ces contrôles changent ; tous les principaux navigateurs la prennent en charge depuis 2022. Utilise min-height pour qu’un contenu plus long puisse agrandir la page. Une valeur fixe de height peut laisser le contenu déborder sur ce qui suit.

Une variante flexible utilise un corps en colonne avec min-height: 100dvh, puis main { flex: 1; }. Pour une rangée avec barre latérale, utilise .sidebar { flex: 0 0 240px; } et .main { flex: 1; min-width: 0; }.

Faire adhérer une barre latérale et étendre une image

Une barre latérale de grille peut utiliser position: sticky; top: 16px; align-self: start. Conserver la hauteur de son propre contenu lui laisse de la place pour se déplacer dans sa ligne.

Pour du contenu d’article en pleine largeur, définis les colonnes avec 1fr min(65ch, 100% - 32px) 1fr. Place les enfants ordinaires dans la colonne 2 et une image large avec grid-column: 1 / -1. La piste centrale reste lisible tandis que l’image couvre toute la largeur du conteneur.

Points clés

  • Les marges automatiques en ligne centrent une colonne de contenu de largeur limitée.
  • Utilise min-height pour les pages de pleine hauteur qui doivent pouvoir grandir.
  • Le modèle de pied de page collé en bas garde le pied de page dans le flux normal.
  • dvh suit les changements de hauteur visible de la zone d’affichage.
  • Un minimum nul sur une piste flexible aide à éviter le débordement de la page.
  • Une barre latérale adhérente dans une grille a besoin de place pour se déplacer ; align-self: start évite son étirement.
  • Un élément en pleine largeur s’étend au-delà de la colonne de texte de l’article.

5.3 Des mises en page réutilisables pour les éléments d’interface

Les petits éléments d’interface combinent les mêmes relations : une image garde sa taille, le texte remplit l’espace restant, des contrôles liés partagent une rangée ou plusieurs cartes alignent leurs parties intérieures. Donne à chaque conteneur la mise en page qui correspond à son rôle.

Choisir le bon type de centrage
Contenu à centrerRègle
Une boîte sur les deux axesParent : display: grid; place-items: center
Un bloc de largeur limitéeBloc : margin-inline: auto
Du texte ou du contenu en ligneParent : text-align: center

Flexbox peut aussi centrer un enfant avec justify-content: center; align-items: center. Assure-toi que le conteneur dispose d’espace libre sur l’axe concerné.

Une rangée de navigation et une rangée d’objet média
nav { display: flex; align-items: center; gap: 16px; }
.logo { margin-inline-end: auto; }
.media { display: flex; align-items: flex-start; gap: 16px; }
.media img { flex: none; width: 64px; }
.media-body { flex: 1; min-width: 0; }

En français, le logo reste à gauche et les liens se regroupent à droite. Lorsque la navigation possède exactement deux enfants, un logo et une liste de liens, justify-content: space-between peut les séparer ; la liste a besoin de sa propre mise en page flexible pour disposer ses liens.

Dans la rangée d’objet média, l’image garde sa largeur. Le texte reçoit le reste et peut rétrécir. L’alignement au début de l’axe secondaire empêche une image de hauteur automatique de s’étirer pour atteindre la hauteur d’un long bloc de texte. Cela convient à un commentaire, un profil ou une ligne de produit.

Des cartes avec des boutons alignés
.cards {
  display: grid;
  grid-template-columns:
    repeat(auto-fill, minmax(min(100%, 240px), 1fr));
  gap: 24px;
}
.card { display: flex; flex-direction: column; }
.card .button { margin-top: auto; }

La grille parente étire les cartes de chaque ligne à la même hauteur. Dans chaque carte, la marge supérieure automatique utilise l’espace vertical disponible avant le bouton et le place en bas. Les titres peuvent toujours avoir des hauteurs différentes.

Pour aligner les titres, les textes et les pieds des cartes, utilise une sous-grille. Fais de chaque carte un élément de grille qui couvre trois lignes du parent, puis définis display: grid; grid-template-rows: subgrid. Chaque carte adopte ces lignes parentes pour ses trois parties. La sous-grille fonctionne dans les principaux navigateurs depuis septembre 2023.

Calques de superposition, formulaires et groupes de saisie

Pour placer du texte sur une image, transforme le conteneur en grille et place les deux enfants à grid-area: 1 / 1. Une légende située plus loin dans le code est dessinée au-dessus de l’image. Une autre solution consiste à utiliser un conteneur positionné en relatif et une couche de légende positionnée en absolu avec inset: 0.

Un formulaire qui alterne étiquettes et champs peut utiliser grid-template-columns: max-content 1fr; gap: 12px 16px; align-items: center. L’étiquette la plus large définit une colonne d’étiquettes partagée. Les champs s’alignent dans la seconde colonne ; des rangées flexibles distinctes ne peuvent pas partager automatiquement cette largeur d’étiquette.

Un groupe de recherche utilise display: flex; gap: 8px, avec input { flex: 1; min-width: 0; } et button { flex: none; }. Le champ peut rétrécir tandis que le bouton garde sa largeur naturelle. Pour des mots-clés ou des contrôles de barre d’outils qui doivent passer à la ligne en conservant leur largeur naturelle, utilise display: flex; flex-wrap: wrap; gap: 8px.

Points clés

  • Centre une boîte, un bloc et du texte en ligne avec le type d’alignement adapté.
  • Utilise une image de taille fixe et un élément de texte flexible pour une rangée d’objet média.
  • Une colonne flexible et une marge supérieure automatique alignent les boutons des cartes.
  • Une sous-grille partage les pistes du parent entre les parties imbriquées des cartes.
  • Une grille peut aligner les étiquettes entre les lignes d’un formulaire.
  • Un champ flexible a souvent besoin de min-width: 0.

5.4 Trouver la boîte à l’origine du problème de mise en page

Un problème de mise en page est plus facile à corriger lorsque tu inspectes les boîtes réelles du navigateur. Commence par l’élément qui s’est déplacé ou qui déborde, puis vérifie la mise en page à laquelle il participe avant de modifier les valeurs.

Inspecter dans un ordre utile
  1. Trouve l’élément dans les outils de développement.
  2. Inspecte la valeur calculée de display de son parent : le flux normal, la mise en page flexible et la grille donnent des rôles différents aux propriétés.
  3. Vérifie si ta propriété s’applique à cet élément dans cette mise en page.
  4. Compare les dimensions, marges et positions calculées aux valeurs attendues.
  5. Active ou désactive une déclaration à la fois pour voir quelle contrainte cause le problème.

Le panneau du modèle de boîte montre le contenu, la marge intérieure, la bordure et la marge extérieure. Les superpositions de grille montrent les lignes, les numéros, les pistes et les espaces ; les superpositions flexibles montrent les éléments et l’espace qui leur est attribué. Utilise-les pour vérifier ce que le navigateur a construit, et pas seulement ce que prévoyait la feuille de style.

Vérifier les propriétés inactives

Les décalages ne font rien sur un élément statique. La largeur et la hauteur ne font rien sur un <span> en ligne ordinaire, même si elles dimensionnent une image en ligne. z-index nécessite une boîte positionnée ou un élément flexible ou de grille. float n’a aucun effet sur les éléments flexibles ou de grille, et justify-self ne peut pas aligner un élément flexible.

Une déclaration d’alignement valide peut n’avoir aucun effet visible parce que les éléments utilisent déjà tout l’espace. align-content n’a pas non plus d’effet sur un conteneur flexible nowrap. Le positionnement adhérent nécessite un décalage et de la place pour se déplacer.

Repérer la cause d’un débordement horizontal

Un débordement peut venir d’une boîte trop grande ou d’une boîte plus petite poussée au-delà d’un bord par des marges, des décalages ou les largeurs voisines. Parmi les causes courantes :

  • Une largeur fixe, comme 1 200 px, supérieure à celle de la zone d’affichage.
  • width: 100% associé à une marge intérieure avec le dimensionnement content-box.
  • width: 100vw, qui peut inclure la largeur d’une barre de défilement verticale visible.
  • Un long mot, une URL ou une ligne de code sans coupure.
  • Le minimum automatique d’un élément flexible ou d’une piste 1fr.
  • Un minimum de répétition automatique plus large que son conteneur.

Ajoute temporairement * { outline: 1px solid red; } pour révéler les bords. Les contours ne prennent aucune place dans la mise en page : ils montrent donc les limites sans modifier les dimensions des boîtes comme le feraient des bordures.

Étudier un bloc de code large

Une page flexible possède une barre latérale de 240 px et une colonne principale contenant un exemple de code de 1 400 px de large. Toute la page défile horizontalement. La superposition flexible montre que la région principale est plus large que sa part, et sa largeur minimale calculée vaut auto.

.main { min-width: 0; }
.main pre { overflow-x: auto; }

La première règle permet à l’élément flexible de rétrécir. La seconde garde le code large accessible grâce à un défilement horizontal local. Masquer tout le débordement de la page cacherait le symptôme sans rendre le code accessible.

Pour d’autres surprises, inspecte les marges qui fusionnent, un en-tête fixe qui recouvre le contenu, un enfant positionné en absolu dont le parent prévu est statique ou une couche piégée dans un contexte d’empilement créé par opacity ou transform.

Tester du contenu réel et un espace réduit

Redimensionne la fenêtre, utilise un nom long ou une URL longue et agrandis le texte à 200 %. Vérifie le focus clavier près des barres fixes. Le critère 1.4.4 des WCAG 2.2 exige que le texte puisse être redimensionné à 200 % sans perte de contenu ni de fonctionnalité. Le critère 1.4.10 exige généralement une redistribution à 320 pixels CSS sans défilement dans deux directions ; le contenu qui nécessite une mise en page bidimensionnelle, comme un tableau de données, bénéficie d’exceptions. Teste davantage que le court texte d’exemple qui donnait initialement à la page une apparence correcte.

Points clés

  • Inspecte la mise en page du parent et les valeurs calculées avant de modifier les déclarations.
  • Utilise les superpositions et les contours pour repérer les limites réelles des boîtes.
  • Vérifie si une propriété s’applique et si elle dispose d’espace libre à utiliser.
  • Traite à la fois le minimum d’un élément flexible et son contenu qui déborde.
  • Teste les faibles largeurs, le texte agrandi à 200 %, les textes plus longs et le focus clavier.

Mise en page CSS : exemples

5 Leçons Interactives

1

Lis la disposition naturelle de la page

13 étapes
Suis les boîtes d’un article, modifie l’affichage d’un lien et fais habiller une photo par le texte.
  1. 1
    IntroductionCommence par un article ordinaire

    Imagine un article avec un titre, deux paragraphes, un lien et un portrait. Le navigateur sait déjà comment disposer ces éléments avant que tu ajoutes du CSS de mise en page : les titres et les paragraphes sont des boîtes de bloc, les liens se placent en ligne dans le texte et display peut modifier ce comportement.

    Tu vas suivre les boîtes par défaut, agrandir la cible du lien, puis placer le portrait avec un élément flottant pour que le texte l’habille. Observe à la fois le texte et les arrière-plans des parents : ils réagissent à différentes parties de la mise en page.

  2. 2
    ExplicationSuis les lignes des blocs

    Le titre et les paragraphes sont par défaut des boîtes de bloc. Chacun commence sur une nouvelle ligne et grandit en hauteur lorsque son contenu passe à la ligne.

    Donne au premier paragraphe width: 260px. Il devient étroit, mais le paragraphe suivant commence toujours en dessous. Un bloc ne devient pas un élément en ligne simplement parce qu’il reste de la place horizontalement à côté de lui. Laisse la largeur automatique lorsqu’il doit remplir la ligne disponible.

  3. 3
    ExempleSuis le lien dans une phrase

    Dans <p>Open the <a href="/notes">reading notes</a> before class.</p>, le lien fait partie de la ligne de texte. Il prend l’espace nécessaire à ses mots et peut passer à la ligne avec la phrase.

    Ajouter width: 190px ne redimensionne pas ce lien en ligne ordinaire. Une marge intérieure verticale peut dessiner un arrière-plan plus grand sans écarter davantage les lignes de texte voisines. Une image en ligne est différente : sa largeur et sa hauteur s’appliquent.

  4. 4
    ExempleMesure un espace après fusion

    Le paragraphe de l’article possède une marge inférieure de 14 px. Le titre qui suit possède une marge supérieure de 26 px. Lorsque ces marges verticales positives se touchent dans le flux normal, elles fusionnent en une marge de 26 px.

    Elles ne s’additionnent pas pour donner 40 px. Si le parent devient ensuite un conteneur flexible ou de grille, les marges entre ses éléments restent distinctes : les mêmes déclarations peuvent donc produire plus d’espace.

  5. 5
    DéfiPlace l’espace à l’intérieur de l’en-tête

    Un en-tête sans marge intérieure ne contient qu’un titre avec une marge supérieure. La marge fusionne avec celle de l’en-tête et l’espace apparaît au-dessus de son arrière-plan. Comment créer plutôt un espace intérieur en haut ?

    ---reveal---

    Supprime la marge supérieure du titre et ajoute une marge intérieure supérieure à l’en-tête. La marge intérieure appartient à l’intérieur de la boîte de l’en-tête. Une bordure ou flow-root empêcherait aussi la fusion des marges entre parent et enfant, mais la marge intérieure crée directement l’espace intérieur voulu.

  6. 6
    ExplicationDonne au lien sa propre boîte dimensionnée

    Utilise display: inline-block sur le lien de l’article lorsqu’il a besoin d’une largeur et d’une cible plus haute avec une marge intérieure, tout en restant dans la ligne de texte.

    .article-link {
      display: inline-block;
      padding: 10px 14px;
    }
    

    La boîte participe désormais à la mise en page avec toute sa hauteur. Display modifie son comportement dans la mise en page ; elle reste un lien HTML. Les espaces et sauts de ligne entre des éléments inline-block voisins apparaissent toujours comme un espace de texte.

  7. 7
    Point cléDistingue l’extérieur de l’intérieur

    Une boîte peut participer à une mise en page et en gérer une autre à l’intérieur. display: flex signifie bloc à l’extérieur, flexible à l’intérieur. inline-flex conserve la même mise en page flexible interne, mais utilise un placement externe en ligne.

    La règle concerne les enfants directs. Une navigation flexible transforme sa liste en élément flexible ; elle ne transforme pas automatiquement chaque lien imbriqué en élément de cette rangée extérieure. Donne une mise en page distincte à la liste lorsque ses liens ont besoin de leur propre rangée.

  8. 8
    DéfiRéserve de la place pour un message

    Un message d’état de lecture doit d’abord être masqué, tout en conservant son espace pour que l’article ne bouge pas lorsqu’il apparaît. Doit-il utiliser display: none ou visibility: hidden ?

    ---reveal---

    Utilise visibility: hidden pour conserver son espace dans la mise en page. display: none supprime sa boîte et l’espace, si bien que son affichage déplacerait le contenu suivant. Si le texte doit rester accessible aux lecteurs d’écran tout en étant masqué visuellement, une classe de masquage visuel remplit cette autre fonction.

  9. 9
    ExempleFais flotter le portrait

    Place le portrait avant le paragraphe et fais-le flotter :

    .portrait {
      float: left;
      width: 130px;
      margin: 0 18px 10px 0;
    }
    

    Les lignes de texte habillent la photo avec un espace horizontal de 18 px. Une fois sa marge inférieure dépassée, elles reprennent toute la largeur. L’arrière-plan du paragraphe peut s’étendre derrière l’élément flottant même si le texte lui-même reste à côté.

  10. 10
    ExempleFais contenir la hauteur de l’image

    Si le texte de l’article est très court, l’élément flottant peut dépasser sous l’arrière-plan de son parent. Les enfants flottants ne fournissent pas de hauteur dans le flux ordinaire.

    Ajoute display: flow-root au conteneur. Sa région de flux indépendante contient désormais le portrait : la bordure et l’arrière-plan du conteneur l’entourent donc entièrement. Cela sépare aussi les marges du parent et de l’enfant, sans ajouter de découpage ni de zone de défilement.

  11. 11
    DéfiCommence une nouvelle section sous le portrait

    Le portrait descend toujours plus bas que le premier paragraphe de l’article. Le titre de la section suivante doit commencer en dessous, tandis que le paragraphe peut continuer à l’habiller. Quelle règle faut-il appliquer au titre ?

    ---reveal---

    Utilise clear: left, ou clear: both si le titre doit passer sous les éléments flottants des deux côtés. Cela déplace le titre sous les éléments flottants précédents. C’est un rôle différent de celui de flow-root, qui fait inclure au parent la hauteur de ses enfants flottants.

  12. 12
    DéfiUne modification du parent supprime l’habillage

    Tu appliques display: flex au conteneur de la photo et du texte. Le portrait flottant ne fait plus passer les lignes de texte sous l’image. Pourquoi, et comment rétablir le flux voulu pour l’article ?

    ---reveal---

    Le portrait est maintenant un élément flexible : sa propriété float n’a donc aucun effet. Le paragraphe occupe un élément flexible distinct. Remets ce conteneur dans le flux normal, garde le portrait flottant et utilise flow-root si le conteneur doit contenir l’image.

  13. 13
    RécapitulatifExamine le parent avant de modifier l’enfant

    Le comportement des blocs et des éléments en ligne explique la disposition initiale de l’article. Display peut modifier la participation externe, la mise en page interne ou même l’existence d’une boîte.

    Pour faire habiller un portrait par le texte, garde le texte dans le flux ordinaire avec un élément flottant, confine celui-ci si nécessaire et place les sections ultérieures qui doivent commencer en dessous avec clear. Lorsque le résultat change sans que tu t’y attendes, inspecte la propriété display du parent ainsi que les règles de l’enfant.

2

Place des badges et garde la navigation visible

14 étapes
Crée un calque local, compare les comportements fixe et adhérent, puis corrige un menu masqué.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionDécide quels éléments doivent se déplacer ensemble
  2. 2
    ExplicationConserve ou supprime l’espace d’origine
  3. 3
    ExempleFais de la carte la référence du badge
  4. 4
    ExemplePlace le badge à l’intérieur du coin
  5. 5
    DéfiChoisis la référence du pourcentage
  6. 6
    ExempleFixe l’aide à la fenêtre
  7. 7
    ExempleGarde un titre de section dans sa section
  8. 8
    DéfiUn titre n’a pas de place pour se déplacer
  9. 9
    ConseilLaisse de l’espace sous un en-tête fixe
  10. 10
    ExplicationCompare d’abord les groupes extérieurs
  11. 11
    ExempleCorrige le niveau de l’ancêtre
  12. 12
    DéfiUne légende statique de grille a-t-elle besoin de position ?
  13. 13
    DéfiUne barre d’outils fixe reste sous un autre élément
  14. 14
    RécapitulatifVérifie la référence, l’espace dans le flux et le groupe
3

Crée une barre d’outils flexible et une rangée de cartes

17 étapes
Suis la direction, calcule l’agrandissement et le rétrécissement, puis utilise l’alignement après le dimensionnement.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionCrée une rangée qui partage son espace
  2. 2
    ExplicationTransforme uniquement les enfants directs en éléments flexibles
  3. 3
    ExplicationModifie les axes avec la direction
  4. 4
    DéfiCentre un groupe vertical
  5. 5
    ExempleCommence le calcul de l’agrandissement
  6. 6
    ExempleAjoute l’agrandissement aux bases
  7. 7
    ExemplePondère le rétrécissement selon la taille de base
  8. 8
    DéfiChoisis des largeurs égales ou conserve leurs différences
  9. 9
    ConseilGarde une longue ligne de code dans sa zone
  10. 10
    ExempleLaisse les cartes passer sur des lignes indépendantes
  11. 11
    ExplicationRépartis uniquement l’espace restant
  12. 12
    ExempleAligne le texte dans la ligne
  13. 13
    DéfiPousse un groupe vers l’extrémité
  14. 14
    Point cléLes lignes et les éléments s’alignent différemment
  15. 15
    ConseilGarde accessible un contenu centré trop grand
  16. 16
    DéfiUne rangée centrée ne bouge pas
  17. 17
    RécapitulatifLis Flexbox en trois étapes
4

Crée un tableau de bord et une grille de cartes automatique

18 étapes
Calcule les pistes, place un panneau, adapte le nombre de colonnes et choisis la bonne échelle d’alignement.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionDonne des limites communes à plusieurs lignes
  2. 2
    ExplicationLes pistes sont les espaces entre les lignes
  3. 3
    ExempleSoustrais les pistes fixes et les espaces
  4. 4
    ExempleTransforme les parts en largeurs de colonnes
  5. 5
    DéfiLes colonnes en pourcentage dépassent la rangée
  6. 6
    ExempleCompte la limite de fin du panneau
  7. 7
    ExplicationNomme les régions de la page
  8. 8
    DéfiUne forme que les zones ne peuvent pas exprimer
  9. 9
    LienPartage une cellule pour créer une couche sur l’image
  10. 10
    ExplicationLaisse apparaître de nouvelles lignes
  11. 11
    ExempleTrouve combien de colonnes à leur minimum tiennent
  12. 12
    ExempleRéduis les pistes inutilisées avec auto-fit
  13. 13
    DéfiGarde un minimum adapté à une boîte étroite
  14. 14
    ExplicationDéplace un élément dans sa zone
  15. 15
    ExempleDéplace les colonnes comme un seul groupe
  16. 16
    DéfiPourquoi les bas des cartes ne sont-ils plus alignés ?
  17. 17
    DéfiUne bannière en pleine largeur au-dessus de cartes automatiques
  18. 18
    RécapitulatifDistingue dimensionnement, placement et alignement
5

Assemble une page de lecture et corrige ses points faibles

19 étapes
Choisis les méthodes pour la page et ses composants, puis teste la mise en page avec du contenu difficile.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionConstruis de la page jusqu’à ses parties
  2. 2
    ExplicationDonne un rôle concret à chaque méthode
  3. 3
    DéfiChoisis les colonnes d’une collection de ressources
  4. 4
    ExempleLimite la largeur de lecture
  5. 5
    ExempleRéserve une colonne fixe et une colonne flexible
  6. 6
    ExempleFais de la place au pied de page sans le fixer
  7. 7
    ConseilPermets à la hauteur et à l’espace visible de changer
  8. 8
    DéfiLaisse une photo dépasser la largeur de l’article
  9. 9
    ExempleImbrique une barre d’outils flexible dans la grille de la page
  10. 10
    ExempleMaintiens l’équilibre entre l’image et le texte
  11. 11
    ExempleAligne les parties des cartes au niveau voulu
  12. 12
    ExempleFais partager une rangée à un champ et à un bouton
  13. 13
    DéfiCentrer la boîte ou ses mots ?
  14. 14
    ExplicationInspecte la mise en page construite par le navigateur
  15. 15
    ExempleSuis les effets d’un bloc de code large
  16. 16
    ConseilRévèle les bords sans les déplacer
  17. 17
    DéfiRéinitialiser la largeur ne suffit pas
  18. 18
    DéfiTeste la page au-delà de l’exemple
  19. 19
    RécapitulatifUtilise du contenu réel pour vérifier chaque relation

Mise en page CSS : QCM

50 Questions Pratiques en 5 séries

Série 1 : Boîtes, espace et choix de mise en page10 Questions Pratiques

Question 1 sur 10

Deux blocs adjacents dans le flux normal possèdent des marges verticales positives de 18 px et 30 px qui se touchent. Quelle est la taille de l’espace après fusion ?
  1. 18 px
  2. 30 px
  3. 48 px
  4. 12 px
Afficher la réponseMasquer la réponse
Réponse : B
Les marges verticales positives de blocs qui se touchent fusionnent en gardant la plus grande : l’espace est donc de 30 px. Les additionner pour obtenir 48 px revient à les traiter comme des espacements distincts. Cette addition s’appliquerait entre des éléments flexibles ou de grille, dont les marges ne fusionnent pas, mais ces boîtes sont dans le flux normal.

Question 2 sur 10

Un lien textuel ordinaire doit avoir une largeur définie tout en restant dans une ligne de texte. Quelle valeur de display donne ce comportement à sa boîte ?
  1. inline
  2. block
  3. contents
  4. inline-block
Afficher la réponseMasquer la réponse
Réponse : D
Un élément inline-block accepte une largeur et une hauteur tout en participant à une ligne de texte. Un lien en ligne ordinaire ignore sa déclaration de largeur. L’affichage en bloc accepte aussi la largeur, mais commence une ligne de bloc : il ne satisfait donc pas l’exigence de garder la boîte dans la ligne de texte.

Question 3 sur 10

Un badge est positionné en absolu dans une carte. La carte possède position: relative et aucune autre règle ne crée de bloc englobant entre les deux. Quelle boîte fournit la référence des décalages du badge ?
  1. La boîte de la carte incluant sa marge intérieure.
  2. La boîte de contenu de la carte.
  3. La boîte du badge incluant sa bordure.
  4. La boîte de contenu de la zone d’affichage.
Afficher la réponseMasquer la réponse
Réponse : A
La carte positionnée établit le bloc englobant du badge aux bords de sa marge intérieure. Mesurer uniquement la boîte de contenu de la carte exclut cette marge et donne une référence différente. La zone d’affichage n’est utilisée que lorsqu’aucun ancêtre plus proche répondant aux critères ne fournit la référence du positionnement absolu.

Question 4 sur 10

Un titre de section possède position: sticky, mais ses quatre décalages restent à auto. Quelle déclaration lui permet d’adhérer en haut pendant le défilement vertical ?
  1. z-index: 1
  2. margin-top: 0
  3. top: 0
  4. height: auto
Afficher la réponseMasquer la réponse
Réponse : C
Une boîte adhérente a besoin d’un décalage autre que auto sur l’axe où elle doit adhérer. Définir top: 0 fournit le seuil supérieur. Un z-index peut modifier la couche superposée qui est visible, mais il ne peut pas fournir le seuil de défilement manquant qui active le comportement adhérent.

Question 5 sur 10

Trois éléments flexibles ont des bases de 60 px et des facteurs d’agrandissement de 1, 2 et 1 dans une rangée de 460 px avec deux espaces de 20 px. Aucune marge extérieure ou intérieure, bordure ou limite de taille n’intervient. Quelles sont leurs largeurs finales, dans l’ordre ?
  1. 130 px, 200 px, 130 px
  2. 120 px, 180 px, 120 px
  3. 105 px, 210 px, 105 px
  4. 140 px, 140 px, 140 px
Afficher la réponseMasquer la réponse
Réponse : B
Les bases occupent 180 px et les espaces 40 px, ce qui laisse 240 px pour quatre parts d’agrandissement. Chaque part vaut 60 px, ce qui donne 120 px, 180 px et 120 px. Donner à l’élément central une largeur finale double des autres revient à confondre sa part d’espace ajouté avec sa largeur entière.

Question 6 sur 10

Dans la propriété raccourcie flex à trois valeurs, quelle partie définit la taille de départ de l’élément sur l’axe principal ?
  1. La troisième partie, flex-basis.
  2. La première partie, flex-grow.
  3. La deuxième partie, flex-shrink.
  4. La valeur align-items du parent.
Afficher la réponseMasquer la réponse
Réponse : A
L’ordre des trois valeurs est agrandissement, rétrécissement, base : la troisième partie fournit donc la taille de départ. L’agrandissement contrôle une part de l’espace libre positif une fois les bases connues. Il ne définit pas une largeur initiale, même si sa modification peut changer la largeur finale de l’élément.

Question 7 sur 10

Une grille de 760 px possède les colonnes 160px 1fr 2fr et un espace de 15 px entre les colonnes. Les minimums du contenu ne contraignent pas les pistes. Quelle est la largeur de la colonne 2fr ?
  1. 400 px
  2. 300 px
  3. 190 px
  4. 380 px
Afficher la réponseMasquer la réponse
Réponse : D
Deux espaces occupent 30 px ; après leur déduction et celle de la colonne fixe de 160 px, il reste 570 px. Les trois parts valent donc 190 px chacune, et la colonne 2fr mesure 380 px. Un résultat de 400 px soustrait la colonne fixe mais oublie que les espaces occupent aussi de la largeur disponible.

Question 8 sur 10

Un élément de grille doit couvrir les trois premières colonnes d’une grille à cinq colonnes. Quel placement par lignes donne cette étendue ?
  1. grid-column: 1 / 3
  2. grid-column: 2 / 4
  3. grid-column: 1 / 4
  4. grid-column: 1 / 5
Afficher la réponseMasquer la réponse
Réponse : C
Trois pistes commençant à la ligne 1 se terminent à la ligne 4, car les lignes marquent les limites des pistes. Le placement 1 / 3 s’arrête au début de la troisième colonne et ne couvre que deux pistes. Compte les espaces entre les lignes de délimitation, pas seulement les nombres écrits dans la déclaration.

Question 9 sur 10

Un répertoire contient de nombreuses cartes. Les cartes des lignes suivantes doivent utiliser les mêmes limites de colonnes que celles des lignes précédentes, même lorsque la dernière ligne est incomplète. Quelle méthode de mise en page exprime le mieux cette exigence ?
  1. Une grille avec des pistes de colonnes partagées.
  2. Flexbox avec des lignes flexibles et un retour à la ligne.
  3. Des éléments flottants de largeurs individuelles.
  4. Des blocs en ligne de largeurs naturelles.
Afficher la réponseMasquer la réponse
Réponse : A
Une grille définit une structure de colonnes partagée par toutes les lignes : une dernière ligne incomplète garde donc les mêmes limites. Les lignes flexibles issues d’un retour à la ligne répartissent leur espace indépendamment et peuvent élargir les éléments de la dernière ligne. L’exigence concerne l’alignement entre les lignes, ce qui rend les pistes partagées utiles.

Question 10 sur 10

Des cartes contenant des textes de longueurs différentes forment une ligne de grille. Leurs boutons doivent être alignés en bas sans hauteur de carte fixe, et les cartes doivent grandir si le texte grandit. Comment la grille extérieure et l’intérieur des cartes doivent-ils fonctionner ensemble ?
  1. Aligner les cartes au début ; utiliser des colonnes flexibles et des marges supérieures automatiques sur les boutons.
  2. Étirer les cartes ; utiliser des colonnes flexibles et des marges supérieures automatiques sur les boutons.
  3. Étirer les cartes ; utiliser des rangées flexibles et des marges supérieures automatiques sur les boutons.
  4. Étirer les cartes ; utiliser des colonnes flexibles et des marges inférieures automatiques sur les boutons.
Afficher la réponseMasquer la réponse
Réponse : B
L’étirement de la grille donne aux cartes une hauteur de ligne commune déterminée par le contenu le plus haut. Une colonne flexible dans chaque carte permet à la marge supérieure automatique du bouton d’absorber l’espace vertical inutilisé. Des boutons positionnés en absolu ne réservent pas leur propre espace : un texte qui grandit peut donc passer dessous, même si leurs bords inférieurs sont alignés.
Série 2 : Flux, couches et conteneurs flexibles10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Une boîte de profil ne contient qu’une photo flottante et son arrière-plan ne s’étend pas autour de la photo. Quelle valeur de display sur la boîte de profil permet de contenir l’élément flottant ?
  1. inline
  2. contents
  3. flow-root
  4. none
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un <span> en ligne ordinaire possède width: 180px et une marge intérieure verticale de 10 px. Pourquoi son arrière-plan peut-il chevaucher les lignes de texte voisines alors que sa largeur reste celle de son contenu ?
  1. La largeur en ligne est ignorée ; la marge intérieure verticale est dessinée sans agrandir l’interligne.
  2. La largeur en ligne est héritée ; la marge intérieure verticale fusionne avec les marges voisines.
  3. La largeur en ligne fixe un minimum ; la marge intérieure verticale retire la boîte du flux normal.
  4. La largeur en ligne réserve un espace vide ; la marge intérieure verticale ne change que la ligne de base.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un en-tête positionné en relatif à z-index: 4 contient un menu positionné en absolu à z-index: 800. Une région principale sœur positionnée en relatif est à z-index: 5. Les deux boîtes extérieures se trouvent dans le même contexte d’empilement parent. Quelle modification place tout l’en-tête au-dessus de la région principale ?
  1. Passer le menu à z-index: 900.
  2. Passer le menu à z-index: 6.
  3. Donner au menu position: relative.
  4. Passer l’en-tête à z-index: 6.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Un paragraphe possède position: relative; top: 9px. Qu’arrive-t-il à la position du paragraphe suivant dans le flux normal ?
  1. Il descend lui aussi de 9 px.
  2. Il reste à la place qui lui a été attribuée.
  3. Il remonte dans l’espace d’origine.
  4. Il devient positionné en absolu.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Dans une rangée flexible horizontale en français, le dernier contrôle doit être poussé à l’extrémité tandis que les contrôles précédents restent au début. Quelle marge sur le dernier contrôle absorbe l’espace libre avant lui ?
  1. margin-inline-start: auto
  2. margin-inline-end: auto
  3. margin-block-start: auto
  4. margin-block-end: auto
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Une rangée flexible de 540 px possède deux éléments dont les bases sont de 240 px et 480 px et les facteurs de rétrécissement de 2 et 1. Il n’y a ni espaces, ni marges extérieures ou intérieures, ni bordures, ni minimums limitants. Quelles sont les largeurs finales ?
  1. 180 px et 360 px
  2. 120 px et 420 px
  3. 150 px et 390 px
  4. 160 px et 380 px
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Une grille à trois colonnes ne définit aucune ligne et place automatiquement huit éléments ordinaires. Combien de lignes implicites sont nécessaires ?
  1. Deux lignes.
  2. Trois lignes.
  3. Quatre lignes.
  4. Huit lignes.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Un élément étroit doit se placer au centre de sa propre zone de grille large dans la direction en ligne, sans déplacer les colonnes. Quelle propriété faut-il appliquer à cet élément ?
  1. justify-content: center
  2. align-content: center
  3. text-align: center
  4. justify-self: center
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Le pied d’une page courte doit atteindre le bas de la zone d’affichage, puis descendre naturellement lorsque l’article grandit. Quelle configuration de grille sur le corps permet cela avec l’en-tête, la région principale et le pied de page comme enfants ?
  1. height: 100dvh; grid-template-rows: auto 0 auto
  2. max-height: 100dvh; grid-template-rows: 1fr auto 1fr
  3. min-height: 100dvh; grid-template-rows: auto 1fr auto
  4. height: auto; grid-template-rows: auto auto auto
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

L’élément principal d’une page flexible contient une longue ligne de code sans coupure. Les outils de développement indiquent qu’il possède min-width: auto ; toute la page défile horizontalement. Le code doit rester accessible sans élargir la page. Quelle paire de corrections traite les deux boîtes ?
  1. Donner min-width: 0 à la région principale et overflow-x: auto au bloc de code.
  2. Donner width: 100% à la région principale et white-space: nowrap au bloc de code.
  3. Donner overflow: visible à la région principale et min-width: 100% au bloc de code.
  4. Donner flex-shrink: 0 à la région principale et overflow-x: hidden au bloc de code.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 3 : Pistes partagées et contenu changeant10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Un message doit d’abord être invisible tout en réservant son espace actuel, pour que le contenu suivant ne bouge pas lorsqu’il apparaît. Quelle valeur de propriété produit ce comportement ?
  1. display: none
  2. display: contents
  3. position: absolute
  4. visibility: hidden
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un article contient un portrait flottant à gauche suivi d’un titre de nouvelle section. Le texte peut habiller le portrait, mais le titre doit commencer en dessous. Quelle règle faut-il appliquer au titre ?
  1. float: left
  2. clear: left
  3. overflow: visible
  4. position: relative
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un titre adhérent possède top: 0 à l’intérieur d’un ancêtre avec overflow: auto. La page défile, mais cet ancêtre ne défile pas. Quel point faut-il inspecter comme raison probable pour laquelle le titre n’adhère jamais à la zone d’affichage ?
  1. L’ancêtre avec overflow est devenu sa référence de défilement.
  2. L’ordre du titre dans le code est devenu son niveau d’empilement.
  3. Le décalage supérieur du titre est mesuré depuis sa propre hauteur.
  4. La direction flexible de la page a supprimé le seuil d’adhérence.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Une infobulle se trouve dans une carte statique avec opacity: 0.8. La carte est dans une section positionnée en relatif à z-index: 2. Une section sœur qui la chevauche est positionnée en relatif à z-index: 3. Augmenter le z-index de l’infobulle ne change rien. Quelle modification extérieure peut faire passer toute la section de cette infobulle devant ?
  1. Porter l’opacité de la carte exactement à 1.
  2. Porter le niveau de l’infobulle au-dessus de 3 000.
  3. Porter la section qui la contient au-dessus du niveau 3.
  4. Porter le z-index propre de la carte à 4.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Une colonne flexible verticale dispose de hauteur libre et doit centrer son groupe d’enfants de haut en bas. Quelle déclaration sur le conteneur agit sur cet axe ?
  1. justify-content: center
  2. align-items: center
  3. justify-items: center
  4. align-self: center
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Une grille doit comporter trois colonnes exactement égales dans 810 px, avec des espaces de 24 px, même lorsqu’un élément contient une longue URL. L’URL peut être coupée n’importe où. Quelle combinaison traite les dimensions des pistes et le contenu ?
  1. Utiliser repeat(3, 33.33%) et overflow-wrap: anywhere sur l’élément contenant l’URL.
  2. Utiliser repeat(3, minmax(0, 1fr)) et overflow-wrap: anywhere sur l’élément contenant l’URL.
  3. Utiliser repeat(3, 1fr) et white-space: nowrap sur l’élément contenant l’URL.
  4. Utiliser repeat(3, minmax(270px, 1fr)) et overflow: visible sur l’élément contenant l’URL.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Un modèle utilise "banner banner" "banner main" pour ses deux lignes. Pourquoi cette déclaration de zones nommées est-elle invalide ?
  1. Le nom main nécessite au moins deux cellules.
  2. Une zone de grille ne peut pas traverser une limite de ligne.
  3. Chaque zone doit remplir une ligne entière de la grille.
  4. Les cellules banner ne forment pas un rectangle.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Trois cartes utilisent repeat(auto-fit, minmax(180px, 1fr)) dans une grille de 860 px avec des espaces de 20 px. Elles n’ont aucune contrainte de taille ni espacement supplémentaire. Combien de colonnes occupées reste-t-il et quelle est la largeur de chacune ?
  1. Quatre colonnes de 200 px exactement chacune.
  2. Trois colonnes d’environ 286,7 px chacune.
  3. Trois colonnes d’environ 273,3 px chacune.
  4. Quatre colonnes de 180 px exactement chacune.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un long glossaire doit descendre dans une colonne étroite puis continuer dans la suivante, comme dans un journal. Quelle fonctionnalité de mise en page CSS fournit directement ce flux de texte ?
  1. Une grille avec des pistes 1fr répétées.
  2. Une mise en page multicolonne avec columns.
  3. Une mise en page flexible avec flex-direction: row.
  4. Un positionnement absolu avec des décalages égaux.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Une image et sa légende partagent grid-area: 1 / 1. La légende suit l’image dans le HTML et aucune des deux n’a de z-index. Laquelle est dessinée au-dessus ?
  1. L’image est dessinée au-dessus.
  2. L’enfant le plus haut est dessiné au-dessus.
  3. L’enfant le plus large est dessiné au-dessus.
  4. La légende est dessinée au-dessus.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 4 : Diagnostiquer le placement et l’alignement10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Un en-tête n’a ni marge intérieure ni bordure. Son premier enfant, un titre, possède une marge supérieure de 22 px qui fusionne avec celle de l’en-tête. L’espace apparaît à l’extérieur de l’arrière-plan de l’en-tête. Quelle modification place l’espacement à l’intérieur de l’en-tête ?
  1. Garder la marge de l’enfant et ajouter une marge supérieure de 22 px à l’en-tête.
  2. Supprimer la marge de l’enfant et ajouter une marge inférieure de 22 px à l’en-tête.
  3. Supprimer la marge de l’enfant et ajouter une marge intérieure supérieure de 22 px à l’en-tête.
  4. Garder la marge de l’enfant et donner à l’en-tête un positionnement relatif.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un <ul> est un conteneur de grille. Chaque <li> contient un lien. Quels éléments deviennent des éléments de grille du <ul> ?
  1. Les éléments de liste enfants directs.
  2. Les liens dans les éléments de liste.
  3. Les éléments de liste et leurs liens.
  4. Les éléments frères du conteneur de liste.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Une carte positionnée possède une largeur de contenu de 280 px, une marge intérieure de 18 px de chaque côté et une bordure de 2 px. Elle utilise content-box. Un enfant positionné en absolu possède width: 50% et right: 12px, sans marge intérieure, bordure ou marge extérieure propre. Quelle est la largeur de l’enfant et à quelle distance du bord gauche de la marge intérieure de la carte se trouve son bord gauche ?
  1. 140 px de large ; son bord gauche est à 128 px vers l’intérieur.
  2. 160 px de large ; son bord gauche est à 148 px vers l’intérieur.
  3. 158 px de large ; son bord gauche est à 158 px vers l’intérieur.
  4. 158 px de large ; son bord gauche est à 146 px vers l’intérieur.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Sept cartes flexibles possèdent flex: 1 1 150px dans une rangée de 640 px avec retour à la ligne et des espaces de 10 px. Il n’y a ni marges extérieures ou intérieures, ni bordures, ni limites de taille. Comment les cartes se répartissent-elles sur les lignes et quelles largeurs obtiennent-elles sur les deux lignes ?
  1. Trois puis quatre ; environ 206,7 px puis 152,5 px.
  2. Quatre puis trois ; 152,5 px puis environ 206,7 px.
  3. Quatre puis trois ; 160 px sur les deux lignes.
  4. Quatre puis trois ; 150 px puis environ 213,3 px.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Un conteneur flexible en français utilise row-reverse. Le groupe doit être placé contre le bord gauche, quel que soit le début inversé de son axe principal. Quelle valeur de justify-content suit ce bord de début de la direction d’écriture ?
  1. flex-start
  2. flex-end avec row
  3. start
  4. space-between
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Quelle liste de pistes développée est produite par repeat(2, 80px 1fr) ?
  1. 80px 80px 1fr 1fr
  2. 80px 1fr 80px 1fr
  3. 160px 2fr
  4. 80px 1fr 1fr
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Une grille contient sept cartes, quatre colonnes auto-fit qui tiennent dans sa largeur et un placement ordinaire ligne par ligne. La dernière ligne possède une cellule vide. Auto-fit réduit-il la quatrième colonne, et pourquoi ?
  1. Non ; son élément de la première ligne garde cette colonne occupée.
  2. Oui ; toute cellule vide réduit sa colonne entière.
  3. Non ; auto-fit ne réduit jamais les colonnes générées.
  4. Oui ; seule la dernière ligne détermine si une colonne est occupée.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Deux colonnes fixes de 140 px se trouvent dans une grille de 500 px avec un espace de 20 px. Aucun autre espacement ne s’applique. Avec justify-content: center, quel espace se trouve avant la première colonne ?
  1. 110 px
  2. 90 px
  3. 200 px
  4. 100 px
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Une barre latérale adhérente partage une ligne de grille haute avec un article. Elle possède top: 12px, aucune hauteur fixe et l’étirement par défaut ; elle remplit la ligne et ne se déplace pas visiblement. Aucun overflow d’ancêtre ne la perturbe. Quelle modification lui donne de la place pour adhérer tout en la gardant dans le flux ?
  1. Définir justify-self: start sur la barre latérale.
  2. Définir align-self: start sur la barre latérale.
  3. Définir position: absolute sur la barre latérale.
  4. Définir z-index: 12 sur la barre latérale.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Une boîte utilise width: 100%, une marge intérieure gauche et droite de 14 px et box-sizing: content-box, sans bordure. La largeur de contenu de son parent est de 390 px. Pourquoi cette boîte dépasse-t-elle le parent ?
  1. Sa largeur de contenu de 390 px reçoit 28 px de marge intérieure en plus.
  2. Sa largeur de contenu est réduite à 362 px par la marge intérieure.
  3. Sa marge intérieure remplace les marges extérieures du parent.
  4. Sa largeur est mesurée depuis la bordure de la zone d’affichage.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Série 5 : Combiner les règles dans de nouvelles mises en page10 Questions Pratiques

Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.

Question 1 sur 10

Une image et un paragraphe sont les enfants directs d’un parent passé du flux normal à display: flex. L’image possède toujours float: left, mais les lignes inférieures du paragraphe ne passent plus sous elle. Comment rétablir l’habillage ordinaire de l’image par le texte ?
  1. Garder flex et ajouter clear: both au paragraphe.
  2. Garder flex et augmenter la marge gauche de l’image flottante.
  3. Garder flex et donner flex-grow: 1 au paragraphe.
  4. Remettre ce parent dans le flux normal et garder l’image flottante.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un bouton d’aide fixe se trouve dans un panneau transformé qui disparaît lors du défilement. Aucun autre ancêtre ne modifie la référence du positionnement fixe. Un en-tête fixe distinct de 72 px recouvre aussi les cibles des liens internes à la page. Le bouton doit rester attaché à la zone d’affichage et les cibles doivent rester visibles sous l’en-tête. Quelle paire de modifications traite ces deux références ?
  1. Augmenter le z-index du bouton ; ajouter 72 px de margin-bottom à l’en-tête fixe.
  2. Rendre le bouton adhérent dans le panneau ; ajouter 72 px de padding-bottom sur html.
  3. Sortir le bouton du panneau transformé ; ajouter 72 px de scroll-padding-top sur html.
  4. Donner top: 0 au bouton ; ajouter 72 px de border-bottom aux cibles des liens.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Deux panneaux positionnés en relatif partagent un contexte d’empilement parent : A possède le z-index 1 et B le z-index 2. A contient un composant isolé avec une décoration de niveau négatif et un menu au z-index 100. Le menu doit apparaître au-dessus de B, tandis que la décoration reste derrière le texte de son composant. Quelle modification satisfait les deux objectifs ?
  1. Faire passer A au-dessus de 2 et garder le composant isolé.
  2. Faire passer le menu au-dessus de 200 et supprimer l’isolation du composant.
  3. Garder A à 1 et faire passer le composant isolé au-dessus de 2.
  4. Supprimer le positionnement du menu et garder les deux niveaux des panneaux.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Les liens d’une rangée flexible suivent un ordre cohérent dans le HTML, mais order: -1 place visuellement le dernier lien en premier. Quels ordres suivent le focus clavier normal et la lecture par un lecteur d’écran ?
  1. Seul le focus suit l’ordre visuel.
  2. Les deux suivent l’ordre du HTML.
  3. Seule la lecture suit l’ordre visuel.
  4. Les deux suivent l’ordre visuel.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Trois éléments flexibles de 80 px qui ne grandissent pas se trouvent dans une rangée en français de 500 px avec des espaces de 20 px. Le troisième possède margin-inline-start: auto et le conteneur possède justify-content: center. Aucun autre espacement ne s’applique. À quelle distance du bord gauche du contenu commence le troisième élément ?
  1. 420 px
  2. 280 px
  3. 310 px
  4. 400 px
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Une grille possède six colonnes explicites et quatre lignes explicites. Un panneau utilise grid-column: 2 / -1; grid-row: 2 / span 2. Combien de cellules couvre-t-il ?
  1. 8 cellules
  2. 12 cellules
  3. 15 cellules
  4. 10 cellules
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Quelle propriété raccourcie de grille centre chaque élément sur les deux axes dans sa zone ?
  1. place-content: center
  2. place-items: center
  3. text-align: center
  4. justify-content: center
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Une grille d’article utilise 1fr min(65ch, 100% - 32px) 1fr. Dans sa police actuelle, 1 ch vaut 8 px. Pour des largeurs de contenu de 480 px et 900 px, quelles sont les largeurs de la piste centrale et quel placement donne une photo en pleine largeur ?
  1. 480 px et 520 px ; grid-column: 1 / -1.
  2. 448 px et 868 px ; grid-column: 2.
  3. 448 px et 520 px ; grid-column: 1 / -1.
  4. 520 px et 520 px ; grid-column: 1 / 3.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Dans une collection de cartes, les titres, les descriptions et les pieds doivent être alignés d’une carte à l’autre. Chaque carte possède ces trois enfants directs, mais sa grille de lignes indépendante actuelle ne peut pas aligner leurs limites sur celles des cartes voisines. Quelle relation doit remplacer ce dimensionnement indépendant des lignes ?
  1. Chaque carte couvre trois colonnes parentes et les adopte avec une sous-grille de colonnes.
  2. Chaque carte occupe une ligne parente et donne à son pied une marge supérieure automatique.
  3. Chaque carte occupe une cellule parente et fixe les trois lignes enfants à 1fr.
  4. Chaque carte couvre trois lignes parentes et les adopte avec une sous-grille de lignes.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Une boîte de 210 px commence à 150 px du bord gauche de la zone d’affichage. La zone d’affichage mesure 340 px de large. De combien le bord droit de la boîte dépasse-t-il le bord droit de la zone d’affichage ?
  1. 20 px
  2. 60 px
  3. 130 px
  4. 150 px
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Tu bloques sur ton propre exercice ? Aide aux Devoirs

Mots-Clés

86 Mots-Clés, chacun avec sa définition

A

alignement des éléments
L’alignement des éléments positionne chaque élément flexible ou de grille dans l’espace qui lui est attribué, comme une zone de grille ou une ligne flexible.
L’alignement des éléments de grille peut centrer une carte étroite dans sa piste sans déplacer la piste elle-même.
alignement du contenu
L’alignement du contenu positionne les pistes de grille ou les lignes flexibles en groupe dans leur conteneur lorsqu’il reste de l’espace.
L’alignement du contenu déplace trois colonnes fixes en groupe vers le centre du conteneur de grille.
alignement sur la ligne de base
L’alignement sur la ligne de base positionne les éléments contenant du texte de façon à aligner leurs lignes de base malgré les différences de taille de police ou de hauteur de boîte.
L’alignement sur la ligne de base permet à un petit libellé de barre d’outils de s’aligner naturellement à côté d’un titre plus grand.
auto-fill
Auto-fill est un mot-clé de répétition automatique qui crée autant de pistes que l’espace le permet et conserve les pistes répétées même lorsqu’elles sont vides.
Auto-fill laisse une dernière colonne inutilisée à côté d’une courte rangée de cartes au lieu d’y étirer les cartes.
auto-fit
Auto-fit est un mot-clé de répétition automatique qui réduit les pistes répétées vides et leurs espaces après le placement des éléments.
Auto-fit permet à trois colonnes flexibles de cartes de s’élargir lorsqu’une quatrième colonne générée ne contient aucun élément.
axe principal
L’axe principal est la direction dans laquelle un conteneur flexible dispose ses éléments ; elle est déterminée par flex-direction.
Avec une direction en colonne, l’axe principal est vertical et justify-content répartit la hauteur disponible.
axe secondaire
L’axe secondaire est la direction perpendiculaire à l’axe principal d’un conteneur flexible, utilisée pour l’alignement transversal des éléments et des lignes.
Dans une rangée flexible en français, l’axe secondaire est vertical : align-items peut donc centrer les contrôles courts.

B

bloc englobant
Un bloc englobant est le rectangle de référence utilisé pour calculer les dimensions ou les décalages d’une boîte selon les règles de mise en page applicables.
La carte positionnée en relatif fournit le bloc englobant du badge absolu aux bords de sa marge intérieure.
boîte de bloc
Une boîte de bloc commence sur une nouvelle ligne de bloc et remplit normalement la largeur disponible lorsque sa largeur est automatique.
Un paragraphe reste une boîte de bloc même lorsque sa largeur est réduite à 280 px.
boîte en ligne
Une boîte en ligne participe à une ligne de texte et passe à la ligne avec le texte au lieu d’occuper toute une ligne de bloc.
Le lien est une boîte en ligne dans la phrase : les mots environnants partagent donc sa ligne.

C

calque de superposition
Un calque de superposition est une boîte dessinée sur un autre élément, créée à l’aide de zones de grille superposées ou de couches positionnées.
La légende forme un calque de superposition en partageant la cellule de l’image et en apparaissant plus loin dans le HTML.
cellule de grille
Une cellule de grille est l’espace situé à l’intersection d’une ligne et d’une colonne de grille, délimité par les lignes de grille qui les entourent.
Une légende et une image peuvent partager une cellule de grille pour créer une superposition sans positionnement absolu.
clearfix
Un clearfix est une ancienne technique de confinement des éléments flottants qui ajoute un pseudo-élément avec clear après le contenu d’un conteneur.
Une ancienne feuille de style utilise un clearfix pour empêcher la section suivante de remonter à côté d’une rangée de boîtes flottantes.
colonne de contenu
Une colonne de contenu est une région de largeur limitée destinée à rendre le contenu de la page lisible, souvent centrée avec des marges automatiques en ligne et une marge intérieure latérale.
La colonne de contenu centrée cesse de s’élargir sur les grands écrans tout en conservant une marge intérieure sur les écrans étroits.
conteneur de grille
Un conteneur de grille est une boîte dont le type d’affichage en grille dispose les enfants directs à l’aide de pistes de lignes et de colonnes partagées.
Le conteneur de grille du tableau de bord définit des colonnes qui restent alignées sur plusieurs lignes de panneaux.
conteneur flexible
Un conteneur flexible est une boîte dont le type d’affichage flexible dispose les enfants directs comme des éléments flexibles le long d’un axe principal.
La navigation devient un conteneur flexible, tandis que sa liste de liens imbriquée peut avoir sa propre mise en page.
contexte d’empilement
Un contexte d’empilement est un groupe de boîtes dessiné comme une seule unité lorsqu’il est comparé aux autres groupes du contexte environnant.
Le contexte d’empilement de l’en-tête reste sous la région principale même si son menu possède un niveau interne très élevé.
contexte de formatage de bloc
Un contexte de formatage de bloc est une région de flux indépendante qui contient ses éléments flottants et sépare ses marges de celles de ses enfants.
Lorsqu’une boîte de profil contient une photo flottante, son contexte de formatage de bloc permet à son arrière-plan d’entourer la photo.

D

débordement
Le débordement est le fait pour un contenu de dépasser la zone attribuée à une boîte ; ce contenu peut rester visible, être coupé ou devenir accessible par défilement grâce au CSS.
La longue ligne de code provoque un débordement horizontal qui peut être maintenu dans un bloc de code à défilement local.
direction en ligne
La direction en ligne est celle dans laquelle le texte se déroule dans une ligne, par exemple de gauche à droite en français ou de droite à gauche en arabe.
Une marge automatique au début de la direction en ligne passe du côté droit lorsque le texte est en arabe.
display: none
Display none est un réglage d’affichage qui retire un élément et ses descendants de la mise en page, sans réserver d’espace pour leur boîte.
Utiliser display none pour un message fermé supprime l’espace que le message visible occuperait.

É

élément de grille
Un élément de grille est une boîte enfant directe dans le flux d’un conteneur de grille, placée automatiquement ou explicitement dans les pistes de la grille.
Une carte est un élément de grille même lorsqu’elle utilise sa propre mise en page flexible pour disposer son titre et son bouton.
élément flexible
Un élément flexible est une boîte enfant directe dans le flux qui participe à la mise en page flexible de son parent, avec des règles de dimensionnement et d’alignement flexibles.
Chaque carte est un élément flexible de la rangée extérieure et peut aussi disposer son propre contenu en colonne.
élément flottant
Un élément flottant est une boîte déplacée d’un côté d’un conteneur pour que le contenu en ligne qui suit puisse l’habiller.
Un élément flottant à gauche permet aux premières lignes de l’article de longer le portrait avant de reprendre toute la largeur.
élément positionné
Un élément positionné possède une valeur calculée de position autre que static, ce qui permet de lui appliquer des décalages.
Un élément positionné en relatif peut fournir la boîte de référence d’un badge sans se déplacer lui-même.

E

espace libre
L’espace libre est l’espace restant sur l’axe principal après soustraction des tailles de départ des éléments flexibles et des espaces entre eux de la taille du conteneur.
Une barre d’outils à laquelle il reste 120 px après prise en compte de ses bases et de ses espaces donne cet espace libre aux contrôles qui grandissent.

F

Flexbox
Flexbox est une méthode de mise en page qui partage l’espace entre des éléments le long d’une rangée ou d’une colonne principale, chaque ligne issue d’un retour à la ligne étant dimensionnée indépendamment.
Flexbox permet aux contrôles courts et longs d’une barre d’outils de partager une rangée, puis de passer à la ligne lorsque l’espace est limité.
flow-root
Flow-root est une valeur de display qui crée une boîte de bloc avec sa propre région de flux indépendante, contenant ses enfants flottants.
Flow-root sur un conteneur de profil contenant une photo flottante garde la bordure du conteneur autour de cette photo.
flux normal
Le flux normal est la disposition par défaut des boîtes par le navigateur dans l’ordre du code source : les blocs s’empilent et le contenu en ligne se répartit sur des lignes.
Dans le flux normal, l’ajout d’un paragraphe déplace les paragraphes suivants vers le bas lorsque son texte grandit.
fonction minmax()
La fonction minmax() donne à une piste de grille une taille minimale et une taille maximale, en combinant une limite inférieure avec une possibilité d’agrandissement.
Minmax avec un minimum nul permet à une colonne égale aux autres de rester étroite tandis que son texte long passe à la ligne à l’intérieur.
fusion des marges
La fusion des marges combine certaines marges verticales de blocs qui se touchent en une seule marge dans le flux normal.
La fusion des marges fait qu’une marge inférieure de 20 px et une marge supérieure de 36 px laissent un espace de 36 px.

G

grille de formulaire
Une grille de formulaire utilise des pistes partagées pour le contenu d’un formulaire, par exemple une colonne pour les étiquettes et une autre pour leurs champs.
Une grille de formulaire aligne les champs même lorsqu’une étiquette est bien plus longue que celles des autres lignes.
grille explicite
La grille explicite est constituée des pistes et des limites définies par le modèle de grille, y compris ses zones nommées.
La ligne -1 marque la fin de la grille explicite, même lorsque le placement crée d’autres pistes au-delà.
grille implicite
La grille implicite est constituée des pistes supplémentaires générées lorsque le placement nécessite de l’espace au-delà des pistes définies explicitement.
La liste de produits ajoute des lignes de grille implicites à l’arrivée de nouvelles cartes sans modifier son modèle de colonnes.
groupe de saisie
Un groupe de saisie associe un champ à des contrôles liés, souvent avec un champ flexible et un bouton de taille naturelle sur une même rangée.
Le groupe de saisie de recherche permet au champ de rétrécir tout en gardant son bouton d’envoi dans le conteneur.

H

hauteur dynamique de la zone d’affichage
La hauteur dynamique de la zone d’affichage est la hauteur visible variable de la zone d’affichage, représentée par dvh lorsque les contrôles du navigateur apparaissent ou disparaissent.
La hauteur dynamique de la zone d’affichage aide une section mobile en plein écran à s’adapter lorsque la barre d’adresse est visible.

I

inline-block
Un inline-block est une boîte qui reste dans une ligne de texte tout en acceptant une largeur, une hauteur et un espacement vertical de boîte.
Un lien de navigation mis en forme en inline-block peut avoir une cible de clic plus grande grâce à une marge intérieure.

L

ligne de grille
Une ligne de grille est une limite entre les pistes de grille ou autour de celles-ci, identifiée par un numéro ou un nom pour placer les éléments.
La ligne de grille 4 est la limite de fin lorsqu’un élément couvre les trois premières colonnes à partir de la ligne 1.
ligne nommée
Une ligne nommée est une limite de grille portant un nom, déclaré dans une liste de pistes ou généré à partir d’une zone nommée.
La ligne nommée main-start permet à un autre panneau de partager la limite de début de la zone de contenu principale.

M

marge automatique
Une marge automatique absorbe l’espace disponible de son côté d’un élément, ce qui permet une séparation ou un centrage flexible dans une mise en page.
Une marge automatique après le logo utilise la largeur disponible et garde les liens de navigation à l’autre extrémité.
mise en page bidimensionnelle
Une mise en page bidimensionnelle contrôle ensemble les lignes et les colonnes afin que les éléments puissent partager des limites dans les deux directions, comme dans une grille.
Un tableau de bord a besoin d’une mise en page bidimensionnelle pour aligner les panneaux entre les lignes et le long des colonnes.
mise en page imbriquée
Une mise en page imbriquée est une disposition interne dont le conteneur est lui-même un élément d’une mise en page extérieure, ce qui permet de combiner les méthodes.
La grille de page et la colonne flexible de chaque carte forment une mise en page imbriquée aux rôles externes et internes distincts.
mise en page multicolonne
La mise en page multicolonne fait continuer un même flux de contenu à travers des colonnes de texte successives, selon un nombre de colonnes ou une largeur de colonne préférée.
La mise en page multicolonne permet à un long glossaire de descendre dans sa première colonne avant de continuer dans la deuxième.
mise en page unidimensionnelle
Une mise en page unidimensionnelle dispose les éléments principalement sur un axe, les lignes issues d’un retour à la ligne étant traitées indépendamment, comme dans Flexbox.
Une barre d’outils avec retour à la ligne utilise une mise en page unidimensionnelle, car chaque rangée ne partage que sa propre largeur disponible.
mot-clé span
Le mot-clé span dans le placement en grille indique le nombre de pistes qu’un élément traverse à partir d’une limite ou d’un emplacement choisi automatiquement.
La déclaration grid-column: 2 / span 3 donne au panneau une étendue de trois pistes de colonnes.

O

objet média
Un objet média est un modèle de composant avec une image à côté d’un texte flexible, comme une ligne de profil, de commentaire ou de produit.
L’objet média garde un avatar de 64 px à côté d’un message, tandis que celui-ci utilise la largeur restante.
ordre d’empilement
L’ordre d’empilement est l’ordre dans lequel les boîtes superposées sont dessinées, ce qui détermine quelles parties visibles apparaissent devant.
La légende située plus loin dans le code apparaît au-dessus de l’image jusqu’à ce qu’une règle z-index modifie leur ordre d’empilement.

P

pied de page collé en bas (sticky footer)
Le modèle de pied de page collé en bas garde le pied de page en bas d’une page courte tout en lui permettant de suivre un contenu plus long dans le flux normal.
Le modèle de pied de page collé en bas utilise une ligne principale flexible au lieu de retirer le pied de page du flux.
piste de grille
Une piste de grille est une ligne ou une colonne délimitée par deux lignes de grille voisines, dont la taille est contrôlée par les règles de dimensionnement de la grille.
Une piste de grille fixe de 180 px contient la barre latérale, tandis que la piste fractionnaire adjacente prend le reste.
placement automatique
Le placement automatique attribue les éléments de grille sans position définie aux cellules disponibles, normalement dans l’ordre du code source, ligne par ligne, et ajoute des pistes selon les besoins.
Le placement automatique met la septième carte dans une troisième ligne lorsque la grille possède trois colonnes.
placement dense
Le placement dense comble les trous précédents d’une grille avec des éléments plus petits situés plus loin dans le code, ce qui peut modifier leur ordre visible.
Le placement dense peut déplacer une petite image de galerie dans un trou situé au-dessus d’une grande image précédente.
pleine largeur
La pleine largeur décrit un contenu qui dépasse une colonne de texte plus étroite pour remplir la largeur disponible de la mise en page environnante.
Une photo utilise la pleine largeur de la grille d’article tandis que les paragraphes restent dans sa piste centrale.
positionnement absolu
Le positionnement absolu retire une boîte du flux normal et la place à l’aide de décalages mesurés depuis son bloc englobant.
Le positionnement absolu place le badge à 10 px des bords supérieur et droit de la marge intérieure de la carte.
positionnement adhérent (sticky)
Le positionnement adhérent garde une boîte dans le flux, puis la maintient à un seuil de décalage pendant son déplacement dans son bloc englobant.
Le positionnement adhérent garde les en-têtes de tableau visibles jusqu’à ce que leur tableau atteigne la fin de sa région de défilement.
positionnement fixe
Le positionnement fixe retire une boîte du flux et la positionne normalement par rapport à la zone d’affichage pendant le défilement du document.
Le positionnement fixe garde le bouton d’aide dans le coin de la fenêtre, sauf si un ancêtre répondant aux critères change sa référence.
positionnement relatif
Le positionnement relatif décale l’endroit où une boîte est dessinée tout en conservant son espace d’origine dans le flux normal.
Le positionnement relatif déplace le libellé vers le bas sans déplacer le paragraphe qui le suit.
propriété align-content
La propriété align-content répartit les lignes flexibles sur l’axe secondaire ou les lignes de grille sur l’axe de bloc lorsqu’il reste de la place.
Align-content peut centrer une ligne flexible dans un conteneur avec retour à la ligne, mais n’a aucun effet lorsque le conteneur utilise nowrap.
propriété align-items
La propriété align-items définit l’alignement des éléments sur l’axe secondaire dans Flexbox ou sur l’axe de bloc dans une grille, dans la zone de chaque élément.
Align-items défini sur baseline aligne un libellé de barre d’outils avec la première ligne de texte d’un titre plus grand.
propriété align-self
La propriété align-self remplace le choix d’alignement des éléments du parent pour un élément flexible ou de grille sur son axe d’alignement.
Align-self défini sur start empêche une barre latérale de grille de s’étirer pour remplir une ligne d’article haute.
propriété clear
La propriété clear déplace une boîte du flux normal sous les éléments flottants précédents du côté choisi ou des deux côtés.
Définir clear sur both fait commencer le titre de la section suivante sous l’image flottante de l’article.
propriété flex-basis
La propriété flex-basis fournit la taille de départ d’un élément flexible sur l’axe principal avant que l’agrandissement ou le rétrécissement ne répartisse l’espace.
Une valeur flex-basis de 180 px fournit la largeur de départ de la carte même lorsque sa propriété width vaut 140 px.
propriété flex-grow
La propriété flex-grow donne à un élément une part relative de l’espace libre positif après prise en compte des bases flexibles et des espaces.
Une valeur flex-grow de 2 donne à une carte deux fois plus d’espace ajouté qu’à une carte voisine dont la valeur est de 1.
propriété flex-shrink
La propriété flex-shrink contrôle la perte d’espace à l’aide d’un poids égal au facteur de rétrécissement multiplié par la taille de base de l’élément.
Deux facteurs flex-shrink égaux peuvent retirer des nombres de pixels différents lorsque les cartes ont des bases différentes.
propriété gap
La propriété gap définit l’espacement entre les éléments ou les pistes d’une mise en page ; elle ne crée pas de marge intérieure autour de l’extérieur du conteneur.
Un espace de 12 px sépare les contrôles de la barre d’outils sans ajouter 12 px autour de ses bords extérieurs.
propriété inset
La propriété raccourcie inset définit les décalages supérieur, droit, inférieur et gauche dans une seule déclaration.
Un calque positionné en absolu, de taille automatique et dont inset vaut zéro, remplit son bloc englobant.
propriété isolation
La propriété isolation est un contrôle CSS dont la valeur isolate crée un contexte d’empilement local sans modifier l’opacité ou la position de la boîte.
Isolation garde la couche décorative négative d’une carte au-dessus de son arrière-plan et sous son texte.
propriété justify-content
La propriété justify-content répartit l’espace restant sur l’axe principal dans Flexbox ou aligne les colonnes d’une grille sur l’axe en ligne.
Justify-content ne centre un groupe flexible que si le dimensionnement et les marges automatiques laissent de la place autour de lui.
propriété justify-self
La propriété justify-self aligne un élément de grille sur l’axe en ligne dans sa propre zone ; elle n’aligne pas les éléments flexibles individuellement.
Justify-self défini sur end déplace un badge de grille vers la fin en ligne de sa zone sans affecter les éléments voisins.
propriété raccourcie flex
La propriété raccourcie flex combine l’agrandissement, le rétrécissement et la base, dans cet ordre, pour décrire le dimensionnement flexible d’un élément sur l’axe principal.
La propriété raccourcie flex 0 0 180px donne à une barre latérale une base de 180 px sans agrandissement ni rétrécissement.
propriété raccourcie place-items
La propriété raccourcie place-items définit ensemble align-items et justify-items, ce qui permet d’écrire de façon concise l’alignement des éléments sur deux axes dans une grille.
Place-items défini sur center centre une petite boîte d’accueil dans la zone de grille de la section principale.
propriété scroll-padding-top
La propriété scroll-padding-top réserve un espace en haut de la zone de visualisation cible d’une boîte de défilement, ce qui est utile sous les en-têtes fixes.
Scroll-padding-top sur la page aide un lien de section à faire apparaître son titre sous la barre de navigation.
propriété z-index
La propriété z-index définit un niveau d’empilement pour une boîte positionnée ou un élément flexible ou de grille dans son contexte d’empilement.
Un z-index élevé sur un menu déroulant ne peut toujours pas le placer au-dessus d’un contexte frère plus haut que son contexte ancêtre.

R

redistribution
La redistribution est l’adaptation du contenu à une largeur d’affichage réduite afin qu’il reste utilisable sans défilement inutile dans deux directions.
La vérification de la redistribution à 320 pixels CSS révèle un panneau de largeur fixe qui pousse la page sur le côté.
retour à la ligne des éléments flexibles
Le retour à la ligne des éléments flexibles leur permet de passer sur d’autres lignes flexibles lorsque la ligne actuelle ne peut pas accueillir leurs tailles de départ.
Le retour à la ligne des éléments flexibles permet à une liste de mots-clés de passer sur une deuxième ligne, chaque ligne partageant son propre espace.

S

sous-grille
Une sous-grille permet à une grille imbriquée d’adopter les pistes de son parent sur un axe afin d’aligner les parties internes de composants voisins.
Une sous-grille de lignes donne aux cartes voisines des limites communes pour leurs titres, descriptions et pieds.
superposition de mise en page
Une superposition de mise en page est un dessin des outils de développement qui révèle les pistes et les lignes d’une grille ou la disposition des éléments d’un conteneur flexible.
La superposition de mise en page révèle qu’un élément principal flexible est devenu plus large que sa part à côté d’une barre latérale.

T

taille minimale automatique
Une taille minimale automatique peut garder un élément flexible ou une piste de grille assez grand pour son contenu insécable et empêcher le rétrécissement attendu.
La taille minimale automatique d’une longue ligne de code sans coupure peut rendre l’élément flexible qui la contient plus large que sa part disponible.
type d’affichage externe
Le type d’affichage externe contrôle la participation d’une boîte générée à la mise en page de son parent, par exemple son placement en bloc ou en ligne.
Un bouton inline-flex possède un type d’affichage externe en ligne : il peut donc se placer dans une ligne de texte.
type d’affichage interne
Le type d’affichage interne contrôle la façon dont une boîte dispose ses propres enfants, avec une méthode telle que le flux normal, Flexbox ou une grille.
Faire passer le type d’affichage interne d’un panneau à grid dispose ses enfants directs en pistes.

U

unité ch
L’unité ch mesure la largeur du chiffre 0 dans la police utilisée et donne une limite approximative en caractères pour les largeurs de texte.
Utiliser l’unité ch pour une colonne de texte de 65 ch limite approximativement sa longueur de ligne sans compter les lettres réelles.
unité fr
L’unité fr représente une part de l’espace de grille restant après déduction des pistes fixes et des espaces, sous réserve des contraintes de dimensionnement des pistes.
Une colonne utilisant l’unité fr reçoit de l’espace flexible après soustraction de la barre latérale et des espaces entre colonnes.

V

valeur calculée
Une valeur calculée est la valeur CSS résolue affichée par les outils de développement, utile pour vérifier les règles qui influent réellement sur un élément.
La valeur calculée de display montre que le parent est devenu flexible alors qu’une règle plus ancienne déclarait block.
visibility: hidden
Visibility hidden est un réglage de visibilité qui masque une boîte tout en conservant l’espace qu’elle occupe dans la mise en page.
Visibility hidden réserve de la place pour le message d’état : le révéler n’a donc pas nécessairement besoin de déplacer le texte suivant.

Z

zone d’affichage (viewport)
La zone d’affichage est la partie visible de la fenêtre à travers laquelle un document est consulté ; elle sert normalement de référence au positionnement fixe.
Le contrôle de retour en haut reste à 18 px du bord inférieur de la zone d’affichage pendant le défilement du document.
zone de grille
Une zone de grille est une région rectangulaire d’une ou de plusieurs cellules de grille qui peut accueillir un élément ou délimiter son placement.
Dans un tableau de bord disposé en grille, la zone de grille d’un graphique couvre trois colonnes et deux lignes.
zone nommée
Une zone nommée est une région rectangulaire de grille décrite dans les chaînes du modèle de zones et attribuée à un élément avec grid-area.
Dans un modèle à deux colonnes, la zone nommée de l’en-tête est répétée sur les deux cellules de la première ligne pour que l’en-tête couvre la page.

À propos de cette unité

Par StudeliSignaler une erreur

Crée ton propre Matériel d'Étude

Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.

Commencer