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.