Introduction aux éléments positionnés
Que vais-je trouver dans ce cours sur les éléments positionnés en Css?
Vous trouverez diverses questions sur les feuilles de style css pour la présentation des blocs (calque, layer), position, visibilité.
Comment positionner un élément?
Principe de base pour créer un élément positionné
Vous pouvez en feuille de style css positionner presque toutes les balises HTML ou XHTML.
Pour cela, vous devez d'abord spécifier la règle du positionnement avec la propriété CSS position
, c'est-à-dire spécifier le contexte de positionnement qui définit les points d'origines des nouvelles positions de l'élément.
Dans un deuxième temps, vous devez spécifier la nouvelle position d'un ou des "côtés" de l'élément que vous voulez positionner. J'appelle ces "côtés" : points de positionnements.
- Le point de positionnement gauche est spécifié avec la propriété CSS
left
. - Le point de positionnement droit est spécifié avec la propriété CSS
right
. - Le point de positionnement bas est spécifié avec la propriété CSS
bottom
. - Le point de positionnement haut est spécifié avec la propriété CSS
top
.
Petit rappel, les points de positionnement d'un élément prennent en compte la taille de la marge extérieure.
Règle du positionnement
Trois types de contextes de positionnement
Il existe pour le moment trois règles de positionnement introduites avec la propriété position
CSS:
-
absolute
: par défaut, l'élément servant contexte de positionnement est la zone de contenu visible de la fenêtre du navigateur (body
). La position est donc variable pourbottom
etright
si par exemple vous réduisez la taille de la fenêtre ou au chargement suivant la taille de la fenêtre.
L'élément repositionné sort du flux normal. -
fixed
: l'élément servant de contexte de positionnement est la zone de contenu visible de la fenêtre du navigateur (body
). La position est donc variable pourbottom
etright
si par exemple vous réduisez la taille de la fenêtre ou au chargement suivant la taille de la fenêtre.
Contrairementabsolute
l'élément reste visuellement au même endroit quand on utilise les scrollbarre.
L'élément repositionné sort du flux normal.
Cas particulier : si le contexte de positionnement est créé par la propriété Csstransform
, alorsfixed
se comporte commeabsolute
. -
relative
: l'élément servant de contexte de positionnement est lui-même.
L'élément repositionné reste dans le flux normal, c'est-à-dire que l'espace utilisé de l'élément avant repositionnement est présent.
Le point de départ du positionnement absolute ou fixed
Où se situe le point d'origine?
Un élément dit positionné en absolute
ou fixed
aura comme contexte de positionnement, le premier parent ayant une propriété position
Css différente de static
, soit à ce jour fixed
, relative
ou absolute
, ou ayant une propriété transform
, perspective
ou filter
. Les bordures de ce parent faisant office contexte de positionnement, serviront de point de départ du positionnement de top
, bottom
, left
ou right
.
Si aucune propriété Css position
n'est trouvée, alors le contexte de positionnement est la fenêtre pour fixed
ou soit le début de la page body
.
top ou bottom, left ou right, qui prend le dessus?
Règles d'interprétations top et bottom
Si la propriété Css height
est spécifiée* (* autre que auto
) et que la propriété CSS bottom
et top
sont déclarées* (* autre que auto
), c'est top
qui est appliquée.
Autres cas :
-
top
a une valeur deauto
etbottom
a une valeur précisée* et queheight
est spécifiée*, alors c'estbottom
qui est appliquée. top
etbottom
ont une valeur précisée* et queheight
a une valeur deauto
, les deux sont appliqués.- si la propriété Css
writing-mode
a une valeur héritée devertical-rl
, alors les règles s'inversent.
Règles d'interprétations left et right
Si la propriété Css width
est spécifiée* (* autre que auto
) et que la propriété CSS left
et right
sont déclarées* (* autre que auto
), c'est left
qui est appliquée.
Autres Cas :
-
left
a une valeur deauto
etright
a une valeur précisée* et quewidth
est spécifiée*, alors c'estleft
qui est appliquée. -
right
etleft
ont une valeur spécifiée et quewidth
a une valeur deauto
, les deux sont appliqués. - si la propriété Css
direction
a une valeur héritée dertl
, alors les règles s'inversent.unicode-bidi
peut aussi influencer les règles.
Définir l'ordre d'empilement z-index
Règles principales de la profondeur
Quand plusieurs éléments ont une propriété CSS position
autre que static
ou ayant une propriété transform
, vous pouvez spécifier l'ordre d'empilement les un par rapport aux autres.
Pour cela, vous devez utilise la propriété CSS z-index
.
L'ordre d'empilement par défaut
Par défaut, l'ordre d'empilement pour les éléments n'ayant pas de propriété CSS z-index
ou un z-index:auto
est déterminé par l'ordre des éléments dans le code HTML.
L'élément déclaré en premier sera au-dessous de l'élément suivant et aussi de suite.
Prenons l'exemple suivant :
- les calques* sont en
position:absolute;top:0;left:0
,z-index
non spécifié.
L'ordre d'empilement est le suivant :
- calque3 est au-dessus de calque2 et calque3 est au-dessus de calque1.
- calque2 est au-dessus de calque1.
A partir du moment ou vous allez spécifier un z-index
> 0 à un élément, ce dernier sera au-dessus des éléments dont l'ordre d'empilement a été déterminé par défaut. Son ordre d'empilement dépendra à partir de ce moment-là de son contexte d'empilement.
Le contexte d'empilement
L'ordre d'empilement se fait toujours au sein d'un contexte d'empilement. Un élément devient contexte d'empilement s'il a une propriété z-index
ayant pour valeur un nombre (par défaut c'est le document).
Prenons l'exemple suivant :
- les calques* sont en
position:absolute;top:0;left:0
. - les calque1 et calque1-1 sont en
z-index:1
. - le calque2 est en
z-index:2
. - calque1-1 sont en
z-index:2
. - calque1-2 sont en
z-index:3
.
Le contexte d'empilement pour chaque élément :
- Les calque1 et calque2 ont pour contexte d'empilement body.
- Les calque1-* ont pour contexte d'empilement calque1.
- Les calque2-* ont pour contexte d'empilement calque2.
z-index
, ne seront jamais au-dessus de calque1-1 car calque1 est au-dessus de calque2.Inversement le calque1-1 et calque1-2 quelle que soit la valeur de
z-index
, ne seront jamais au-dessus de calque2-1 car calque2 est au-dessus de calque1.Prenons maintenant l'exemple suivant :
- supprimer les
z-index
de calque2 et calque1.
Le contexte d'empilement pour chaque élément :
- Les calque* et calque*-* ont maintenant pour contexte d'empilement body.
Le calque2-* et calque1-* pourront se chevaucher dans n'importe quel ordre.