zion -  Le positionnement avec le CSS
Tout d'abord, je vous conseille de prendre le temps de lire : http://www.yoyodesign.org/doc/w3c/css2/visuren.html#positioning-scheme

Il y a en CSS2, 5 méthodes de positionnement :

Le positionnement selon le flux normal

Sous ce terme un peu barbare se cache en fait la méthode de positionnement la plus classique. L'ordre d'affichage des éléments suis exactement le même ordre que le document HTML. C'est à dire que :

- les éléments de type "boîte" (<div>, <p>, <h1>, <table>...) s'empilent les uns sur les autres de haut en bas ;
- les éléments de type "en-ligne" (<span>, <a>, <b>, <img>...) sont placés horizontalement, les uns après les autres le long de la ligne de texte.

C'est en fait le mode de positionnement par défaut lorsque aucune valeur n'a été donnée aux attributs "position" et "float".

> Ce mode de positionnement est à privilégier lorsqu'on compose des longs documents mono-colonne comme par exemple les spécifications du W3C données en lien ci-dessus


Le positionnement relatif

Un élément utilise le positionnement relatif lorsqu'il possède la propriété :
  1. position: relative;


Le positionnement relatif permet de déplacer un élément relativement à sa position qu'il aurait eu dans le flus normal s'il n'avait pas été déplacé. Pour déplacer l'élément il faut utiliser les propriétés "top", "bottom", "left" et "right".

Considérons ce texte hautement philosophique :

  1. <p>Coin ! Coin ! Coin ! Coin ! Coin ! Coin ! <b class="pan">PAN !</bCoin ! Coin ! Coin ! Coin ! Coin !</p>


Par défaut tous les mots sont alignés de la même manière sur la ligne de texte. Si maintenant on donne à mon élément <b> les propriétés suivantes :

  1. b.pan { 
  2. position: relative; 
  3. bottom: 5px; 
  4. }


Cela va déplacer le texte "PAN !" de 5 pixels vers le haut.

Note : on aurait très bien pu écrire "top: -5px", l'effet aurait été identique, mais certains navigateurs n'apprécient pas toujours les valeurs négatives.

> Le positionnement relatif ne s'utilise donc pas de manière générale pour tous les éléments du document mais seulement pour quelques uns d'entre eux pour lesquels on a décidé d'une position particulière.


Les flottants

Un élément est dit "flottant" lorsqu'il possède la propriété :


Un élément qui a la propriété "float: right;" sera plaqué contre le bord interne droit de son élément conteneur. Idem pour "float: left;"

En des temps reculés de l'histoire du HTML on obtenait un comportement similaire en faisant comme ceci :

  1. <p><img src="..." align="right">Bla bla bla bla bla...</p>


Ceci n'est bien sûr pas à utiliser, l'attribut "align" étant déprécié.

Les flottants permettent de faire 2 choses :

- de faire écouler du texte le long des bords du bloc flottant ;
- de placer des boîtes cote à cote. (rapellons que dans le flux normal celles-ci se placent par défaut les unes sur les autres)

Les flottants doivent être utilisés avec précaution car :

- n'importe quel élément qui reçoit la propriété float devient une boîte ;
- les flottants sortent du flux normal. Concrètement, ceci signifie que si on a quelque chose comme :

  1. <div id="principal"
  2.   <div id="menu">...</div
  3.   <div id="contenu">...</div
  4. </div
  5. div#menu { 
  6.   float: left
  7.   width: 25%; 
  8. div#contenu { 
  9.   float: right
  10.   width: 75%; 
  11. }


le <div id="principal"> sera considéré comme vide car les 2 <div> qu'il contient ne sont plus dans le flux normal. Pour contourner ce problème on peut placer un troisième dont le but est d'étirer le bloc conteneur :

  1. <div id="principal"
  2.   <div id="menu">...</div
  3.   <div id="contenu">...</div
  4.   <div class="spacer"></div
  5. </div
  6. div  acer { 
  7.   clear: both
  8. }


La propriété "clear" permet de s'assurer qu'aucun élément n'ira se mettre à gauche ou à droite du <div>.
Cela dit, dans un tel exemple il n'est pas forcément utile de mettre les 2 éléments en flottants. Si on sait d'avance celui qui sera la plus long (et qui imposera sa hauteur au bloc conteneur), on peut le laisser dans le flux normal.

> Les flottants sont donc un bon outil aussi bien pour placer des tableaux ou des illustrations le long des marges internes d'un texte que pour créer une mise en page multi-colonnes.

Attention cependant certains navigateurs ont un peu de mal avec les flottants. C'est par exemple le cas d'Internet Explorer pour Windows qui a tendance avoir des bugs de ce genre :

- http://forum.hardware.fr/forum2.php3?post=27221&cat=10
- http://www.positioniseverything.net/floatmodel.html
- http://www.digital-web.com/features/feature_2003-02.shtml


Le positionnement absolu

Un élément utilise le positionnement absolu lorsqu'il possède la propriété :
  1. position: absolute;


Le positionnement absolu permet de placer précisément, au pixel près, n'importe quel élément dans le document. Comme avec le positionnement relatif, on utilise "top", "bottom", "left" et "right" pour placer l'élément.
Le repère de coordonnées utilisé pour le positionnement est celui du bloc conteneur [b]positionné[/bJ'insiste sur le mot "positionné" car c'est une erreur fréquente. Un élément est positionné lorsqu'il possède la propriété "position" et que celle-ci vaut, "relative", "absolute" ou "fixed".

Un exemple pour mieux comprendre. Considérons le code suivant :

  1. <div id="conteneur"
  2.   <div id="contenu"></div
  3. </div
  4. et : 
  5. body { 
  6.   margin: 100px
  7. div#conteneur { 
  8.   width: 400px
  9.   height: 300px
  10. div#contenu { 
  11.   position: absolute
  12.   top: 0
  13.   left: 0
  14.   width: 200px
  15.   height: 150px
  16. }


Le bloc "conteneur" n'est pas positionné. Le bloc "contenu" ne va donc pas se positionner par rapport à lui mais par rapport à l'élément racine. Il va donc se retrouver tout en haut à gauche :
0
0+-------+------------------+
| | |
|contenu|------+ |
+-------+ | |
| | | |
| | | |
| +-----------+ |
| conteneur |
| |
+--------------------------+


Si on ajoute à "conteneur" la propriété "position: relative", il devient alors positionné et "contenu" se place par rapport à lui :
+--------------------------+
| 0 |
| 0+-------+---+ |
| | | | |
| |contenu| | |
| +-------+ | |
| +-----------+ |
| conteneur |
| |
+--------------------------+


Dès qu'un élément est placé absolument :

- il devient un élément de type boîte (bloc) ;
- il sort du flux normal.

> Le positionnement absolu est l'arme absolue (sans jeu de mots) car on peut se permettre de construire n'importe quel type de mise en page avec, de la plus simple à la plus complexe. Pour les designs simples je conseille toutefois de privilégier les autres formes de positionnement.
Ce positionnement absolu présente toutefois un risque : celui que l'ordre de lecture des informations à l'écran ne reflète pas celle du document HTML. Etant donné que l'on peut placer les éléments n'importe où, rien n'empêcherait d'écrire dans le document HTML la conclusion d'un texte avant l'introduction et de rétablir l'ordre logique avec le positionnement absolu. Il est toujours bon de se demander comment apparaîtrait une page sans aucun style ou dans un navigateur texte car en terme d'accessibilité c'est un point important.



Le positionnement fixe

Un élément utilise le positionnement fixe lorsqu'il possède la propriété :


Le positionnement fixe fonctionne comme le positionnement absolu sauf que l'élément ainsi positionné reste attaché à la zone de visualisation.

Concrètement cela empêche les éléments de se déplacer lorsqu'on fait défiler la page avec les barres de défilement.

Pour les médias paginés (feuilles de papier, transparent...) l'élément est répété sur toutes lees pages.

> Le positionnement fixe est idéal pour réaliser des menus fixes et donc se passer des frames. Un bon exemple se trouve sur le site du W3C pour les CSS : http://www.w3.org/Style/CSS/
Gros problème : Internet Explorer pour Windows ne supporte pas ce mode de positionnement, ce qui limite, hélas, considérablement son intérêt.



Quelques liens pour aller plus loin
- http://www.brainjar.com/css/positioning/
- http://www.blogblues.com/standards/css/position.asp
- http://www.positioniseverything.net/

Merci à gm_superstar pour cet article
Commentaires
Le positionnement avec le CSS
j'ai une balise div et un contenu sera placé dessus aléatoirement je souhaite que mon div puisse s'etirer suivant mon contenu , ca marche avec ie mais pas avec firefox.
Si quelqu'un peut m'aider
Par morpheus, Publié le 12/05/2005 @ 17:41:39
Le positionnement avec le CSS
Je te conseille de poser la question dans le forum, tu auras plus de chance de réponse qu'ici, les commentaires sont là pour ajouter des informations, pas y poser des questions :wink:

Suite dans le forum:
http://www.informaticien.be/index.php?page=forum_topic&id=1264
Par zion, Publié le 12/05/2005 @ 20:49:43
Poster un commentaire
Utilisateur
Mot de passe
 
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?