Fonctionnalités CSS modernes : nesting, :has(), container queries, subgrid

Fonctionnalités CSS modernes avec démos en direct

CSS moderne : nesting, :has(), container queries, subgrid | We.Inc

Démos en direct et modifiables du nesting CSS natif, du sélecteur :has(), des container queries, de subgrid, @layer, :is(), color-mix() et text-wrap: balance, avec un tableau de support Baseline.

Le CSS pur fait désormais ce qui demandait auparavant Sass ou JavaScript. Le nesting natif regroupe les règles liées, :has() stylise un parent selon ses enfants, les container queries adaptent un composant à sa propre largeur, et subgrid aligne les éléments imbriqués sur la grille extérieure. Les quatre sont devenus Baseline en 2023, donc les navigateurs actuels les prennent en charge.

Les fonctionnalités phares en un coup d'œil

Chaque fonctionnalité ci-dessous a une démo modifiable, et la carte de la démo container query réagit à un curseur pour que vous la voyiez changer de mise en page sans redimensionner votre fenêtre. Le tableau de support indique l'année où chaque fonctionnalité est devenue Baseline, c'est-à-dire qu'elle fonctionne dans les dernières versions de Chrome, Edge, Firefox et Safari.

Questions fréquentes

Ai-je encore besoin de Sass pour le nesting ?

Pas pour le nesting seul. Le nesting natif couvre le cas courant des règles imbriquées dans d'autres règles ainsi que le sélecteur &. Sass offre toujours les mixins, les boucles et les fonctions, même si les propriétés personnalisées et color-mix() ont repris une bonne partie de ce pour quoi on l'utilisait.

Quelle est la différence entre container queries et media queries ?

Une media query interroge le viewport, généralement la largeur de la fenêtre. Une container query interroge un élément ancêtre choisi. Cela permet à un même composant carte d'afficher une mise en page compacte dans une barre latérale étroite et une mise en page large dans la colonne principale de la même page.

:has() est-il lent ?

Les moteurs des navigateurs l'ont optimisé avant sa sortie et un usage ordinaire ne pose pas de problème. Des sélecteurs très larges comme body:has(*) sur des pages énormes imposent plus de travail de correspondance, alors ancrez :has() à une classe de composant précise quand c'est possible.

Que signifie Baseline ?

Baseline est un label de la communauté de la plateforme web qui indique qu'une fonctionnalité fonctionne dans les versions actuelles de Chrome, Edge, Firefox et Safari. Newly available correspond à la date à laquelle le dernier d'entre eux l'a livrée. Widely available arrive environ trente mois plus tard.

Quand utiliser subgrid plutôt qu'une grille imbriquée ?

Utilisez subgrid quand les enfants d'un élément de grille doivent s'aligner sur les pistes de la grille extérieure, comme les titres, les textes et les boutons d'une rangée de cartes. Une grille imbriquée classique a ses propres pistes indépendantes, donc des contenus de longueurs différentes se désalignent.

Comment fonctionne le sélecteur & dans le nesting

Les cascade layers en pratique

Choisir quoi adopter en premier

Nesting CSS natif

Une carte stylisée avec des règles imbriquées

Le survol, le titre et la variante sombre sont tous à l'intérieur de .card. & désigne .card lui-même.

Le sélecteur parent :has()

Mettre en évidence un champ quand sa case est cochée

Aucun script ne s'exécute dans ce cadre. Le libellé se stylise lui-même parce qu'il contient un input coché.

Changer la mise en page d'une carte seulement si elle contient une image

Les cartes sans image gardent la mise en page sur une colonne ; celles qui en ont une passent sur deux colonnes.

Container queries

Le CSS derrière la démo à curseur

container-type rend .shelf mesurable ; la règle @container fait ensuite passer la carte en ligne dès que l'étagère mesure au moins 420px de large.

Subgrid

Des rangées de cartes alignées quelle que soit la longueur du texte

Chaque carte s'étend sur trois rangées de la grille extérieure et utilise subgrid pour ses propres rangées, donc chaque titre, texte et bouton partage la même ligne.

@layer, :is(), :where(), color-mix() et text-wrap

Les cascade layers désignent le gagnant par leur ordre

Le sélecteur d'ID se trouve dans une couche antérieure, donc la simple classe de la couche suivante l'emporte quand même.

:is() et :where() raccourcissent les listes de sélecteurs

:is() prend la spécificité de son argument le plus fort, :where() compte toujours pour zéro.

color-mix() pour les teintes et les nuances au survol

Mélanger avec du blanc ou du noir dans l'espace oklab donne des teintes régulières à partir d'une seule couleur de marque.

text-wrap: balance pour les titres

Le second titre répartit ses mots équitablement sur les lignes au lieu de laisser un mot seul. Les navigateurs limitent l'équilibrage aux blocs courts de quelques lignes.

Support des navigateurs (Baseline)

Statut Baseline (dernières versions de Chrome, Edge, Firefox et Safari), vérifié sur MDN en octobre 2026

Démo container query

La carte ci-dessous réagit à la largeur de son conteneur gris, pas à votre fenêtre. Dépassez 420px et elle passe à une mise en page sur deux colonnes.

Largeur du conteneur :

Lampe de bureau en noyer

Lumière chaude, interrupteur en laiton, abat-jour fait main.

@container (min-width: 420px) est {state}.

correspondant : image à côté du texte

non correspondant : image au-dessus du texte

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site