La position absolue et la position fixe permettent de placer une boîte par rapport aux limites de la zone d'affichage ou du conteneur. Comment les utiliser dans une mise en page CSS ?
Cet article fait suite à l'initiation au positionnement CSS: 2.position float.
Une boîte en positionnement absolu peut être placée n'importe-où dans le code HTML et s'afficher à l'endroit de votre choix. Ceci s'avère très utile en particulier pour :
Le positionnement absolu « retire » totalement du flux le contenu concerné : sa position est déterminée par référence aux limites du conteneur. Celui-ci peut-être :
Définissons un conteneur verte en position relative :
.verte {
position: relative;
background-color: #00ff00;
width: 15em;
}
Et un positionnement absolu jaune :
.jaune {
position: absolute;
top: 1em;
right: 1em;
background-color: #ffff00;
}
Et appliquons ces styles :
<div class="verte">
<p>
…
</p>
<p class="jaune">
Boîte jaune en position absolue
</p>
</div>
Le résultat, illustré par la figure ci-dessous, peut être observé également dans l'exemple 1
Inévitablement, la boîte en position absolue recouvre le contenu de notre paragraphe. Pour l'éviter, dotons la boîte conteneur verte d'un remplissage supérieur suffisant :
.verte {
padding-top: 5em;
}
Le résultat, illustré par la figure ci-dessous, peut être observé également dans l'exemple 2
Nous pourrions aussi bien fixer la largeur de la boîte jaune et doter le texte de la boîte verte d'un remplissage à droite :
.verte {
padding-right: 7em;
}
.jaune {
width: 4em;
}
Le résultat, illustré par la figure ci-dessous, peut être observé également dans l'exemple 3
La position absolue offre donc une alternative aux flottants pour réaliser des mises en pages à plusieurs colonnes. Le cas typique est celui des trois colonnes dont voici le code :
En CSS :
centre {
margin: 1em 25%;
}
.gauche {
position: absolute;
top: 1em;
left: 1%;
width: 18%;
}
.droite {
position: absolute;
top: 1em;
right: 1%;
width: 18%;
}
En HTML :
<body>
<div class="centre">
…
</div>
<div class="gauche">
…
</div>
<div class="droite">
…
</div>
</body>
Le résultat, illustré par la figure ci-dessous, peut être observé également dans la page-exemple 1 :
Comme dans un positionnement absolu, le contenu concerné est retiré totalement du flux. Mais il est cette fois positionné uniquement par rapport aux limites de la zone de visualisation, autrement dit la fenêtre du navigateur. Le défilement de la page n'a aucun effet sur un contenu en position fixe.
Le positionnement fixe n'étant pas reconnu par Internet Explorer 5 et 6 Windows, un positionnement absolu doit s'y substituer dans ce navigateur. Ce résultat peut être atteint grâce à diverses formulations des styles jouant sur des syntaxes CSS2 ignorées par MSIE. Par exemple :
.fixe {
position: absolute;
top: 10px;
left: 10px;
}
html>body .fixe {
position: fixed;
}
MSIE Windows ne lira que la première définition de .fixe et ignorera la seconde car il ne comprend pas la syntaxe html>body. Les navigateurs supportant la position fixe liront les deux positionnements, mais le second se substituera au premier car il est placé après celui-ci dans la feuille de style.
Notons que ie-fixed.htc, un hack CSS dû à Gellért Gyuris, permet cependant de corriger l'absence de support de la position fixe dans MSIE Windows, grâce au DOM.
Tout comme le positionnement absolu, le positionnement fixe est susceptible de provoquer des chevauchements. On employera donc des méthodes similaires pour l'exploiter.
Pour fixer un menu de navigation dans une colonne vide à gauche du contenu, on définira les largeurs du contenu et du menu :
En CSS :
.content {
width: 65%;
border: 1px solid #000000;
padding: 1em 1%;
}
.menu {
position: absolute;
top: 1em;
right: 1%;
border: 1px solid #000000;
padding: 1em;
width: 20%;
}
html>body .menu {
position: fixed;
}
En HTML :
<body>
<div class="content">
…
</div>
<div class="menu">
…
</div>
</body>
Le résultat, illustré par la figure ci-dessous, peut être observé également dans la page-exemple 2
Lorsqu'il s'agit de créer une mise en page avec contenu et menus, la position fixe a l'inconvénient apparent de sacrifier une partie de la largeur d'affichage disponible, pour éviter les chevauchements.
En fait, cet inconvénient disparaît sitôt qu'on tire profit du chevauchement au lieu de chercher à l'éviter, à la manière d'Emmanuel Clément (notre designer d'OpenWeb). Imaginons une barre de menu horizontale, fixée en permanence en haut de la fenêtre d'affichage :
En CSS :
.menufixe {
top: 0;
left: 0;
width: 100%;
border: 1px solid #000000;
position: absolute;
z-index: 2;
text-align: center;
background-color: #ffffff;
line-height: 2em;
}
html>body .menufixe {
position: fixed
}
.content {
z-index: 1;
padding-top: 3em;
}
En HTML :
<body>
<div class="content">
…
</div>
<p class="menufixe">
…
</p>
</body>
Le résultat, illustré par la figure ci-dessous, peut être observé également dans la page-exemple 3 :
Imaginons à présent deux menus différents, tous deux placés dans la même colonne :
La propriété CSS
z-index permet de spécifier le niveau d'empilement de chaque menu : avec un z-index supérieur à celui du menu fixe et un arrière-plan opaque, le menu en position absolue masquera temporairement celui-ci lors du défilement de la page. Le code nécessaire est :
En CSS :
.content {
width: 65%;
border: 1px solid #000000;
padding: 1em 1%;
}
.menufixe {
position: absolute;
top: 1em;
right: 2%;
border: 1px solid #000000;
padding: 1em;
width: 18%;
z-index: 2;
}
html>body .menufixe {
position: fixed;
}
.menuabsolu {
position: absolute;
top: 15em;
right: 1%;
border: 1px solid #000000;
padding: 1em;
width: 20%;
background-color: #ffffff;
z-index: 3;
}
En HTML :
<body>
<div class="content">
…
</div>
<div class="menu">
…
</div>
</body>
Le point délicat est, bien-sûr, le choix de la valeur donnée à la propriété top du menu en position absolu, afin d'être sûr qu'il n'empiète pas sur l'espace du menu en position fixe.
Le résultat, illustré par la figure ci-dessous, peut être observé également dans la page-exemple 4 :
Le positionnement CSS donne donc toute liberté dans la mise en page. Comparée à l'utilisation des tableaux, cette technique offre des avantages essentiels :
Une question, une remarque ? Écrivez à l'auteur à laurent.denis@openweb.eu.org.
Page valide XHTML 1 Strict,
CSS2 et
accessible AA.
Ce site s'affiche mieux dans un navigateur conforme aux standards,
voici pourquoi.
Site hébergé par l'
APINC
et actualités dopées par Dotclear.