Pourquoi ne pas la hauteur d'un élément de conteneur augmenter si elle contient flottait éléments?
Je voudrais demander comment la hauteur du flotteur de travail. J'ai un div extérieure et intérieure de la div qui est contenu en elle. Sa hauteur peut varier en fonction du contenu de l'intérieur de la div, mais il me semble que mes intérieure div débordement son à l'extérieur de div. Quelle serait la bonne façon de le faire?
HTML:
<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>
- double possible de CSS: min-height ne fonctionne pas ou CSS: Div hauteur de problème sur l'ensemble de flotteurs
- agréable et très bon merci!
- double possible de flottant trucs à l'intérieur d'un div, de flotteurs en dehors de la div. Pourquoi?
Vous devez vous connecter pour publier un commentaire.
La flottait éléments ne sont pas à la hauteur de l'élément de conteneur, et donc si vous n'avez pas les effacer, la hauteur du conteneur ne sera pas augmenter...
Je vais vous montrer visuellement:
Plus D'Explication:
Vous pouvez également ajouter
overflow: hidden;
sur des éléments conteneurs, mais je vous suggère d'utiliserclear: both;
à la place.Aussi, si vous aimez l'auto-effacer un élément, vous pouvez utiliser
Comment CSS Float Travail?
Qu'est-ce que le flotteur exactement et pour quoi faire?
La
float
propriété est mal compris par la plupart des débutants. Eh bien, exactement ce que faitfloat
faire? Initialement, lefloat
propriété a été introduit aux flux de texte autour des images, qui sont flottaientleft
ouright
. Voici une autre explication par @Madara Uchicha.Donc, est-ce mal d'utiliser la
float
propriété pour placer des boîtes côte à côte? La réponse est pas; il n'y a pas de problème si vous utilisez lefloat
de la propriété afin de mettre les boîtes aux côtés.Flottant une
inline
oublock
niveau de l'élément fera l'élément se comporte comme uneinline-block
élément.Démo
Si vous flotter un élément
left
ouright
, lewidth
de l'élément sera limitée au contenu, il est titulaire, saufwidth
est définie de manière explicite ...Vous ne pouvez pas
float
un élémentcenter
. C'est le plus gros problème, je l'ai toujours vu avec les débutants, à l'aide de, ce qui n'est pas une valeur valide pour lefloat: center;
float
de la propriété.float
est généralement utilisé pourfloat
/déplacer le contenu vers le très gauche ou à la très droit. Il y a seulement quatre valeurs valides pourfloat
bien je.eleft
,right
,none
(par défaut) etinherit
.Élément Parent s'effondre, quand il contient flottaient des éléments d'enfant, dans le but d'éviter cela, nous utilisons
clear: both;
propriété, pour effacer le flottaient des éléments sur les deux côtés, ce qui permettra d'éviter l'effondrement de l'élément parent. Pour plus d'informations, vous pouvez consulter mon autre réponse ici.(Important) Pense d'elle, où nous avons une pile de divers éléments. Lorsque nous utilisons
float: left;
oufloat: right;
l'élément se déplace au-dessus de la pile par un. D'où les éléments dans le document normal flux se cacher derrière le flottait éléments parce que c'est sur le niveau de la pile au-dessus de la normale flottait éléments. (Merci de ne pas faire le rapprochement avecz-index
que c'est complètement différent.)En prenant un cas comme exemple pour expliquer comment CSS flotte de travail, en supposant que nous avons besoin d'un simple 2 mise en page en colonnes avec une en-tête, pied de page, et 2 colonnes, voici donc ce que le modèle ressemble à...
Dans l'exemple ci-dessus, nous serons flottant uniquement les cases rouges, soit vous pouvez
float
à la fois à laleft
, ou vous pouvezfloat
surleft
, et un autre àright
ainsi, dépend de la mise en page, si c'est 3 colonnes, vous pouvezfloat
2 colonnes àleft
où une autre à l'right
donc dépend, bien que dans cet exemple, nous avons simplifié 2 colonne mise en page sera doncfloat
un àleft
et l'autre à laright
.Balisage et les styles pour créer la mise en page est expliqué plus bas...
Allons-y étape par étape avec la mise en page et de voir comment flotteur fonctionne..
Tout d'abord, nous utilisons le principal élément wrapper, vous ne pouvez que supposer que c'est votre fenêtre d'affichage, puis nous utilisons
header
et affecter unheight
de50px
donc rien de compliqué, là. C'est juste un normal non flottait au niveau du bloc de l'élément qui va prendre100%
horizontale de l'espace, sauf si c'est en bateau ou nous attribuerinline-block
à elle.La première valeur valide pour
float
estleft
ainsi, dans notre exemple, nous utilisonsfloat: left;
pour.floated_left
, de sorte que nous avons l'intention de flotter un bloc à laleft
de notre élément conteneur.Colonne flottait à la gauche
Et oui, si vous le voyez, le parent de l'élément, qui est
.wrapper
est effondré, celui que vous voyez avec une bordure verte n'a pas une extension, mais il devrait droite? Reviendra que dans un certain temps, pour l'instant, nous avons une colonne flottait àleft
.Venir à la deuxième colonne, permet de
float
celui-ci à laright
Une autre colonne lancée vers la droite
Ici, nous avons un
300px
grande colonne qui nousfloat
à laright
, qui s'assoit à côté de la première colonne comme il flottait à laleft
, et depuis il est flottait à laleft
, elle a créé des vides de la gouttière à laright
, et puisqu'il y avait amplement d'espace sur leright
, notreright
flottait élément assis parfaitement à côté de laleft
un.Encore, l'élément parent est effondré, eh bien, nous allons corriger cela. Il existe de nombreux moyens pour empêcher l'élément parent de s'effondré.
clear: both;
avant la fin de l'élément parent, qui détient flottait éléments, maintenant, c'est une solution bon marché pourclear
vos éléments flottants qui fera le travail pour vous, mais, je vous recommande de ne pas utiliser ce.Ajouter,
<div style="clear: both;"></div>
avant la.wrapper
div
se termine, commeDémo
Bien, qui corrige très bien, pas de effondré parent plus, mais il ajoute inutile de balisage pour les DOM, de sorte que certains le suggèrent, à utiliser
overflow: hidden;
sur l'élément parent holding flottait enfant les éléments qui fonctionnent comme prévu.Utilisation
overflow: hidden;
sur.wrapper
Démo
Qui nous sauve d'un élément à chaque fois que nous avons besoin de
clear
float
mais comme je l'ai testé plusieurs cas, cela a échoué dans une en particulier, qui utilisebox-shadow
sur les éléments d'enfant.Démo (Ne peut pas voir l'ombre sur les 4 côtés,
overflow: hidden;
l'origine de ce problème)Alors quoi maintenant? Enregistrer un élément, pas de
overflow: hidden;
alors, allez pour un claire de fixer hack, utilisez l'extrait de code ci-dessous dans votre CSS, et tout comme vous utilisezoverflow: hidden;
pour l'élément parent, appelez leclass
ci-dessous sur l'élément parent de l'auto-clair.Démo
Ici, l'ombre fonctionne comme prévu, également, il s'auto-efface l'élément parent qui l'empêche de s'effondrer.
Et enfin, nous utilisons le pied de page après nous
clear
la flottait éléments.Démo
Quand est
float: none;
utilisé de toute façon, comme c'est le défaut, de sorte que toute utilisation de déclarerfloat: none;
?Bien, ça dépend, si vous allez pour un responsive design, vous allez utiliser cette valeur un grand nombre de fois, quand vous voulez que votre flottait éléments pour rendre l'un en dessous de l'autre à une certaine résolution. Pour que
float: none;
de la propriété joue un rôle important là.Quelques exemples du monde réel de la façon dont
float
est utile.img
flottait à l'intérieur dep
qui permettra à notre contenu de flux autour de.Démo (Sans flottante
img
)Demo 2 (
img
flottait à laleft
)float
pour la création de menu horizontale - DémoFloat deuxième élément, ou de l'utilisation de "marge"
Dernier mais non le moindre, je tiens à expliquer ce cas particulier où vous
float
seulement un seul élément de laleft
mais vous n'avez pasfloat
l'autre, de sorte que ce qui se passe?Suppose que si on enlève
float: right;
de notre.floated_right
class
, lediv
rendu de l'extrêmeleft
comme il n'est pas évoquée.Démo
Donc, dans ce cas, vous pouvez
float
àgauche
ainsiOU
Vous pouvez utiliser
margin-left
qui sera égal à la taille de la colonne de gauche flottait je.e200px
large.clear: both;
, mais c'est bien si vous vous sentez l'édition justifie donc permet de garder de cette façonoverflow: hidden;
a mieux fonctionné pour mon utilisation car j'ai quelques imprévisible float attributs sont modifiés dynamiquement en js. Solution utile.Vous devez ajouter
overflow:auto
à votre div parent pour englober l'intérieur div flottant:jsFiddle exemple
Vous rencontrez le flotteur bug (même si je ne sais pas si techniquement c'est un bug dû à la façon dont de nombreux navigateurs présentent ce comportement). Voici ce qui se passe:
Dans des circonstances normales, en supposant qu'aucune explicite de la hauteur a été défini, un élément de niveau bloc comme une div qui va définir sa hauteur en fonction de son contenu. Le bas de la div parent va au-delà du dernier élément. Malheureusement, flottant un élément arrête le parent de prendre le flottait élément en compte lors de la détermination de sa hauteur. Cela signifie que si votre dernier élément est flottant, il ne sera pas "étirer" la mère de la même façon un élément normal serait.
De compensation
Il y a deux façons de résoudre ce problème. La première est d'ajouter une "compensation" de l'élément, qui est, à un autre élément au-dessous de la flottait un qui va les obliger les parents à s'étirer. Il faut donc ajouter le code html suivant que le dernier enfant:
Il ne devrait pas être visible, et en utilisant clair:les deux, vous vous assurez de ne pas s'asseoir à côté de la flottait élément, mais d'après elle.
Overflow:
La deuxième méthode, qui est préféré par la plupart des gens (je pense) est de modifier le CSS de l'élément parent, de sorte que le dépassement est rien mais "visible". Si le réglage du dépassement de "caché" va forcer les parents à dépasser le bas de la flottait enfant. Ceci est vrai uniquement si vous n'avez pas défini une hauteur sur le parent, bien sûr.
Comme je l'ai dit, la seconde méthode est préférable car il ne nécessite pas d'aller et ajouter de la sémantique des éléments de sens à votre balise, mais il ya des moments où vous avez besoin de la
overflow
pour être visible, auquel cas l'ajout d'un élément de compensation est plus qu'acceptable.Son à cause de la flotte de la div. Ajouter
overflow: hidden
à l'extérieur de l'élément.Démo
Vous confondez la manière dont les navigateurs rend les éléments lorsqu'il y a des éléments flottants. Si un élément de bloc est flottant (votre intérieur div dans ton cas), d'autres éléments de bloc seront les ignorer, parce que le navigateur supprime les éléments flottants de l'écoulement normal de la page web. Ensuite, parce que la div flottant a été retiré de la circulation normale, à l'extérieur de la div est rempli, comme l'intérieur de la div n'est pas là. Toutefois, des éléments en ligne (images, des liens, du texte, blackquotes) respectera les limites de l'élément flottant. Si vous saisissez du texte à l'extérieur de la div, le texte aura lieu autour de l'intérieur de la div.
En d'autres termes, les éléments de bloc (en-têtes, des paragraphes, des vrd, etc) ignorer les éléments flottants et remplir, et des éléments en ligne (images, des liens, du texte, etc) le respect des limites des éléments flottants.
Un violon exemple ici
vous pouvez utiliser la propriété de dépassement de la div conteneur si vous n'avez pas de div à afficher sur le conteneur par exemple:
Voici le code css suivant:
-----------------------OU------------------------------
Voici le code css suivant:
Essayer celui-ci