Disons que vous en avez un div
, donnez-lui une définition width
et mettez-y des éléments, dans mon cas un img
et un autre div
.
L'idée est que le contenu du conteneur div
entraînera l' div
étirement du conteneur et constituera un arrière-plan pour le contenu. Mais quand je fais cela, le contenant div
rétrécit pour s'adapter aux objets non flottants, et les objets flottants seront soit complètement sortis, soit à moitié sortis, à moitié entrés, et n'auront aucune incidence sur la taille du grand div
.
Pourquoi est-ce? Y a-t-il quelque chose qui me manque, et comment puis-je obtenir des éléments flottants pour étirer le height
contenant div
?
overflow:hidden
navigateur force le mieux qu'il peut à contenir les éléments enfants du parent. C'est pourquoi il le corrige.overflow: hidden
est ici: lien . Et merci beaucoup, cela a fonctionné pour moioverflow: hidden
cela ne fera que masquer toute partie d'un élément qui sort du conteneur parent. Pour moi, cela a rendu certains morceaux de texte illisibles.Raison
Le problème est que les éléments flottants sont hors du flux :
Par conséquent, ils ne touchent pas des éléments entourant comme en flux élément serait.
Ceci est expliqué dans 9.5 Flotteurs :
Afficher l'extrait de code
Ceci est également spécifié dans 10.6 Calcul des hauteurs et des marges . Pour les blocs "normaux" ,
Afficher l'extrait de code
Solution Hacky: dégagement
Un moyen de résoudre le problème consiste à forcer certains éléments entrants à être placés sous tous les flotteurs. Ensuite, la hauteur du parent augmentera pour envelopper cet élément (et donc les flotteurs aussi).
Ceci peut être réalisé en utilisant la
clear
propriété :Afficher l'extrait de code
Donc, une solution consiste à ajouter un élément vide avec
clear: both
comme dernier frère des flotteursCependant, ce n'est pas sémantique. Mieux vaut donc générer un pseudo-élément à la fin du parent:
Il existe plusieurs variantes de cette approche, par exemple en utilisant la syntaxe
:after
à deux points obsolète pour prendre en charge les anciens navigateurs, ou en utilisant d'autres affichages au niveau du bloc commedisplay: table
.Solution: racines BFC
Il existe une exception au comportement problématique défini au début: si un élément de bloc établit un contexte de formatage de bloc (est une racine BFC), il encapsulera également son contenu flottant.
Selon les hauteurs 10.6.7 «Auto» pour les racines de contexte de formatage de bloc ,
Afficher l'extrait de code
De plus, comme expliqué dans 9.5 Floats , les racines BFC sont également utiles pour les raisons suivantes:
Afficher l'extrait de code
Un contexte de formatage de bloc est établi par
Boîtes de bloc avec
overflow
autre quevisible
, par exemplehidden
Bloquer les conteneurs qui ne sont pas des blocs: lorsque
display
est défini surinline-block
,table-cell
outable-caption
.Éléments flottants: quand
float
est réglé surleft
ouright
.Éléments positionnés de manière absolue: quand
position
est réglé surabsolute
oufixed
.Notez que ceux-ci peuvent avoir des effets collatéraux indésirables, comme l'écrêtage du contenu débordant, le calcul des largeurs automatiques avec l' algorithme de rétrécissement pour s'adapter ou devenir hors du flux. Le problème est donc qu'il n'est pas possible d'avoir un élément de niveau bloc en flux avec débordement visible qui établit un BFC.
L'affichage L3 résout ces problèmes:
Malheureusement, il n'y a pas encore de support de navigateur. Nous pourrons éventuellement utiliser
la source
Mettez votre flottant
div(s)
dans undiv
CSS et donnez-lui queoverflow:hidden;
cela fonctionnera bien.
la source
Recommandation W3Schools:
mettre
overflow: auto
sur l'élément parent et il "colorera" tout l'arrière-plan, y compris les marges des éléments. Les éléments flottants resteront également à l'intérieur de la bordure.http://www.w3schools.com/css/tryit.asp?filename=trycss_layout_clearfix
la source
Il ne manque rien. Float a été conçu pour le cas où vous souhaitez qu'une image (par exemple) se trouve à côté de plusieurs paragraphes de texte, de sorte que le texte circule autour de l'image. Cela ne se produirait pas si le texte «étirait» le conteneur. Votre premier paragraphe se terminerait, puis votre paragraphe suivant commencerait sous l'image (peut-être plusieurs centaines de pixels ci-dessous).
Et c'est pourquoi vous obtenez le résultat que vous êtes.
la source
Dans certains cas, c'est- à- dire lorsque (si) vous utilisez simplement
float
pour que les éléments circulent sur la même "ligne", vous pouvez utiliserau lieu de
Sinon, l'utilisation d'un
clear
élément à la fin fonctionne, même si cela peut aller à contre-courant d'avoir besoin d'un élément pour faire ce qui devrait être du travail CSS.la source
Voici une approche plus moderne:
Plus de corrections claires.
ps Utilisation du débordement: caché; cache l'ombre de la boîte donc ...
la source
Merci LSerni vous l'avez résolu pour moi.
Pour y parvenir:
Tu dois faire ca :
la source
Comme le dit Lucas, ce que vous décrivez est le comportement prévu pour la propriété float. Ce qui déroute beaucoup de gens, c'est que float a été poussé bien au-delà de son utilisation initiale afin de combler les lacunes du modèle de disposition CSS.
Jetez un oeil à Floatutorial si vous souhaitez mieux comprendre le fonctionnement de cette propriété.
la source
Vous pouvez facilement faire avec d'abord vous pouvez faire le div flex et appliquer justifier le contenu à droite ou à gauche et votre problème est résolu.
la source