Les éléments positionnés - FAQ CSS

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 , c'est-à-dire spécifier le contexte de positionnement qui définit les points d'origines des nouvelles positions de l'élément.

Code CSS :
position:absolute;
/*ou*/
position:fixed;
/*ou*/
position:relative;

schémat des points de positionnementDans 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.

Code CSS :
bottom : 10em; right : 10em;
/*ou*/
top : 10px; left : 10px;
  • Le point de positionnement gauche est spécifié avec la propriété CSS .
  • Le point de positionnement droit est spécifié avec la propriété CSS .
  • Le point de positionnement bas est spécifié avec la propriété CSS .
  • Le point de positionnement haut est spécifié avec la propriété CSS .

Les points de positionnementPetit 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é CSS:

  • absolute : par défaut, l'élément servant contexte de positionnement est la zone de contenu visible de la fenêtre du navigateur (). La position est donc variable pour et 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 pour et si par exemple vous réduisez la taille de la fenêtre ou au chargement suivant la taille de la fenêtre.
    Contrairement absolute 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é Css , alors fixed se comporte comme absolute.
  • 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.
Exemple de sortie de flux normal

Le point de départ du positionnement absolute ou fixed

Où se situe le point d'origine?

schéma des parents en position staticUn é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é , ou . Les bordures de ce parent faisant office contexte de positionnement, serviront de point de départ du positionnement de , , ou .
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 .

Exemple de code CSS et HTML :
<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 est spécifiée* (* autre que auto) et que la propriété CSS et sont déclarées* (* autre que auto), c'est top qui est appliquée.
Autres cas :

  • top a une valeur de auto et bottom a une valeur précisée* et que est spécifiée*, alors c'est bottom qui est appliquée.
  • top et bottom ont une valeur précisée* et que a une valeur de auto, les deux sont appliqués.
  • si la propriété Css writing-mode a une valeur héritée de vertical-rl, alors les règles s'inversent.

Règles d'interprétations left et right

Si la propriété Css est spécifiée* (* autre que auto) et que la propriété CSS et sont déclarées* (* autre que auto), c'est left qui est appliquée.
Autres Cas :

  • left a une valeur de auto et right a une valeur précisée* et que est spécifiée*, alors c'est left qui est appliquée.
  • right et left ont une valeur spécifiée et que a une valeur de auto, les deux sont appliqués.
  • si la propriété Css a une valeur héritée de rtl, alors les règles s'inversent. 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 autre que static ou ayant une propriété , vous pouvez spécifier l'ordre d'empilement les un par rapport aux autres.
Pour cela, vous devez utilise la propriété CSS .

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 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, non spécifié.
Code HTML pour l'exemple :
<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 > 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é 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.
Code HTML pour l'exemple :
<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.
Le calque2-1 et calque2-2 quelle que soit la valeur de 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.

Exemples d'éléments positionnés

Codes css

Le code 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;
}

Le code HTML ou XHTML :
<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>