Les éléments flottants n'ajoutent pas à la hauteur de l'élément conteneur, et donc si vous ne les effacez pas, la hauteur du conteneur n'augmentera pas ...
Je vais vous montrer visuellement:
Plus d'explication:
<div>
<div style="float: left;"></div>
<div style="width: 15px;"></div> <!-- This will shift
besides the top div. Why? Because of the top div
is floated left, making the
rest of the space blank -->
<div style="clear: both;"></div>
<!-- Now in order to prevent the next div from floating beside the top ones,
we use `clear: both;`. This is like a wall, so now none of the div's
will be floated after this point. The container height will now also include the
height of these floated divs -->
<div></div>
</div>
Vous pouvez également ajouter overflow: hidden;
des éléments de conteneur, mais je vous suggère de les utiliser à la clear: both;
place.
Aussi, si vous souhaitez effacer automatiquement un élément que vous pouvez utiliser
.self_clear:after {
content: "";
clear: both;
display: table;
}
Comment fonctionne CSS Float?
Qu'est-ce que le flotteur exactement et que fait-il?
La float
propriété est mal comprise par la plupart des débutants. Eh bien, que fait float
- on exactement ? Initialement, la float
propriété a été introduite pour faire circuler le texte autour des images, flottantes left
ou right
. Voici une autre explication de @Madara Uchicha.
Alors, est-ce mal d'utiliser la float
propriété pour placer des boîtes côte à côte? La réponse est non ; il n'y a aucun problème si vous utilisez la float
propriété afin de placer des boîtes côte à côte.
Flotter un élément inline
ou block
level fera que l'élément se comportera comme un inline-block
élément.
Démo
Si vous faites flotter un élément left
ou right
, l' width
élément de l'élément sera limité au contenu qu'il contient, sauf s'il width
est défini explicitement ...
Vous ne pouvez pas float
un élément center
. C'est le plus gros problème que j'ai toujours vu avec les débutants, en utilisant float: center;
, ce qui n'est pas une valeur valide pour la float
propriété. float
est généralement utilisé pour float
/ déplacer le contenu à l'extrême gauche ou à l'extrême droite . Il n'y a que quatre valeurs valides pour la float
propriété, c'est left
-à- dire right
, none
(par défaut) et inherit
.
L'élément parent s'effondre, lorsqu'il contient des éléments enfants flottants, afin d'éviter cela, nous utilisons la clear: both;
propriété, pour effacer les éléments flottants des deux côtés, ce qui empêchera l'effondrement de l'élément parent. Pour plus d'informations, vous pouvez consulter ma autre réponse ici .
(Important) Pensez-y où nous avons une pile de divers éléments. Lorsque nous utilisons l'élément float: left;
ou float: right;
se déplace au-dessus de la pile par un. Par conséquent, les éléments du flux de documents normal se cacheront derrière les éléments flottants car il se trouve au niveau de la pile au-dessus des éléments flottants normaux. (S'il vous plaît ne faites pas le lien avec cela z-index
car c'est complètement différent.)
Prenons un cas comme exemple pour expliquer comment les flotteurs CSS fonctionnent, en supposant que nous avons besoin d'une disposition simple à 2 colonnes avec un en-tête, un pied de page et 2 colonnes, voici donc à quoi ressemble le plan ...
Dans l'exemple ci-dessus, nous ne flotterons que les cases rouges, soit vous pouvez les float
deux à la left
, ou vous pouvez float
à left
, et une autre à right
ainsi, dépend de la mise en page, si c'est 3 colonnes, vous pouvez float
2 colonnes à left
un autre l'un right
dépend de la façon dont, dans cet exemple, nous avons une disposition simplifiée à 2 colonnes, de même que l' float
un left
et l'autre pour le right
.
Balisage et styles de création de la mise en page expliqués plus loin ...
<div class="main_wrap">
<header>Header</header>
<div class="wrapper clear">
<div class="floated_left">
This<br />
is<br />
just<br />
a<br />
left<br />
floated<br />
column<br />
</div>
<div class="floated_right">
This<br />
is<br />
just<br />
a<br />
right<br />
floated<br />
column<br />
</div>
</div>
<footer>Footer</footer>
</div>
* {
-moz-box-sizing: border-box; /* Just for demo purpose */
-webkkit-box-sizing: border-box; /* Just for demo purpose */
box-sizing: border-box; /* Just for demo purpose */
margin: 0;
padding: 0;
}
.main_wrap {
margin: 20px;
border: 3px solid black;
width: 520px;
}
header, footer {
height: 50px;
border: 3px solid silver;
text-align: center;
line-height: 50px;
}
.wrapper {
border: 3px solid green;
}
.floated_left {
float: left;
width: 200px;
border: 3px solid red;
}
.floated_right {
float: right;
width: 300px;
border: 3px solid red;
}
.clear:after {
clear: both;
content: "";
display: table;
}
Allons étape par étape avec la mise en page et voyons comment fonctionne le flotteur.
Tout d'abord, nous utilisons l'élément wrapper principal, vous pouvez simplement supposer qu'il s'agit de votre fenêtre d'affichage, puis nous utilisons header
et affectons un élément height
de 50px
rien de spécial là-bas. C'est juste un élément de niveau de bloc non flottant normal qui prendra de 100%
l'espace horizontal à moins qu'il ne flotte ou que nous ne lui attribuions inline-block
.
La première valeur valide pour float
est left
ainsi dans notre exemple, nous utilisons float: left;
pour .floated_left
, nous avons donc l'intention de faire flotter un bloc vers le left
de notre élément conteneur.
La colonne flottait à gauche
Et oui, si vous voyez, l'élément parent, qui est .wrapper
effondré, celui que vous voyez avec une bordure verte ne s'est pas développé, mais il devrait bien? J'y reviendrai dans un moment, pour l'instant, nous avons une colonne flottante left
.
Venir à la deuxième colonne, laisse celui float
-ci à laright
Une autre colonne flottait à droite
Ici, nous avons une 300px
large colonne que nous avons float
à la right
, qui va s'asseoir à côté de la première colonne pendant qu'elle flotte vers la left
, et comme elle flotte vers la left
, elle a créé une gouttière vide vers la right
, et puisqu'il y avait beaucoup d'espace sur la right
, notre right
L'élément flottant était parfaitement assis à côté de left
celui.
Pourtant, l'élément parent est réduit, eh bien, corrigeons cela maintenant. Il existe de nombreuses façons d'empêcher l'élément parent de s'effondrer.
- Ajoutez un élément de niveau bloc vide et utilisez-le
clear: both;
avant la fin de l'élément parent, qui contient des éléments flottants, maintenant celui-ci est une solution bon marché à clear
vos éléments flottants qui fera le travail pour vous mais, je recommanderais de ne pas l'utiliser.
Ajoutez, <div style="clear: both;"></div>
avant les .wrapper
div
fins, comme
<div class="wrapper clear">
<!-- Floated columns -->
<div style="clear: both;"></div>
</div>
Démo
Eh bien, cela corrige très bien, plus aucun parent réduit, mais cela ajoute un balisage inutile au DOM, donc certains suggèrent, à utiliser overflow: hidden;
sur l'élément parent contenant des éléments enfants flottants qui fonctionnent comme prévu.
Utiliser overflow: hidden;
sur.wrapper
.wrapper {
border: 3px solid green;
overflow: hidden;
}
Démo
Cela nous sauve un élément à chaque fois que nous en avons besoin, clear
float
mais comme j'ai testé divers cas avec cela, il a échoué dans un cas particulier, qui utilise box-shadow
les éléments enfants.
Démo (ne peut pas voir l'ombre sur les 4 côtés,overflow: hidden;
provoque ce problème)
Et maintenant? Enregistrez un élément, overflow: hidden;
alors optez pour un hack de correction clair, utilisez l'extrait ci-dessous dans votre CSS, et tout comme vous l'utilisez overflow: hidden;
pour l'élément parent, appelez le class
ci - dessous sur l'élément parent pour qu'il s'auto-efface.
.clear:after {
clear: both;
content: "";
display: table;
}
<div class="wrapper clear">
<!-- Floated Elements -->
</div>
Démo
Ici, l'ombre fonctionne comme prévu, elle efface également automatiquement l'élément parent, ce qui empêche l'effondrement.
Et enfin, nous utilisons le pied de page après clear
les éléments flottants.
Démo
Quand est-il float: none;
utilisé de toute façon, comme c'est la valeur par défaut, donc toute utilisation pour déclarer float: none;
?
Eh bien, cela dépend, si vous optez pour une conception réactive, vous utiliserez cette valeur beaucoup de fois, lorsque vous souhaitez que vos éléments flottants se rendent les uns en dessous des autres à une certaine résolution. Car cette float: none;
propriété y joue un rôle important.
Peu d'exemples concrets de l' float
utilité.
- Le premier exemple que nous avons déjà vu est de créer une ou plusieurs dispositions de colonne.
- Utiliser
img
flotté à l'intérieur p
qui permettra à notre contenu de circuler.
Démo (sans flottementimg
)
Démo 2 (img
flottant vers leleft
)
- Utilisation
float
pour créer un menu horizontal - Démo
Flottez également le deuxième élément ou utilisez `margin`
Dernier point mais non le moindre, je veux expliquer ce cas particulier où vous n'avez float
qu'un seul élément à la left
mais vous ne faites pas float
l'autre, alors que se passe-t-il?
Supposons que si nous supprimons float: right;
de notre .floated_right
class
, le div
sera rendu de l'extrême left
car il ne flotte pas.
Démo
Donc dans ce cas, vous pouvez soit float
l'au left
et
OU
Vous pouvez utiliser margin-left
ce qui sera égal à la taille de la colonne flottante gauche, c'est-à-dire 200px
large .