Màj: 2006
On peut
obliger les éléments flottants à rentrer dans le "flux" de leur élément parent.
On utilisera pour cela un "spacer", c'est à dire un élément HTML (n'importe
lequel) muni de la propriété CSS clear: both;.
<div id="element_parent"> <p>Ce paragraphe est flottant à gauche</p> <img src="..." alt="Une image flottant à droite" /> <div style="clear:both;"></div> </div>
Ceci est un paragraphe flottant à gauche. L'image qui suit (en dehors de ce paragraphe) sera en positionnement flottant à droite.
div dotté de la propriété CSS clear:
both; qui permet de "faire rentrer" les éléments flottants qui le
précèdent dans le flux de l'élément parent.float: right;
passe à la ligne).overflow: auto;Laurent Denis proposait sur les forums d'Alsacréations la solution suivante :
« Pour obtenir le résultat attendu dans les
navigateurs conformes, il faut préciser que ce conteneur doit s'étendre en
hauteur en tenant compte des 3 flottants. Pour cela, ajouter la propriété
overflow:auto; [au bloc conteneur]. » Ce qui donnerait alors :
<div id="element_parent"> Ce bloc parent est doté de la propriété CSS <code>overflow: auto;</code><br /><br /> <p>Ce paragraphe est flottant à gauche</p> <img src="..." alt="Une image flottant à droite" /> </div>et
div#element_parent {overflow:
auto;}
overflow: auto;Ceci est un paragraphe flottant à gauche. L'image qui suit (en dehors de ce paragraphe) sera en positionnement flottant à droite.
Il s'agit de
déclarer le bloc conteneur lui-même comme bloc flottant (à droit ou à gauche,
peu importe), à l'aide de la propriété CSS float.
Cette solution a l'avantage de ne pas rajouter de contenu HTML dédié à la mise en forme (comme c'est le cas avec un spacer, par exemple). Par contre, elle peut être lourde de sens pour la mise en forme générale du document. À utiliser avec parcimonie !
float: left;Ceci est un paragraphe flottant à gauche. L'image qui suit (en dehors de ce paragraphe) sera en positionnement flottant à droite.
float: left;display: table;[Note : solution proposée par Alan sur les forums d'Alsacréations]
Nous allons demander au navigateur de considérer notre
bloc conteneur comme un tableau, car les tableaux s'étendend systématiquement
pour englober leur contenu, qu'il soit flottant ou non. Nous utilisons pour cela
la propriété CSS display: table.
Par contre, les tableaux ne
fonctionnent pas selon le modèle de boîte standard que nous avons pu voir tout
au début de cette page (cf. l'illustration avec les mesures en pixels). C'est à
dire que si nous fixons une largeur de 500px et des retraits
internes (padding) de 20px, nous obtiendrons un
tableau de 500 pixels avec une largeur utile de 460 pixels. Pour corriger cela,
nous allons demander à notre tableau d'occuper 540 pixels de large. On aura donc
bien une largeur utile de 500 pixels.
display: table;
et a une largeur déclarée de 540pxCeci est un paragraphe flottant à gauche. L'image qui suit (en dehors de ce paragraphe) sera en positionnement flottant à droite.
Témoin pour comparaison :
Ceci est un tableau témoin (avec une cellule unique) :width: 540px; padding: 20px;
|
padding ne sont
pas retranchés mais additionnés à la largeur et le bloc fera ainsi 580
pixels de large en tout).padding ne sont pas
retranchés mais additionnés à la largeur. Le bloc parent fera 580 pixels en
tout, tandis que le tableau témoin fait bien 540 pixels.