Positionnement¶
Le positionnement contrôle l'emplacement d'un élément par rapport à sa place normale dans le document, à son parent ou à la fenêtre du navigateur. Le Style Manager expose tous les modes de positionnement CSS pour que vous puissiez sortir des éléments du flux normal quand c'est nécessaire.
Deux points à garder à l'esprit :
- Le flux normal gère la plupart des mises en page. Vous n'avez besoin du positionnement que pour les superpositions, les en-têtes collants, les badges et les autres éléments qui doivent sortir de l'ordre d'empilement habituel.
- Un élément positionné a besoin d'un ancêtre positionné. Le positionnement absolu remonte l'arborescence à la recherche du parent le plus proche dont la Position n'est pas
static. S'il n'en trouve aucun, il utilise la page elle-même.
Comment fonctionne le flux normal¶
Par défaut, chaque élément suit Position : static. Les éléments s'empilent de haut en bas dans l'ordre où ils apparaissent dans le HTML. Les propriétés de décalage (Top, Right, Bottom, Left) n'ont aucun effet sur les éléments statiques.
Si vos besoins de mise en page consistent à disposer des éléments côte à côte ou à répartir l'espace, utilisez Flexbox plutôt que le positionnement.
Décaler un élément avec le positionnement relatif¶
Définissez Position sur relative et l'élément reste à sa place normale dans le flux, mais vous pouvez le décaler visuellement avec Top, Right, Bottom et Left. L'espace qu'il occupait initialement est préservé -- les autres éléments ne se déplacent pas pour combler le vide.
Unités de décalage disponibles dans Silex : px, %, em, rem, vh, dvh, vw, dvw, cqi, cqb, cqw, cqh, cqmin, cqmax.
Quand l'utiliser : Petits ajustements visuels (décaler une icône de 2px vers le haut pour l'aligner avec le texte), ou établir un contexte de positionnement pour des enfants positionnés en absolu.
Sortir un élément du flux avec le positionnement absolu¶
Définissez Position sur absolute et l'élément quitte entièrement le flux normal. Il est placé par rapport à son ancêtre le plus proche dont la Position est définie sur une valeur autre que static. Si aucun ancêtre de ce type n'existe, il se positionne par rapport au corps de la page.
- Sélectionnez l'élément parent et définissez sa Position sur
relative(c'est l'ancre). - Sélectionnez l'élément enfant et définissez sa Position sur
absolute. - Utilisez Top, Right, Bottom, Left pour le placer précisément.
Quand l'utiliser : Badges sur les cartes, boutons de fermeture sur les modales, éléments décoratifs chevauchant le contenu.
Erreur courante : Oublier de définir le parent sur relative. L'enfant saute au niveau de la page et vous ne comprenez pas pourquoi.
Fixer un élément au viewport avec le positionnement fixe¶
Définissez Position sur fixed et l'élément est retiré du flux et positionné par rapport au viewport du navigateur. Il reste en place quand l'utilisateur fait défiler la page.
Quand l'utiliser : Barres de navigation persistantes, boutons d'action flottants, bannières de cookies.
Attention : Les éléments fixes peuvent recouvrir le contenu en dessous. Donnez au corps de la page suffisamment de padding supérieur (ou de margin) pour compenser la hauteur d'un en-tête fixe.
Coller un élément pendant le défilement¶
Définissez Position sur sticky et l'élément se comporte comme relative jusqu'à ce que l'utilisateur dépasse un seuil que vous définissez avec Top (le plus souvent). Une fois le seuil atteint, l'élément se « colle » en place comme un élément fixe -- mais uniquement à l'intérieur de son conteneur parent. Quand le parent sort de la vue en défilant, l'élément collant part avec lui.
- Sélectionnez l'élément.
- Définissez Position sur
sticky. - Définissez Top sur
0px(ou le décalage souhaité par rapport au bord du viewport).
Quand l'utiliser : En-têtes de section dans une longue liste, barre latérale qui suit le défilement mais s'arrête au pied de page.
Erreur courante : Le parent a Overflow défini sur hidden ou auto. Le positionnement collant exige que le parent permette le débordement visible dans la direction du défilement.
Contrôler l'ordre d'empilement avec z-index¶
Quand des éléments se chevauchent (à cause du positionnement absolu, fixe ou collant, ou de marges négatives), Z-index détermine lequel apparaît au-dessus. Les nombres plus élevés sont plus proches du spectateur. La valeur par défaut est auto (effectivement 0).
Z-index ne fonctionne que sur les éléments positionnés (tout sauf static) ou les enfants flex/grid. Dans Silex, c'est un curseur allant de -10000 à 10000.
Valeurs fixes : auto, unset, initial, inherit, revert.
Conseil : Utilisez des valeurs petites et prévisibles. Un schéma courant : contenu à 1, menus déroulants à 10, modales à 100, infobulles à 1000. Sauter directement à 9999 rend la gestion future des couches plus difficile.
Contrôler le débordement¶
Overflow détermine ce qui se passe quand le contenu est plus grand que son conteneur. Dans Silex, la propriété est divisée en deux sous-propriétés :
- Overflow X (horizontal) :
auto,hidden,visible,scroll,inherit,initial,unset - Overflow Y (vertical) : mêmes valeurs
| Valeur | Comportement |
|---|---|
visible (par défaut) |
Le contenu déborde de la boîte. Aucun recadrage. |
hidden |
Le contenu est recadré. Aucune barre de défilement. |
scroll |
Le contenu est recadré. Les barres de défilement s'affichent toujours. |
auto |
Les barres de défilement n'apparaissent que quand le contenu déborde. |
Quand l'utiliser : Masquer les éléments décoratifs qui débordent, créer des panneaux défilants ou empêcher les décalages de mise en page causés par un texte long. N'oubliez pas que overflow: hidden sur un parent empêchera position: sticky de fonctionner sur ses enfants.
Contrôler la visibilité¶
Visibility masque un élément visuellement tout en conservant son espace dans la mise en page. Valeurs : visible, hidden, collapse, inherit, initial, unset.
C'est différent de Display none (qui retire l'élément du flux entièrement). Utilisez Visibility hidden quand vous devez réserver l'espace de l'élément sans l'afficher -- par exemple, masquer une colonne dans un tableau sans effondrer la mise en page.
Exemples pratiques¶
Barre de navigation collante :
1. Sélectionnez la section de navigation.
2. Position : sticky, Top : 0px.
3. Z-index : 10 pour qu'elle reste au-dessus du contenu de la page.
Badge sur une carte :
1. Sélectionnez le conteneur de la carte. Position : relative.
2. Ajoutez un petit élément texte à l'intérieur. Position : absolute, Top : -8px, Right : -8px.
3. Stylisez le badge avec une couleur de fond et un border radius.
Superposition plein écran :
1. Ajoutez un Div pour la superposition. Position : fixed, Top : 0, Right : 0, Bottom : 0, Left : 0.
2. Z-index : 100.
3. Couleur de fond avec une certaine opacité pour un effet d'assombrissement.
Erreurs courantes¶
- Utiliser le positionnement absolu pour la mise en page. Si vous vous retrouvez à positionner chaque élément en absolu, passez à Flexbox. Les éléments absolus ne réagissent pas aux éléments voisins.
- Oublier le contexte de positionnement. Un élément positionné en absolu cherche l'ancêtre non-statique le plus proche. Aucun ancêtre ? Il utilise la page.
- Guerre des z-index. Ajouter des valeurs de z-index toujours plus grandes parce que les éléments continuent d'apparaître derrière d'autres. Prenez du recul et planifiez vos couches d'empilement.
- Overflow hidden qui casse le sticky. Un parent avec overflow
hiddenouautoempêche le positionnement collant de fonctionner.
En savoir plus¶
- MDN : Positionnement CSS -- tutoriel pour débutants
- MDN : Contexte d'empilement -- comment fonctionnent les contextes de z-index
- Flexbox -- mise en page sans positionnement
- Le modèle de boîte -- comment le margin, le padding et les dimensions interagissent avec le positionnement
- Design responsive -- adapter les éléments positionnés selon les points de rupture
- Interaction Designer -- votez pour le support des animations et interactions
Avancé : requêtes de conteneur et éléments positionnés
Container Type¶
Silex prend en charge Container-type sur les éléments, avec les valeurs normal, size et inline-size. Quand vous définissez un élément comme conteneur de requête, ses descendants peuvent utiliser les unités de requête de conteneur pour leurs décalages : cqi, cqb, cqw, cqh, cqmin, cqmax. C'est utile pour positionner des éléments par rapport à la taille de leur conteneur plutôt que du viewport.
Unités dynamiques du viewport¶
Les propriétés de décalage prennent en charge dvh (hauteur dynamique du viewport) et dvw (largeur dynamique du viewport) en plus des standards vh/vw. Les unités dynamiques tiennent compte du chrome des navigateurs mobiles qui apparaît et disparaît pendant le défilement, offrant un positionnement plus précis sur les appareils mobiles.
Les mots-clés inherit, initial et unset¶
Chaque propriété de positionnement accepte inherit (utiliser la valeur du parent), initial (utiliser la valeur CSS par défaut) et unset (hériter si la propriété hérite naturellement, sinon utiliser initial). Ils sont utiles pour surcharger les styles à différents points de rupture.
Référence : toutes les propriétés de positionnement
| Propriété | Type | Valeurs / Unités | MDN |
|---|---|---|---|
| Position | sélection | static, relative, absolute, fixed, sticky, inherit, initial, unset |
lien |
| Top | nombre | px, %, em, rem, vh, dvh, vw, cqi, cqb, cqw, cqh, cqmin, cqmax |
lien |
| Bottom | nombre | px, %, em, rem, vh, dvh, vw, cqi, cqb, cqw, cqh, cqmin, cqmax |
lien |
| Right | nombre | px, %, em, rem, vh, vw, dvw, cqi, cqb, cqw, cqh, cqmin, cqmax |
lien |
| Left | nombre | px, %, em, rem, vh, vw, dvw, cqi, cqb, cqw, cqh, cqmin, cqmax |
lien |
| Z-index | curseur | -10000 à 10000, auto, unset, initial, inherit, revert |
lien |
| Overflow X | sélection | auto, hidden, visible, scroll, inherit, initial, unset |
lien |
| Overflow Y | sélection | auto, hidden, visible, scroll, inherit, initial, unset |
lien |
| Visibility | sélection | visible, hidden, collapse, inherit, initial, unset |
lien |
| Display | sélection | block, inline, inline-block, flex, grid, inline-flex, none, inherit, initial, unset |
lien |
| Container-type | sélection | normal, size, inline-size |
lien |
Quiz¶
Q1 : Vous voulez qu'un badge de notification se place dans le coin supérieur droit d'une carte. Que définissez-vous sur la carte et le badge ?
- A) Carte : Position
absolute. Badge : Positionrelative. - B) Carte : Position
relative. Badge : Positionabsolute, Top0, Right0. - C) Carte : Position
static. Badge : Positionfixed, Top0, Right0.
Réponse
B) Carte : Position relative. Badge : Position absolute, Top 0, Right 0. -- La carte devient le contexte de positionnement. Le badge est sorti du flux et placé dans le coin supérieur droit de la carte.
Q2 : Votre en-tête collant cesse de coller quand vous faites défiler la page. Quelle est la cause la plus probable ?
- A) Le Z-index est trop bas.
- B) Un élément parent a Overflow défini sur
hiddenouauto. - C) Vous avez oublié de définir Position sur
relativesur le parent.
Réponse
B) Un élément parent a Overflow défini sur hidden ou auto. -- Le positionnement collant exige que le overflow du parent soit visible dans la direction du défilement. Overflow hidden ou auto crée un nouveau contexte de défilement qui empêche le sticky de fonctionner comme prévu.
Q3 : Vous avez défini un élément avec Position absolute mais il saute en haut à gauche de toute la page au lieu de son conteneur parent. Pourquoi ?
- A) Le z-index est incorrect.
- B) Aucun ancêtre n'a une valeur de Position non-statique.
- C) L'élément a besoin de Display
block.
Réponse
B) Aucun ancêtre n'a une valeur de Position non-statique. -- Le positionnement absolu cherche l'ancêtre positionné le plus proche. Si chaque ancêtre est static (la valeur par défaut), l'élément se positionne par rapport au corps de la page. Définissez le parent souhaité avec Position relative.
Q4 : Vous voulez qu'un élément soit invisible mais conserve son espace dans la mise en page. Quelle approche utilisez-vous ?
- A) Display
none - B) Visibility
hidden - C) Position
absoluteavec Left-9999px
Réponse
B) Visibility hidden -- Cela masque l'élément visuellement tout en préservant son espace dans le flux du document. Display none le retire entièrement du flux.