Une remarque ? Une suggestion ?...

Merci de participer à l'amélioration de ce site. Prenez le temps de rédiger votre remarque le plus précisément possible :

@container - Directive CSS

@container

Résumé des caractéristiques de la directive @container

Description rapide
Permet d'écrire des règles CSS conditionnelles en fonction des caratéristiques du conteneur.
Statut
Standard
Module W3C
Module CSS - Confinement
Références (W3C)
Statut du document: WD (document de travail)

Description de la directive @container.

La directive @container introduit la possibilité d'écrire des styles conditionnels en fonction des dimensions d'un élément.
Le terme anglais est container query.

De même que les media queries (voir la directive @media) permettent d'adapter les styles en fonction des caractéristiques du terminal : dimensions du viewport, orientation de l'écran, etc. les container queries considèrent les caractéristiques d'un élément de la page (le conteneur) pour appliquer ou non des styles à ses éléments enfants.

Remarque : une requête container queries ne peut appliquer des styles que aux enfants de l'élément qui a été déclaré comme le conteneur. Ce dernier, le conteneur lui même, ne peut pas être stylé dans une requête container queries le concernant.

id=description1a
Démonstration d'une container query Dans ce premier exemple, le logo de Firefox est une image flottante sur la gauche, ce qui permet d'avoir la description à côté de l'image.
Mais si la largeur du conteneur est insuffisante, les lignes de texte situées à côté de l'image vont être très courtes, rendant la lecture difficile.
La largeur du conteneur peut être contrainte par la mise en page : par exemple ce conteneur peut être dans une cellule de grille contenant d'autres éléments et dont la largeur des colonnes est dynamique.
Pour les besoins de la démonstration, nous avons rendu la largeur du conteneur ajustable avec la souris.
id=description1b
Démonstration d'une container query Dans ce deuxième exemple, une requête container query a été utilisée pour rendre l'image non flottante lorsque la largeur du conteneur est insuffisante (inférieure à 200 pixels).
Comme ci-dessus, vous pouvez ajuster la largeur du conteneur avec la souris pour simuler une contrainte due à la mise en page.

Éléments de syntaxe :

Tout débord il faut définir quel élément est le conteneur, et de quel type de conteneur il s'agit. Cela peut se faire avec les propriétés container-name et container-type ou plus simplement avec la propriété résumée container.
Pour l'exemple ci-dessus, nous avons défini que le nom du container est demo et qu'il agit suivant l'axe des lignes. L'image est également déclarée flottante à gauche par défaut.

#description1b {container: demo / inline-size;} #description1b img {float:left; margin-right:10px;}

Remarque : l'identifiant du conteneur peut être défini sur une classe, donc pas forcément pour un élément unique.

Il faut ensuite écrire la requête container query proprement dite. Celle-ci ne peut faire référence que à des éléments enfants du conteneur. Ici nous déclarons que l'image n'est plus flottante si la largeur du conteneur est inférieure à 200 pixels.

@container demo (width < 200px) { #description1b img {float:none; margin-right:200px;} }

Autres exemples.

id=description2

On sait que le texte justifié n'est pas très esthétique sur des lignes courtes : cela provoque des espaces exagérément grands entre les mots. Une requête container query a été utilisée pour aligner le texte à gauche lorsque la largeur du conteneur est inférieure à 300 pixels.

id=description3

Ici la direction d'écriture s'adapte en fonction de la forme du conteneur : s'il est plus large que haut, l'écriture est horizontale, et verticale s'il est plus haut que large.

Unités spécifiques aux container queries.

Plusieurs unités ont été créées pour exprimer des dimensions en fonction des dimensions de l'élément conteneur. Reportez-vous à la page sur les unités CSS relatives au conteneur.

Avantages des requêtes container queries.

Le principal avantage des container queries est de permettre la mise en forme d'un élément indépendamment du reste de la page. C'est particulièrement utile pour des composants, qui peuvent être insérés dans une page dont la mise en page est inconnue.

Les requêtes style container queries.

Cette évolution des container queries permet de tester n'importe quelle propriété de l'élément conteneur. C'est la valeur calculée de la propriété qui est prise en compte.
Mais cette fonctionnalité est encore peu prise en charge.

Exemples de syntaxes pour @container.

  • @container id (width > 200px) and (width < 400px) { sélecteur { propriétés CSS } }

    Ceci est la syntaxe de base d'une requête container query.

    • id est un identifiant défini par le propriété ou sur un ou plusieurs des éléments de la page.
    • (width > 200px) est une condition faisant intervenir une propriété et une valeur. C'est la valeur calculée de la propriété qui est prise en compte.
    • and, or ou not sont des opérateurs permettant de combiner plusieurs conditions, chacune des conditions étant inscrites entre parenthèses.

    Les propriétés utilisables dans les conditions sont :

    • width et height : largeur ou hauteur de l'élément conteneur.
    • inline-size et block-size : dimension de l'élément conteneur dans la direction des lignes, ou dans la direction des blocs.
    • aspect-ratio : ratio correspondant à la largeur de l'élément conteneur divisé par sa hauteur.
    • orientation : prend la valeur landscape si la largeur de l'élément conteneur est plus grande que sa hauteur, et la valeur portrait dans le cas contraire.

    Les tests sur la hauteur (height), la dimension dans la direction des blocs (block-size), le ratio et l'orientation ne sont prises en charge que sur les conteneurs de type size (voir container-type).

  • @container (min-width: 200px) and (max-width: 400px) { sélecteur { propriétés CSS } }

    Cette syntaxe, héritée du passé, est moins lisible que la précédente. Voici les équivalences entre les deux syntaxes.

    min-width: valeur width > valeur
    max-width: valeur width < valeur
    min-height: valeur height > valeur
    max-height: valeur height < valeur
  • @container (width > 200px){ sélecteur { propriétés CSS } }

    Cette syntaxe simplifiée ne fait pas apparaître d'identifiant : tous les éléments de la page sont considérés comme des conteneurs. C'est assez imprécis et complexe à utiliser car on ne spécifie pas lequel des parents est le conteneur.

Prise en charge par les navigateurs (compatibilité).

1
Directive
@container
Estimation de la prise en charge globale.
91%

Navigateurs sur ordinateurs :

Navigateurs sur mobiles :

Navigateurs obsolètes ou marginaux :

Androïd Brower

Baidu Browser

Chrome

Chrome pour Androïd

Edge

Firefox

Firefox pour Androïd

Internet Explorer

KaiOS Browser

Opéra

Opéra Mobile

QQ Browser

Safari

Safari sur IOS

Samsung Internet

UC Browser pour Androïd

Opéra mini

Évolution de la directive @container.

Voir aussi, à propos des techniques de confinement.

Les propriétés et autres notions concernant le confinement sont décrites dans la spécification CSS Containment Module.

Propriétés :

Propriété d'optimisation, pour faciliter et accélérer le travail de mise en page.
Définit les caractéristiques d'un conteneur utilisable dans une container query (contexte d'éléments confinés).
Attribue un identifiant à un élément pour en faire un conteneur utilisable dans une container query (contexte d'éléments confinés).
Définit le type d'un conteneur utilisable dans une container query (contexte d'éléments confinés).
Définit si le contenu de l'élément (y compris les sous-éléments) doit être restitué ou pas.