Je voudrais demander comment fonctionnent la hauteur et le flotteur. J'ai un div extérieur et un div intérieur qui contient du contenu. Sa hauteur peut varier en fonction du contenu du div intérieur mais il semble que mon div intérieur déborde de son div extérieur. Quelle serait la bonne façon de procéder?
<html>
<body>
<div style="margin:0 auto;width: 960px; min-height: 100px; background-color:orange">
<div style="width:500px; height:200px; background-color:black; float:right"></div>
</div>
</body>
</html>
Réponses:
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:
Vous pouvez également ajouter
overflow: hidden;
des éléments de conteneur, mais je vous suggère de les utiliser à laclear: both;
place.Aussi, si vous souhaitez effacer automatiquement un élément que vous pouvez utiliser
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 faitfloat
- on exactement ? Initialement, lafloat
propriété a été introduite pour faire circuler le texte autour des images, flottantesleft
ouright
. 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 lafloat
propriété afin de placer des boîtes côte à côte.Flotter un élément
Démoinline
oublock
level fera que l'élément se comportera comme uninline-block
élément.Si vous faites flotter un élément
left
ouright
, l'width
élément de l'élément sera limité au contenu qu'il contient, sauf s'ilwidth
est défini explicitement ...Vous ne pouvez pas
float
un élémentcenter
. C'est le plus gros problème que j'ai toujours vu avec les débutants, en utilisant, ce qui n'est pas une valeur valide pour lafloat: center;
float
propriété.float
est généralement utilisé pourfloat
/ déplacer le contenu à l'extrême gauche ou à l'extrême droite . Il n'y a que quatre valeurs valides pour lafloat
propriété, c'estleft
-à- direright
,none
(par défaut) etinherit
.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;
oufloat: 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 celaz-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 à laleft
, ou vous pouvezfloat
àleft
, et une autre àright
ainsi, dépend de la mise en page, si c'est 3 colonnes, vous pouvezfloat
2 colonnes àleft
un autre l'unright
dépend de la façon dont, dans cet exemple, nous avons une disposition simplifiée à 2 colonnes, de même que l'float
unleft
et l'autre pour leright
.Balisage et styles de création de la mise en page expliqués plus loin ...
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émentheight
de50px
rien de spécial là-bas. C'est juste un élément de niveau de bloc non flottant normal qui prendra de100%
l'espace horizontal à moins qu'il ne flotte ou que nous ne lui attribuionsinline-block
.La première valeur valide pour
float
estleft
ainsi dans notre exemple, nous utilisonsfloat: left;
pour.floated_left
, nous avons donc l'intention de faire flotter un bloc vers leleft
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 flottanteleft
.Venir à la deuxième colonne, laisse celui
float
-ci à laright
Une autre colonne flottait à droite
Ici, nous avons une
300px
large colonne que nous avonsfloat
à laright
, qui va s'asseoir à côté de la première colonne pendant qu'elle flotte vers laleft
, et comme elle flotte vers laleft
, elle a créé une gouttière vide vers laright
, et puisqu'il y avait beaucoup d'espace sur laright
, notreright
L'élément flottant était parfaitement assis à côté deleft
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.
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, commeDé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
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 utilisebox-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'utilisezoverflow: hidden;
pour l'élément parent, appelez leclass
ci - dessous sur l'élément parent pour qu'il s'auto-efface.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éclarerfloat: 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é.img
flotté à l'intérieurp
qui permettra à notre contenu de circuler.Démo (sans flottement
img
)Démo 2 (
img
flottant vers leleft
)float
pour créer un menu horizontal - DémoFlottez é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 à laleft
mais vous ne faites pasfloat
l'autre, alors que se passe-t-il?Supposons que si nous supprimons
float: right;
de notre.floated_right
class
, lediv
sera rendu de l'extrêmeleft
car il ne flotte pas.Démo
Donc dans ce cas, vous pouvez soit
float
l'auleft
etOU
Vous pouvez utiliser
margin-left
ce qui sera égal à la taille de la colonne flottante gauche, c'est-à-dire200px
large .la source
clear: both;
, mais c'est bien si vous sentez que le montage le justifie, alors continuez ainsiVous devez ajouter
overflow:auto
à votre div parent pour qu'il englobe le div flottant intérieur:Exemple jsFiddle
la source
Vous rencontrez le bug flottant (bien que je ne sois pas sûr s'il s'agit d'un bug technique en raison du nombre de navigateurs présentant ce comportement). Voici ce qui se passe:
Dans des circonstances normales, en supposant qu'aucune hauteur explicite n'a été définie, un élément de niveau bloc tel qu'un div définira sa hauteur en fonction de son contenu. Le bas de la div parent s'étendra au-delà du dernier élément. Malheureusement, flotter un élément empêche le parent de prendre en compte l'élément flottant lors de la détermination de sa hauteur. Cela signifie que si votre dernier élément est flottant, il ne "détendra" pas le parent de la même manière qu'un élément normal.
Clairière
Il existe deux façons courantes de résoudre ce problème. La première consiste à ajouter un élément "clearing"; c'est-à-dire un autre élément en dessous de l'élément flottant qui forcera le parent à s'étirer. Ajoutez donc le code HTML suivant comme dernier enfant:
Il ne doit pas être visible et en utilisant clear: les deux, vous vous assurez qu'il ne se trouvera pas à côté de l'élément flottant, mais après.
Débordement:
La deuxième méthode, qui est préférée par la plupart des gens (je pense) est de changer le CSS de l'élément parent afin que le débordement soit tout sauf "visible". Le fait de régler le débordement sur "caché" forcera le parent à s'étendre au-delà du bas de l'enfant flottant. Cela n'est vrai que si vous n'avez pas défini de hauteur sur le parent, bien sûr.
Comme je l'ai dit, la deuxième méthode est préférée car elle ne vous oblige pas à ajouter des éléments sémantiquement dénués de sens à votre balisage, mais il y a des moments où vous avez besoin que le
overflow
soit visible, auquel cas l'ajout d'un élément de suppression est plus qu'acceptable .la source
C'est à cause du flotteur du div. Ajoutez
overflow: hidden
l'élément extérieur.Démo
la source
Vous confondez la façon dont les navigateurs rendent les éléments lorsqu'il y a des éléments flottants. Si un élément de bloc est flottant (votre div intérieur dans votre cas), les autres éléments de bloc l'ignoreront car le navigateur supprime les éléments flottants du flux normal de la page Web. Ensuite, parce que le div flotté a été retiré du flux normal, le div extérieur est rempli, comme le div intérieur n'est pas là. Cependant, les éléments en ligne (images, liens, texte, guillemets noirs) respecteront les limites de l'élément flottant. Si vous introduisez du texte dans la division externe, le texte sera placé autour de la division interne.
En d'autres termes, les éléments de bloc (en-têtes, paragraphes, divs, etc.) ignorent les éléments flottants et remplissent, et les éléments en ligne (images, liens, texte, etc.) respectent les limites des éléments flottants.
Un exemple de violon ici
la source
Essaye celui-là
la source
vous pouvez utiliser la propriété overflow sur le div du conteneur si vous n'avez aucun div à afficher sur le conteneur, par exemple:
Voici le css suivant:
-----------------------OU-------------------------- ----
Voici le css suivant:
la source