Liste des Tutoriaux



Initiation au positionnement CSS : 2.position float

En bref

La position float retire une boîte du flux normal pour la placer le plus à droite ou le plus gauche possible dans son conteneur. Comment l'utiliser dans une mise en page CSS ?

Cet article fait suite à l'initiation au positionnement CSS : 1.Flux et position relative.

Une boîte flottante est retirée du flux normal, et placée le plus à droite (float: right) ou le plus à gauche (float: left) possible dans son conteneur. Le contenu suivant cette boîte flottante s'écoule le long de celle-ci, dans l'espace laissé libre.

Le fonctionnement des flottants

Ajoutons aux styles précédents une règle de positionnement flottant à droite et une mesure de largeur (facultative, mais utile pour certains navigateurs) :

En HTML:

<p class="jaune">Une boîte jaune flottant</p>
<p class="verte">Une boîte verte doté d'un contenu plus long…</p>

En CSS:

.jaune {
  background-color: #ffff00;
  float: right;
  width: 100px;
  margin: 0;
}
.verte {
  background-color: #00ff00;
}
    

Le résultat, illustré par la figure ci-dessous, peut être observé également dans l'exemple 1

Le texte de la boîte verte passe à la ligne à hauteur de la boîte jaune

Le navigateur place tout d'abord la boîte jaune, alignée sur le bord droit de cette partie de notre page, puis reprend le cours normal du flux dans l'espace laissé libre à sa gauche pour afficher la boîte verte. Le flux occupe tout l'espace disponible: la boîte verte reprend donc toute la largeur de la page sitôt passée la limite inférieure de la boîte flottante jaune.

Dans les navigateurs n'appliquant pas la feuille de style (navigateurs texte ou non conformes aux standards…), la boîte flottante sera simplement inscrite en flux normal avant la boîte qui la suit.

Première utilisation : une mise en page à deux colonnes

La combinaison de la position flottante et du flux permet de réaliser aisément une mise en page à deux colonnes (un contenu et un menu) :

En CSS :

.content {
  float: left;
  width: 70%;
}
.menu {
  margin-left: 80%;
  border: 1px solid #000000;
  padding: 1em;
}
    

Et en HTML :

…
<body>
  <div class="content">
    …
  </div>

  <div class="menu">
    <ul>
      <li>lien_1</li>
      <li>lien_2</li>
      <li>lien_3</li>

    </ul>
  </div>
</body>
    

Le résultat, illustré par la figure ci-dessous, peut être observé également dans la page-exemple 1

Un menu dans la colonne droite flanquant le contenu de la page

Seconde utilisation : une mise en page à trois colonnes et plus

Mais on peut tout aussi bien multiplier les flottants pour créer autant de colonnes que voulu :

En CSS :


body {
  margin: 0;
  padding: 0;
}
.float {
  float: left;
  width: 25%;
  margin: 1em 0;
}
p,h1,h2 {
  margin: 1em;
}
    

Et en HTML :

…
<body>
  …
  <div class="float">
    …
  </div>

  <div class="float">
    …
  </div>
  <div class="float">
    …
  </div>
  <div class="float">

    …
  </div>
</body>
    

Le résultat, illustré par la figure ci-dessous, peut être observé également dans la page-exemple 2 :

Sous le titre, 4 colonnes d'égale largeur.

Débordement et spacer

Le probleme du débordement

Reprenons notre exemple, mais inversons les contenus: celui de la boîte flottante jaune est à présent plus long que celui de la boîte verte :

En HTML :

<p class="jaune">
  Une boîte jaune flottant doté d'un contenu plus long…
</p>
<p class="verte">
  Une boîte verte
</p>
      

Le résultat, illustré par la figure ci-dessous, peut être observé également dans l'exemple 2 :

La boîte jaune déborde vers le bas au-delà de la boîte verte

La boîte flottante, plus longue que la boîte verte, déborde verticalement plus bas que celle-ci.

La solution : le spacer

Pour éviter cet effet parfois disgracieux, la solution la plus répandue est le spacer de Mark Newhouse : elle consiste à inclure dans la boîte verte un élément bloc au contenu fictif (l'espace insécable &nbsp;), doté de la propriété clear qui lui interdit d'être adjacent à une boîte flottante.

En HTML :

<div class="verte5">
  <p class="jaune5">
    Une boîte jaune flottant doté d'un contenu plus long…
  </p>
  <p>
    Une boîte verte
  </p>

  <div class="spacer">&nbsp;</div>
</div>
      

En CSS :

.jaune {
  background-color: #ffff00;
  float: right;
  width: 100px;
  text-align: center;
  margin: 0;
}
.verte {
  width: 100%;
  background-color: #00ff00;
}
.spacer {
  clear: both;
}
      

Le résultat, illustré par la figure ci-dessous, peut être observé également dans l'exemple 3

La boîte jaune ne déborde plus vers le bas au-delà de la boîte verte

Le bloc spacer, ne pouvant se placer à côté du bloc flottant, se trouve décalé plus bas que celui-ci.

Note : —

IE a parfois quelques difficultés à représenter correctement les arrières-plans et les bordures dans les combinaisons intégrant des boîtes flottantes à droite et des séparateurs dotés de la propriété clear: both.

Les vignettes : une utilisation du spacer et des flottantes

Mark Newhouse appliquait en particulier cette solution à une série de boîtes flottantes placées dans une boîte conteneur dont le contenu propre se réduit au spacer : elle ne sert qu'à créer une boîte délimitant l'espace visuel où s'affichent les boîtes flottantes.

En CSS :

.flottante {
  background-color: #00ff00;
  border: 2px dotted #ffff00;
  margin: 2px;
  float: left;
  width: 100px;
  text-align: center;
}
.conteneur {
  width: 100%;
}
.spacer {
  clear: both;
}
      

En HTML :

<div>
  <p class="flottante">boîte verte 1</p>
  <p class="flottante">boîte verte 2</p>
  <p class="flottante">boîte verte 3</p>

  …etc…
  <div class="spacer">&nbsp;</div>
</div>
      

On obtient une série de vignettes pouvant accueillir par exemple des images, les liens d'un menu de navigation, etc. ou encore permettant de réaliser une mise en page en colonnes… Elle s'adapte automatiquement à la largeur d'affichage disponible : faute de place à droite, une boîte flottante sera replacée à la ligne.

Le résultat, illustré par la figure ci-dessous, peut être observé également dans l'exemple 4

6 vignettes alignées de gauche à droite sur deux lignes

Une variante du spacer : <hr />

Le défaut du spacer est d'introduire dans le code HTML un contenu fictif à des fins de présentation…

Lorsque la boîte adjacente à la boîte flottante est suivie d'une coupure logique dans votre page (nouvelle section de texte…), il est préférable d'associer la propriété clear à un contenu réel. La ligne horizontale créée par la balise <hr /> peut jouer avantageusement ce rôle :

En HTML :

<p class="jaune">
  Une boîte jaune flottant doté d'un contenu plus long…
</p>
<p class="verte">
  Une boîte verte

</p>
<hr />
      

En CSS :

.jaune {
  background-color: #ffff00;
  float: right;
  width: 100px;
  margin: 0;
}
.verte {
  background-color: #00ff00;
}
hr {
  clear: both;
}
      

Le résultat, illustré par la figure ci-dessous, peut être observé également dans l'exemple 5

La ligne horizontale en bas de la boîte verte empêche le débordement de la boîte jaune

La ligne de séparation s'avère très utile pour les utilisateurs de navigateurs qui ne tiendront pas compte de la feuille de style (navigateurs textes, navigateurs périmés…) Il est possible de leur en réserver l'affichage, en le supprimant dans les navigateurs qui appliqueront la feuille de style, à l'aide de la propriété visibility: hidden;: celle-ci rend un élément invisible, tout en le laissant agir sur le flux.

hr {
  clear: both;
  visibility: hidden;
}
      

Le résultat (figure ci-dessous et exemple 6) est visuellement identique au spacer précédent.

La boîte jaune ne déborde plus vers le bas au-delà de la boîte verte

Et appliqué à la série de vignettes flottantes, le résultat, illustré par la figure ci-dessous, peut être observé également dans l'exemple 7 :

6 vignettes alignées de gauche à droite sur deux lignes

Nous aborderons les derniers types de positionnement CSS dans initiation au positionnement CSS : 3.position absolue et fixe.


Une question, une remarque ? Écrivez à l'auteur à laurent.denis@openweb.eu.org.





Liste des Tutoriaux

Pour vous accompagner dans l'utilisation de vos kits graphiques, Kitgrafik a sélectionné sur le web d'excellents tutoriaux qui abordent les sujets essentiels. Les tutoriaux sont classés par niveau d'expertise et restent sous le copyright de leur auteurs respectifs, que nous remercions. Pour vous perfectionner et découvrir de nouvelles techniques, nous vous recommandons chaudement cette liste RSS de tutoriaux. Nous cherchons en permanence les meilleurs sites de design et nous concentrons leurs derniers tutoriaux ici : 40 superbes tutoriaux du web (RSS) -- New --

Autres ressources

  1. 40 superbes tutoriaux du web (RSS) -- New --
  2. http://normandlamoureux.com/cours/xhtml
  3. http://www.mammouthland.net
  4. http://fr.selfhtml.org/
  5. http:/fr.html.net/tutorials/css/
  6. http://pompage.net/pompe/listes/