En CSS, le overflow:hidden
est défini sur les conteneurs parents afin de lui permettre de s'étendre avec la hauteur de leurs enfants flottants.
Mais il a aussi une autre caractéristique intéressante lorsqu'il est combiné avec margin: auto
...
Si le frère PREVIOUS est un élément flottant, il apparaîtra en fait juxtaposé à celui-ci. Autrement dit, si le frère est float:left
alors le conteneur avec float:none overflow:hidden
apparaîtra à droite du frère, pas de nouvelle ligne - comme s'il flottait dans le flux normal. Si le frère précédent est float:right
alors le conteneur apparaîtra à gauche du frère. Le redimensionnement de ce conteneur l'affichera avec précision centré entre les éléments flottants. Disons que si vous avez deux frères et sœurs précédents, l'un float:left
l'autre float:right
, le conteneur apparaîtra centré entre les deux.
Alors, voici le problème ...
Comment conserver ce type de mise en page SANS masquer les enfants?
Googler partout sur le Web me donne des moyens de clear:both
développer et d'agrandir un conteneur ... mais je ne trouve pas de solution alternative pour maintenir le centrage gauche / droite de l'enfant précédent. Si vous créez le conteneur, overflow:visible
le conteneur ignore soudainement le flux de disposition des éléments flottants et apparaît en couches au-dessus de l'élément flottant.
Alors question :
Je dois avoir le conteneur overflow:hidden
pour conserver la mise en page ...
comment faire pour que les enfants ne soient pas masqués? J'ai besoin d'avoir l'enfant positionné de manière absolue par rapport au parent en dehors du conteneur.
OU
Comment est-ce overflow:visible
que je peux absolument positionner un enfant par rapport au parent en dehors du conteneur ... ENCORE conserver le frère float-like-layout-flow?
overflow:hidden
. L'application d'un clearfix au div parent ne permet pas à tous les composants enfants d'être "contenus dans" la même hauteur que le parent.Aucune des réponses affichées n'a fonctionné pour moi. La configuration
position: absolute
de l'élément enfant fonctionnait cependant.la source
position: fixed
positionné en absolu par rapport à quelque chose en dehors du parent qui l'avisibility: hidden
, il sera visible. Cependant, vous devez souvent (voulez) le positionner par rapport au parent pour être plus robuste aux changements de code. Alors ces solutions ne sont pas une alternative.C'est une vieille question mais je l'ai rencontrée moi-même.
J'ai des semi-solutions qui fonctionnent situationnellement pour la question précédente ("Enfants visibles en débordement: parent caché")
Si le div parent n'a pas besoin d'être position: relative, définissez simplement les styles enfants sur visibilité: visible.
Si le div parent doit être position: relative, le seul moyen que j'ai trouvé pour montrer aux enfants était position: fixed. Cela a fonctionné pour moi dans ma situation assez heureusement, mais j'imagine que cela ne fonctionnerait pas dans d'autres.
Voici un exemple merdique, il suffit de le publier dans un fichier html pour l'afficher.
la source
left
. Utiliser à lamargin-left
place aurait le même effet, donc je n'avais plus besoin d'utiliser la position relative.Pour d'autres, si clearfix ne résout pas cela pour vous, ajoutez des marges au frère non flottant qui est / sont les mêmes que la (les) largeur (s) du ou des frères flottants.
la source