Préparation d'entretien 100% Gratuit angularforall.com

Entretien CSS Junior — Flexbox et Responsive

Css Junior Quiz-Css-Junior Flexbox Css-Grid Media-Queries Css-Variables Custom-Properties Animations-Css Transitions Entretien-Css-Junior Qcm-Css-Junior Css-Moderne Front-End
Junior 🔀 Mixte 20 questions ⏱ 15 min
📝

Entretien CSS Junior — Flexbox et Responsive

20 questions CSS niveau junior : Flexbox, Grid, media queries, pseudo-classes, animations, variables CSS. Préparez un entretien développeur junior avec des questions pratiques.

20 questions ⏱ ~15 min Niveau Junior

Partager

Banque de révision : les 50 questions corrigées

Voici l'intégralité des 50 questions de « Entretien CSS Junior — Flexbox et Responsive », chacune avec sa bonne réponse et son explication. Le quiz interactif ci-dessus en tire une sélection aléatoire à chaque tentative — utilisez cette liste complète pour réviser.

  • Un module CSS pour créer des mises en page en grille bidimensionnelle (colonnes ET rangées)
  • Un module CSS de mise en page unidimensionnelle (une rangée OU une colonne) pour distribuer l'espace entre éléments (bonne réponse)
  • Un système de grille Bootstrap pour le responsive design
  • Un remplaçant du float pour créer des layouts multi-colonnes
Explication : Flexbox (Flexible Box Layout) est un module CSS de mise en page unidimensionnelle. Il gère soit une rangée, soit une colonne à la fois. Il excelle pour : aligner des éléments, distribuer l'espace, gérer l'ordre visuel. Pour les layouts 2D complexes (grilles), on préfère CSS Grid.
Montre que tu distingues Flexbox (1D) et Grid (2D). Donne un exemple concret : navbar (Flexbox) vs layout page entière (Grid).

  • align-items: center
  • justify-content: center (bonne réponse)
  • align-content: center
  • flex-align: center
Explication : Dans un conteneur flex en direction row, justify-content agit sur l'axe principal (horizontal). align-items agit sur l'axe transversal (vertical). Donc justify-content: center centre horizontalement, align-items: center centre verticalement.

  • Donne à l'élément une largeur fixe de 1 pixel
  • Permet à l'élément de grandir et rétrécir pour occuper l'espace disponible équitablement (bonne réponse)
  • Fixe l'élément en première position dans le conteneur
  • Active le mode Flexbox sur l'élément
Explication : flex: 1 est un raccourci pour flex-grow: 1; flex-shrink: 1; flex-basis: 0%. Cela signifie que l'élément peut grandir et rétrécir librement. Si plusieurs enfants ont flex: 1, ils partagent l'espace disponible équitablement.

  • flex-direction
  • flex-grow
  • flex-wrap (bonne réponse)
  • flex-flow
Explication : flex-wrap contrôle si les éléments flex passent sur une nouvelle ligne quand il n'y a plus de place. Valeurs : nowrap (défaut, pas de retour à la ligne), wrap (retour à la ligne vers le bas), wrap-reverse (retour à la ligne vers le haut). flex-flow est un raccourci pour flex-direction + flex-wrap.

  • display: grid; grid-template-columns: 33% 33% 33%
  • display: grid; grid-template-columns: repeat(3, 1fr) (bonne réponse)
  • display: flex; flex-columns: 3
  • display: grid; columns: 3
Explication : display: grid; grid-template-columns: repeat(3, 1fr) crée 3 colonnes égales. 1fr signifie "1 fraction de l'espace disponible". repeat(3, 1fr) est équivalent à 1fr 1fr 1fr. On évite 33% car il ignore les gaps et peut provoquer un débordement.
L'unité fr est l'atout majeur de Grid. Elle distribue l'espace disponible APRÈS soustraction des gaps et des colonnes de taille fixe.

  • Une requête JavaScript pour récupérer des informations sur l'écran
  • Une règle CSS qui applique des styles selon les caractéristiques de l'appareil (largeur, résolution…) (bonne réponse)
  • Un sélecteur CSS pour cibler les éléments multimédias (images, vidéos)
  • Une fonction CSS pour importer d'autres fichiers de style
Explication : Une media query applique des styles conditionnellement selon les caractéristiques de l'appareil : largeur/hauteur du viewport (max-width, min-width), résolution, orientation, préférence de thème (prefers-color-scheme), etc. C'est la base du Responsive Web Design.

  • @media screen and (width: 768px) { }
  • @media (max-width: 767px) { } (bonne réponse)
  • @media (min-width: 768px) { }
  • @media screen < 768px { }
Explication : @media (max-width: 767px) cible les écrans dont la largeur est inférieure ou égale à 767px (mobile-first inverse). On utilise 767px et non 768px car le breakpoint Bootstrap pour tablet est à 768px — on veut donc les écrans STRICTEMENT en dessous.

  • Une variable JavaScript accessible depuis CSS via window.getComputedStyle()
  • Une propriété déclarée avec -- en préfixe et utilisée via la fonction var() (bonne réponse)
  • Un alias pour des sélecteurs complexes, déclaré avec $variable en Sass
  • Une valeur dynamique calculée par le navigateur, déclarée avec calc()
Explication : Les custom properties (variables CSS) se déclarent avec le préfixe -- : --primary-color: #3498db; et s'utilisent via var() : color: var(--primary-color);. Elles sont héritées, peuvent être modifiées en JavaScript, et s'appliquent dans le contexte de cascade normale. Souvent déclarées sur :root pour être globales.
Montre leur utilité pour un système de design tokens : un changement de variable propage instantanément le style dans tout le site. Mentionne aussi le fallback : var(--color, blue).

  • ::before (bonne réponse)
  • ::after
  • :first-child
  • :before-element
Explication : ::before insère un pseudo-élément avant le contenu de l'élément. ::after l'insère après. Ces pseudo-éléments nécessitent obligatoirement la propriété content (même vide : content: "") pour s'afficher. Ils sont couramment utilisés pour des décorations CSS ou des icônes.

  • Cible les éléments fixés en haut de page lors du défilement
  • Cible l'élément visible au centre du viewport
  • Applique des styles quand le curseur survole l'élément (bonne réponse)
  • Définit l'état d'un élément masqué avant apparition
Explication : :hover est une pseudo-classe qui cible un élément quand l'utilisateur survole avec le curseur. C'est idéal pour les effets interactifs. Note : sur les appareils tactiles, :hover peut se comporter différemment. La pseudo-classe :focus cible l'élément qui a le focus clavier.

  • flex-rank
  • flex-position
  • order (bonne réponse)
  • z-index
Explication : La propriété order sur un élément flex enfant modifie son ordre d'affichage. La valeur par défaut est 0. Les éléments sont triés du plus petit au plus grand. order: -1 place l'élément avant tous les autres (valeur 0). Attention : cela modifie uniquement l'ordre visuel, pas l'ordre de tabulation (accessibilité).

  • Ils sont identiques, seule la syntaxe diffère
  • :nth-child compte TOUS les enfants ; :nth-of-type compte seulement les enfants du même type de balise (bonne réponse)
  • :nth-of-type compte TOUS les enfants ; :nth-child compte seulement les enfants du même type
  • :nth-child utilise des index 0-based, :nth-of-type utilise des index 1-based
Explication : :nth-child(2) cible le 2ème enfant quel que soit son type. :nth-of-type(2) cible le 2ème enfant du type de l'élément sélectionné. Exemple : p:nth-child(2) cible le 2ème enfant si c'est un <p>. p:nth-of-type(2) cible le 2ème <p> quel que soit sa position globale.
Ce distinguo est fréquent en entretien. Illustre avec un exemple où l'élément 2 est un <span>p:nth-child(2) ne le sélectionnerait pas.

  • animation
  • transform
  • transition (bonne réponse)
  • keyframes
Explication : transition crée une animation douce lors du changement d'une propriété CSS (ex: au survol). Syntaxe : transition: propriété durée timing-function délai. Exemple : transition: background-color 0.3s ease. Pour des animations plus complexes et en boucle, on utilise animation avec @keyframes.

  • Déplace l'élément de 50px vers la droite dans le flux HTML
  • Agrandit l'élément de 50% sur l'axe horizontal
  • Déplace l'élément de 50px vers la droite visuellement sans affecter le flux (bonne réponse)
  • Fait pivoter l'élément de 50 degrés sur l'axe horizontal
Explication : transform: translateX(50px) déplace visuellement l'élément de 50px vers la droite sans affecter le flux du document (l'espace d'origine est conservé). transform est performant car il peut être accéléré par le GPU. Pour les translations en Y : translateY(), en XY : translate(x, y).

  • Développer l'application mobile avant le site web
  • Écrire les styles de base pour mobile, puis ajouter des styles pour les écrans plus larges avec min-width (bonne réponse)
  • Utiliser uniquement des unités em et rem pour le responsive
  • Désactiver les styles sur desktop et les ajouter uniquement pour mobile avec max-width
Explication : Le Mobile First consiste à écrire les styles par défaut pour les petits écrans, puis à utiliser des media queries avec min-width pour ajouter des styles au fur et à mesure que la largeur augmente. Ex : @media (min-width: 768px) { ... }. C'est la stratégie recommandée pour la performance (les mobiles ne chargent pas les styles desktop inutiles).
Contraste avec "Desktop First" qui part des grands écrans et utilise max-width. Mobile First est la norme moderne car les mobiles représentent souvent plus de 50% du trafic.

  • align-self: different
  • align-self: override
  • N'importe quelle valeur valide : flex-start, flex-end, center, stretch, baseline (bonne réponse)
  • align-self: auto
Explication : align-self sur un élément flex enfant permet de surcharger l'align-items défini sur le parent, pour cet élément seulement. Les valeurs valides sont : flex-start, flex-end, center, stretch, baseline, auto (valeur par défaut = hérite de align-items du parent).

  • @keyframes nom { start { } end { } }
  • @keyframes nom { from { } to { } } (bonne réponse)
  • @animation nom { 0% { } 100% { } }
  • @keyframe nom { begin { } finish { } }
Explication : Les @keyframes utilisent from/to ou des pourcentages (0%/100%). Exemple : @keyframes slide { from { opacity: 0; } to { opacity: 1; } }. Ensuite on applique l'animation : animation: slide 0.5s ease-in-out. On peut aussi combiner : from { } 50% { } to { }.

  • L'ordre dans lequel les fichiers CSS sont chargés par le navigateur
  • Un système de points qui détermine quelle règle CSS s'applique quand plusieurs règles ciblent le même élément (bonne réponse)
  • La vitesse à laquelle le navigateur applique les styles CSS
  • La précision avec laquelle un sélecteur CSS cible un élément spécifique
Explication : La spécificité est calculée par un score en 4 niveaux : (inline styles, IDs, classes/attributs/pseudo-classes, éléments/pseudo-éléments). Par exemple : #id .class p = (0,1,1,1). La règle avec le score le plus élevé l'emporte. En cas d'égalité, c'est l'ordre d'apparition qui décide.
Mémorise le tableau : ID=100, classe=10, élément=1. Et rappelle que !important brise la cascade — à éviter sauf cas extrêmes.

  • Transforme l'élément en grille de pixels pour le pixel-perfect design
  • Active le mode CSS Grid sur l'élément, faisant de ses enfants directs des éléments de grille (bonne réponse)
  • Affiche l'élément comme un tableau HTML
  • Crée automatiquement une grille responsive de 12 colonnes
Explication : display: grid transforme l'élément en conteneur de grille (grid container). Ses enfants directs deviennent automatiquement des éléments de grille (grid items). On définit ensuite la structure avec grid-template-columns, grid-template-rows, gap, etc.

  • spacing
  • margin
  • gap (bonne réponse)
  • grid-spacing
Explication : gap (anciennement grid-gap) définit l'espace entre les cellules de la grille. On peut définir deux valeurs : gap: 20px 10px (rangées colonnes). gap fonctionne aussi avec Flexbox (uniquement entre éléments, pas sur les bords externes). Ne pas confondre avec margin qui ajoute de l'espace autour des éléments.

  • max-width s'applique uniquement en mode responsive, width s'applique toujours
  • width définit une taille fixe ; max-width définit une limite supérieure — l'élément peut être plus petit mais jamais plus large (bonne réponse)
  • max-width est une propriété Flexbox, width est une propriété CSS classique
  • Elles sont identiques sauf que max-width prend la valeur en pourcentage uniquement
Explication : width fixe une largeur exacte. max-width fixe une limite maximale — l'élément peut être plus étroit (ex: sur mobile) mais ne dépassera jamais cette valeur. Un pattern courant : width: 100%; max-width: 1200px; margin: 0 auto; — pleine largeur sur mobile, centré et limité sur desktop.
C'est une combinaison classique pour les containers de contenu. Parle aussi de min-width pour éviter que les éléments ne deviennent trop étroits.

  • Cible les éléments dont la propriété spécifiée n'est pas définie
  • Exclut les éléments correspondant au sélecteur donné entre parenthèses (bonne réponse)
  • Applique des styles uniquement si la condition JavaScript est fausse
  • Cible les éléments sans enfants
Explication : :not() est une pseudo-classe de négation. p:not(.intro) cible tous les <p> qui n'ont PAS la classe intro. On peut combiner : input:not([type="submit"]):not([disabled]). Elle accepte des sélecteurs simples (et des listes en CSS moderne).

  • text-overflow: hidden
  • white-space: nowrap (bonne réponse)
  • overflow: text
  • word-break: keep-all
Explication : white-space: nowrap force le texte à rester sur une seule ligne, ignorant les espaces et les retours à la ligne. Souvent combiné avec overflow: hidden et text-overflow: ellipsis pour afficher "..." quand le texte est tronqué.

  • Une fonction JavaScript qui calcule les styles CSS dynamiquement
  • Une fonction CSS pour effectuer des calculs mathématiques, combinant différentes unités (bonne réponse)
  • Un raccourci pour déclarer plusieurs propriétés CSS en une seule ligne
  • Une méthode pour calculer la spécificité d'un sélecteur
Explication : calc() permet d'effectuer des calculs CSS en combinant différentes unités. Exemple : width: calc(100% - 80px) — prend 100% de la largeur parente moins 80px. C'est idéal pour des layouts mixtes. Les opérateurs +, -, *, / sont supportés. Les espaces autour de + et - sont obligatoires.
Cas d'usage concret : sidebar de 300px fixe + contenu qui prend le reste — width: calc(100% - 300px). Aujourd'hui, CSS Grid et Flexbox remplacent souvent ce besoin.

  • font-variant
  • font-display (bonne réponse)
  • font-style
  • font-synthesis
Explication : font-display (dans @font-face) contrôle comment la police est affichée pendant son chargement. Valeurs clés : swap (affiche police de remplacement, puis swap quand chargée — recommandé pour performance), block (attends la police), fallback, optional.

  • L'élément reste collé à une position fixe, même lors du défilement
  • L'élément se comporte comme relative jusqu'à un seuil de défilement, puis comme fixed (bonne réponse)
  • L'élément est retiré du flux et fixé en bas de la page
  • L'élément colle à l'élément précédent dans le flux
Explication : position: sticky est hybride : l'élément se comporte comme relative dans le flux normal, mais devient fixed par rapport au plus proche ancêtre scrollable quand on atteint le seuil défini (top: 0 par exemple). Parfait pour les headers collants de tableaux ou de navigation.

  • rem est relatif à l'élément racine (html) ; em est relatif à l'élément parent (bonne réponse)
  • em est relatif à l'élément racine (html) ; rem est relatif à l'élément parent
  • rem est une unité absolue ; em est une unité relative
  • rem et em sont identiques, rem est simplement la syntaxe moderne
Explication : rem (root em) est toujours relatif à la taille de police de l'élément <html> (généralement 16px par défaut). em est relatif à la taille de police de l'élément parent — ce qui peut causer des effets de cumul imprévus dans des éléments imbriqués. rem est plus prévisible.
Recommande rem pour les tailles de police et les espacements globaux (prévisible), em pour des composants auto-scalables (ex: icône dont la taille suit le texte du bouton).

  • flex-orientation
  • flex-axis
  • flex-direction (bonne réponse)
  • flex-flow-direction
Explication : flex-direction sur le conteneur flex définit l'axe principal. Valeurs : row (défaut, gauche à droite), row-reverse (droite à gauche), column (haut en bas), column-reverse (bas en haut). Changer la direction inverse aussi les rôles de justify-content et align-items.

  • Étire l'image pour remplir exactement le conteneur, déformant les proportions si nécessaire
  • Redimensionne l'image pour couvrir entièrement le conteneur en conservant les proportions (peut rogner) (bonne réponse)
  • Affiche l'image en pleine taille sans redimensionnement
  • Centre l'image dans le conteneur avec des espaces vides sur les côtés
Explication : object-fit: cover est l'équivalent de background-size: cover pour les balises <img> et <video>. L'image couvre entièrement le conteneur en conservant ses proportions — elle peut être rognée. object-position permet de centrer la zone de focus.

  • Pour détecter si le site est affiché en mode nuit sur mobile
  • Pour appliquer des styles quand l'utilisateur préfère le mode sombre au niveau du système d'exploitation (bonne réponse)
  • Pour activer automatiquement un thème sombre sur le site en JavaScript
  • Pour cibler uniquement les moniteurs à fort contraste
Explication : @media (prefers-color-scheme: dark) détecte la préférence de thème sombre configurée au niveau de l'OS de l'utilisateur. C'est la façon native d'implémenter le dark mode en CSS pur. Exemple : @media (prefers-color-scheme: dark) { body { background: #1a1a1a; color: white; } }.
Pour un toggle manuel, combine cette media query avec des custom properties CSS (variables) — modifie les variables via JavaScript pour switcher le thème sans réécrire toutes les règles.

  • Place l'élément dans la première colonne à gauche
  • Soustrait une colonne de la grille
  • Étend l'élément sur toutes les colonnes, de la première à la dernière (bonne réponse)
  • Place l'élément en dernière colonne
Explication : grid-column: 1 / -1 étend l'élément de la ligne de grille 1 jusqu'à la dernière ligne (-1 = dernière). C'est un raccourci pour "pleine largeur". Équivalent à grid-column: 1 / span all. Très utile pour les headers ou footers dans une grille.

  • flex-shrink (bonne réponse)
  • flex-grow
  • flex-basis
  • min-content
Explication : flex-shrink contrôle comment un élément flex peut rétrécir quand l'espace est insuffisant. flex-shrink: 0 empêche l'élément de rétrécir (taille minimum garantie). flex-grow contrôle la capacité à grandir. flex-basis définit la taille initiale avant distribution de l'espace.

  • Des sélecteurs JavaScript pour valider les formulaires
  • Des pseudo-classes CSS qui ciblent les champs de formulaire selon leur état de validation HTML5 (bonne réponse)
  • Des attributs HTML pour marquer les champs valides ou invalides
  • Des classes CSS à ajouter manuellement après validation côté serveur
Explication : :valid et :invalid sont des pseudo-classes CSS qui reflètent l'état de validation HTML5 natif des champs de formulaire. Un <input type="email" required> a la pseudo-classe :invalid si vide, :valid si correctement rempli. Permet de styliser les états sans JavaScript.
Mentionne aussi :user-invalid (CSS moderne) qui ne s'active qu'après que l'utilisateur ait interagi avec le champ, évitant les messages d'erreur précoces.

  • L'attribut data-content= et la propriété attr(data-content)
  • La propriété content et sa valeur (texte, URL, attr(), etc.) (bonne réponse)
  • L'attribut before= et la propriété insert
  • Le HTML du template et la propriété innerHTML
Explication : Les pseudo-éléments ::before et ::after nécessitent la propriété content pour exister. Valeurs possibles : content: "texte", content: url("icon.svg"), content: attr(data-label) (lit un attribut HTML), content: "" (vide mais nécessaire pour les formes décoratives).

  • Inclut border ET padding dans la largeur et hauteur définies (bonne réponse)
  • Exclut le border du calcul de la taille de l'élément
  • Applique une bordure automatique à tous les éléments
  • Change l'unité de border en pourcentage
Explication : Avec box-sizing: border-box, la width et height définies incluent déjà le padding et la border. Ainsi, si un élément a width: 200px et padding: 20px, le contenu fait 160px. Avec la valeur par défaut content-box, la largeur totale serait 240px.

  • Une propriété qui prédit les changements de style à venir pour optimiser le rendu du navigateur
  • Une requête pour demander au navigateur de préparer un élément pour une animation imminente via promotion GPU (bonne réponse)
  • Une propriété pour forcer le recalcul des styles lors d'un changement de classe
  • Un préfixe pour les propriétés CSS expérimentales
Explication : will-change informe le navigateur en avance des propriétés qui vont changer, permettant la promotion sur le GPU. Exemple : will-change: transform, opacity. À utiliser avec parcimonie — seulement sur les éléments vraiment animés, et à retirer après l'animation. Un usage excessif peut dégrader la mémoire.
Précise qu'il faut l'ajouter juste AVANT l'animation (via JS) et le retirer après. Ne pas l'ajouter en CSS permanent sauf cas justifié.

  • Crée un espace entre le conteneur flex et sa bordure
  • Définit l'espace entre les éléments flex, mais pas sur les bords extérieurs (bonne réponse)
  • Définit la largeur minimale de chaque élément flex
  • gap n'est pas disponible en Flexbox, uniquement en Grid
Explication : La propriété gap (anciennement grid-gap) est maintenant supportée en Flexbox. Elle crée un espace entre les éléments flex (pas sur les bords extérieurs du conteneur). gap: 16px ajoute 16px entre chaque élément. On peut définir séparément : row-gap et column-gap.

  • Cible le premier élément de son type dans le document
  • Cible le premier enfant direct de son parent, quel que soit son type (bonne réponse)
  • Cible le premier enfant auquel une classe a été assignée
  • Cible le premier élément visible dans la page
Explication : :first-child cible un élément qui est le premier enfant direct de son parent, indépendamment du type de l'élément. p:first-child cible un <p> seulement s'il est le premier enfant. À distinguer de :first-of-type qui cible le premier élément de son type.

  • img { width: auto; height: 100%; }
  • img { width: 100%; height: 100%; }
  • img { max-width: 100%; height: auto; } (bonne réponse)
  • img { display: block; width: fixed; }
Explication : La règle classique pour les images responsives est img { max-width: 100%; height: auto; }. max-width: 100% empêche l'image de dépasser son conteneur. height: auto maintient les proportions originales. L'image peut être plus petite que sa taille native mais jamais plus grande que son conteneur.
Mentionne aussi l'attribut HTML loading="lazy" pour le chargement différé des images, et l'élément <picture> pour servir différentes résolutions.

  • L'animation avance vers l'avant, pas en reverse
  • L'élément conserve les styles de la dernière frame de l'animation après qu'elle se termine (bonne réponse)
  • L'animation se répète indéfiniment vers l'avant
  • Le remplissage de l'animation est appliqué en mode forward-compatibility
Explication : animation-fill-mode: forwards fait en sorte que l'élément conserve les styles du dernier keyframe après la fin de l'animation. Par défaut (none), l'élément revient à son style initial. backwards applique les styles du premier keyframe pendant le délai d'animation. both combine les deux.

  • Centre le conteneur Grid dans la page
  • Centre les éléments Grid horizontalement et verticalement dans leurs cellules (bonne réponse)
  • Place automatiquement les éléments au centre de la grille
  • Aligne les éléments Grid en mode colonnes centrées
Explication : place-items est un raccourci pour align-items + justify-items en CSS Grid. place-items: center centre les éléments à la fois verticalement ET horizontalement dans leurs cellules de grille. C'est la façon la plus simple de centrer parfaitement un élément dans une cellule Grid.

  • L'ordre dans lequel les feuilles de style sont appliquées
  • Un contexte d'empilement 3D créé par certaines propriétés CSS, dans lequel z-index est évalué indépendamment (bonne réponse)
  • Le contexte de block formatting qui détermine le flux des éléments
  • La pile d'événements CSS déclenchés lors d'animations
Explication : Un stacking context (contexte d'empilement) est créé par certaines propriétés comme position non-static + z-index non-auto, opacity < 1, transform, filter. Dans ce contexte, le z-index est évalué localement — un enfant ne peut jamais dépasser son contexte parent, peu importe son z-index.
Ce concept explique pourquoi un z-index: 9999 ne fonctionne parfois pas — si le parent a un z-index défini, il crée un contexte isolé.

  • Combine les styles de deux classes
  • Cible le premier frère adjacent (immédiatement après) dans le DOM (bonne réponse)
  • Cible tous les frères suivants dans le DOM
  • Augmente la spécificité du sélecteur
Explication : A + B est le sélecteur de frère adjacent — il cible l'élément B qui est immédiatement après A dans le DOM et partage le même parent. A ~ B cible TOUS les frères B qui suivent A.

  • display: flow
  • display: flow-root (bonne réponse)
  • display: block-context
  • display: bfc
Explication : display: flow-root crée un Block Formatting Context (BFC) sans les effets secondaires de overflow: hidden. Un BFC isole les flottants (clearfix moderne), empêche le margin collapse, et crée un contexte de mise en page indépendant. C'est la méthode moderne pour remplacer le hack clearfix.

  • Quand tu as besoin de contrôler précisément les colonnes ET les rangées simultanément
  • Quand tu disposes les éléments dans une seule dimension, ou quand le layout doit s'adapter au contenu (bonne réponse)
  • Flexbox est toujours préférable car il est plus simple
  • Grid est toujours préférable car il est plus puissant
Explication : Flexbox est idéal pour : navbars, listes d'éléments dans une direction, centrage simple, layouts où le contenu dicte la taille. Grid est idéal pour : layouts 2D complexes, grilles de cartes, page layouts. Une règle pragmatique : si tu as besoin de contrôle sur deux axes simultanément, utilise Grid ; sinon, Flexbox suffit souvent.
Les deux peuvent être combinés : Grid pour le layout de page, Flexbox pour les composants internes. La frontière n'est pas toujours nette — utilise ce qui est le plus lisible.

  • Arrondit une valeur à l'entier le plus proche
  • Définit une valeur préférée entre un minimum et un maximum (bonne réponse)
  • Bloque une animation à son état courant
  • Coupe le texte à une longueur maximale
Explication : clamp(min, préféré, max) renvoie une valeur comprise entre min et max. Exemple : font-size: clamp(16px, 4vw, 32px) — la taille sera minimum 16px, idéalement 4% du viewport, mais jamais plus de 32px. Parfait pour la typographie fluide responsive.

  • :first-letter
  • ::first-letter (bonne réponse)
  • ::letter-first
  • :letter(1)
Explication : ::first-letter (avec double deux-points — syntaxe moderne) cible la première lettre d'un élément bloc. Il permet de créer des lettrines (grande capitale décorative). Propriétés applicables : font-size, color, float, font-weight. Seuls les éléments bloc (pas inline) le supportent.

  • text-overflow: cut avec overflow: hidden
  • white-space: nowrap + overflow: hidden + text-overflow: ellipsis (bonne réponse)
  • max-width: 100% + clip: ellipsis
  • overflow-text: ellipsis + display: block
Explication : Pour tronquer du texte avec "...", il faut trois propriétés ensemble : white-space: nowrap (empêche le retour à la ligne), overflow: hidden (cache le dépassement), text-overflow: ellipsis (affiche "..."). Pour les cas multi-lignes, on utilise display: -webkit-box; -webkit-line-clamp: 3 (maintenant standard).
Ce "trio CSS" est demandé en entretien. Mentionne aussi -webkit-line-clamp pour tronquer après N lignes — c'est devenu standard.

  • Crée automatiquement des colonnes denses sans espacement
  • L'algorithme de placement remplit les trous dans la grille avec des éléments de taille appropriée (bonne réponse)
  • Rend la grille plus compacte en réduisant le gap
  • Place les éléments de façon dense dans l'ordre du DOM
Explication : grid-auto-flow: dense modifie l'algorithme de placement de la grille : il essaie de remplir les "trous" laissés par des éléments de grande taille avec des éléments plus petits qui arrivent après. Utile pour les galeries photo de taille variable. Attention : cela peut modifier l'ordre visuel.

  • Le CSS qui gère les états d'erreur et d'exception
  • Le CSS minimal nécessaire pour afficher la partie visible de la page sans attendre le chargement du CSS complet (bonne réponse)
  • Le CSS avec la priorité !important qui écrase tous les autres styles
  • Le CSS qui définit les styles critiques pour l'accessibilité
Explication : Le Critical CSS est l'ensemble minimal de règles CSS nécessaires pour rendre la partie "above the fold" (visible sans défilement) de la page. On l'inclut en <style> inline dans le <head> pour éviter le FOUC (Flash Of Unstyled Content) et améliorer le First Contentful Paint (FCP), une métrique Core Web Vitals.
Des outils comme Penthouse ou Critical.js extraient automatiquement le critical CSS. C'est une optimisation de performance avancée souvent demandée pour les postes senior.