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.
position:absolute;
/*ou*/
position:fixed;
/*ou*/
position:relative;
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.
bottom : 10em; right : 10em;
/*ou*/
top : 10px; left : 10px;- 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 pourbottometrightsi 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 pourbottometrightsi par exemple vous réduisez la taille de la fenêtre ou au chargement suivant la taille de la fenêtre.
Contrairementabsolutel'é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, alorsfixedse 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.
<style type="text/css">
#origine{
border:1px solid red; width:250px; height:250px; padding:20px;
overflow:hidden;
position:relative;
}
#position{
border:1px solid green; width:120px; height:120px;
position:absolute;
bottom:-15px
}
</style>
<div id="origine">
<div id="position"></div>
</div>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 :
-
topa une valeur deautoetbottoma une valeur précisée* et queheightest spécifiée*, alors c'estbottomqui est appliquée. topetbottomont une valeur précisée* et queheighta une valeur deauto, les deux sont appliqués.- si la propriété Css
writing-modea 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 :
-
lefta une valeur deautoetrighta une valeur précisée* et quewidthest spécifiée*, alors c'estleftqui est appliquée. -
rightetleftont une valeur spécifiée et quewidtha une valeur deauto, les deux sont appliqués. - si la propriété Css
directiona une valeur héritée dertl, alors les règles s'inversent.unicode-bidipeut 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-indexnon spécifié.
<div id="calque1"></div>
<div id="calque2"></div>
<div id="calque3"></div>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.
<body>
<div id="calque1">
<div id="calque1-1"></div>
<div id="calque1-2"></div>
</div>
<div id="calque2">
<div id="calque2-1"></div>
<div id="calque2-2"></div>
</div>
</body>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-indexde 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.
Exemples d'éléments positionnés
Codes css
.cadre-exemple{
position:relative;
border:1px solid #ddd;
height:150px;
width:150px;
}
#exemple1 .defaut{
position:absolute;
top:0;
left:0;
height:150px;
width:150px;
}
#exemple1 #calque1{
background:green;
height:150px;
width:25px;
-z-index:1;
}
#exemple1 #calque1-1{
height:125px;
width:50px;
background:#3F0;
z-index:1;
left:30px;
top:10px;
}
#exemple1 #calque1-2{
height:100px;
width:75px;
background:#6FF;
z-index:4;
left:40px;
top:20px;
}
#exemple1 #calque2{
background:red;
height:75px;
width:100px;
-z-index:2;
left:10px;
top:10px;
}
#exemple1 #calque2-1{
background:#F60;
z-index:2;
height:50px;
width:125px;
left:20px;
top:30px;
}
#exemple1 #calque2-2{
background:#F90;
z-index:3;
height:25px;
width:100px;
left:10px;
top:40px;
}<div class="cadre-exemple" id="exemple1">
<div id="calque1" class="defaut">
<div id="calque1-1" class="defaut"></div>
<div id="calque1-2" class="defaut"></div>
</div>
<div id="calque2" class="defaut">
<div id="calque2-1" class="defaut"></div>
<div id="calque2-2" class="defaut"></div>
</div>
</div>