J'ai la structure de page comme:
<div class="parent">
<div class="child-left floatLeft">
</div>
<div class="child-right floatLeft">
</div>
</div>
Maintenant, le child-left
DIV aura plus de contenu, donc la parent
hauteur du DIV augmente selon le DIV enfant.
Mais le problème est que la child-right
hauteur n'augmente pas. Comment puis-je rendre sa hauteur égale à son parent?
Réponses:
Pour l'
parent
élément, ajoutez les propriétés suivantes:alors pour
.child-right
ceux-ci:Trouvez des résultats plus détaillés avec des exemples CSS ici et plus d'informations sur les colonnes de hauteur égale ici .
la source
Une solution courante à ce problème utilise un positionnement absolu ou des flottants recadrés, mais ceux-ci sont délicats car ils nécessitent un réglage approfondi si vos colonnes changent en nombre + taille, et que vous devez vous assurer que votre colonne "principale" est toujours la plus longue. Au lieu de cela, je vous suggère d'utiliser l'une des trois solutions les plus robustes:
display: flex
: de loin la solution la plus simple et la meilleure et très flexible - mais non prise en charge par IE9 et les versions antérieures.table
oudisplay: table
: très simple, très compatible (à peu près tous les navigateurs), assez flexible.display: inline-block; width:50%
avec un hack de marge négatif: assez simple, mais les bordures en bas de colonne sont un peu délicates.1.
display:flex
C'est vraiment simple et il est facile de s'adapter à des mises en page plus complexes ou plus détaillées - mais flexbox n'est pris en charge que par IE10 ou version ultérieure (en plus d'autres navigateurs modernes).
Exemple: http://output.jsbin.com/hetunujuma/1
HTML pertinent:
CSS pertinent:
Flexbox prend en charge beaucoup plus d'options, mais pour avoir simplement un nombre quelconque de colonnes, ce qui précède suffit!
2.
<table>
oudisplay: table
Un moyen simple et extrêmement compatible de le faire est d'utiliser un
table
- je vous recommande d'essayer d'abord si vous avez besoin d'un support ancien IE . Vous avez affaire à des colonnes; divs + floats ne sont tout simplement pas la meilleure façon de le faire (sans parler du fait que plusieurs niveaux de divs imbriqués juste pour pirater les limitations css ne sont guère plus "sémantiques" que d'utiliser simplement une table simple). Si vous ne souhaitez pas utiliser l'table
élément, pensez à cssdisplay: table
(non pris en charge par IE7 et versions antérieures).Exemple: http://jsfiddle.net/emn13/7FFp3/
HTML pertinent: (mais pensez à utiliser un simple à la
<table>
place)CSS pertinent:
Cette approche est beaucoup plus robuste que l'utilisation
overflow:hidden
avec des flotteurs. Vous pouvez ajouter à peu près n'importe quel nombre de colonnes; vous pouvez les faire évoluer automatiquement si vous le souhaitez; et vous conservez la compatibilité avec les anciens navigateurs. Contrairement à la solution flottante, vous n'avez pas non plus besoin de savoir à l' avance quelle colonne est la plus longue; les échelles de hauteur très bien.KISS: n'utilisez pas de hacks flottants sauf si vous en avez spécifiquement besoin. Si IE7 est un problème, je choisirais quand même un tableau simple avec des colonnes sémantiques sur une solution CSS-trick difficile à maintenir et moins flexible.
Soit dit en passant, si vous avez besoin que votre mise en page soit réactive (par exemple, pas de colonnes sur les petits téléphones mobiles), vous pouvez utiliser une
@media
requête pour revenir à la mise en page en blocs simples pour les petites largeurs d'écran - cela fonctionne que vous utilisiez<table>
ou tout autredisplay: table
élément.3.
display:inline block
avec un hack de marge négative.Une autre alternative est d'utiliser
display:inline block
.Exemple: http://jsbin.com/ovuqes/2/edit
HTML pertinent: (l'absence d'espaces entre les
div
balises est significative!)CSS pertinent:
C'est un peu délicat, et la marge négative signifie que le "vrai" bas des colonnes est obscurci. Cela signifie à son tour que vous ne pouvez rien positionner par rapport au bas de ces colonnes car cela est coupé par
overflow: hidden
. Notez qu'en plus des blocs en ligne, vous pouvez obtenir un effet similaire avec des flottants.TL; DR : utilisez flexbox si vous pouvez ignorer IE9 et les versions antérieures; sinon essayez une table (css). Si aucune de ces options ne fonctionne pour vous, il y a des hacks de marge négatifs, mais ceux-ci peuvent provoquer des problèmes d'affichage étranges qui sont faciles à manquer pendant le développement, et il y a des limites de mise en page dont vous devez être conscient.
la source
border-spacing:10px;
sur l'élément de table introduira un espacement de type marge. Alternativement, vous pouvez ajouter des colonnes supplémentaires (vides) là où vous voulez de l'espace supplémentaire. Et vous pouvez également ajouter un remplissage à l'intérieur des cellules du tableau; ce rembourrage sera cependant inclus en arrière-plan, donc ce n'est peut-être pas ce que vous voulez. Mais vous avez raison, ce n'est pas aussi flexible qu'une marge normale. Et vous ne pouvez rien positionner par rapport aux colonnes, ce qui peut être un problème.Pour le parent:
Pour les enfants:
Vous devez ajouter des préfixes, vérifiez caniuse.
la source
J'ai trouvé beaucoup de réponses, mais la meilleure solution pour moi est probablement
Vous pouvez consulter d'autres solutions ici http://css-tricks.com/fluid-width-equal-height-columns/
la source
Veuillez définir parent div sur
overflow: hidden
ensuite dans divs enfant, vous pouvez définir une grande quantité pour padding-bottom. par exemple,
padding-bottom: 5000px
puis
margin-bottom: -5000px
et puis tous les divs enfants seront la hauteur du parent.
Bien sûr, cela ne fonctionnera pas si vous essayez de mettre du contenu dans la div parent (en dehors des autres div c'est-à-dire)
Exemple: http://jsfiddle.net/Tareqdhk/DAFEC/
la source
Le parent a-t-il une taille? Si vous définissez la hauteur des parents comme ça.
Ensuite, vous pouvez faire s'étirer l'enfant à sa pleine hauteur comme ça.
ÉDITER
Voici comment vous le feriez en utilisant JavaScript.
la source
L'affichage des tables CSS est idéal pour cela:
Réponse originale (en supposant que n'importe quelle colonne pourrait être plus grande):
Vous essayez de faire dépendre la taille du parent de la taille des enfants et la taille des enfants de la taille des parents. Ne calcule pas. Les colonnes CSS Faux sont la meilleure solution. Il y a plus d'une façon de procéder. Je préfère ne pas utiliser JavaScript.la source
display: table
+display: table-cell
produira le résultat souhaité.float
: stackoverflow.com/questions/20110217/…J'ai récemment fait cela sur mon site Web en utilisant jQuery. Le code calcule la hauteur du div le plus haut et définit les autres div à la même hauteur. Voici la technique:
http://www.broken-links.com/2009/01/20/very-quick-equal-height-columns-in-jquery/
Je ne pense pas que
height:100%
cela fonctionnera, donc si vous ne connaissez pas explicitement les hauteurs de div, je ne pense pas qu'il existe une solution CSS pure.la source
Je l'ai utilisé pour une section de commentaires:
Vous pouvez faire flotter l'enfant à droite, mais dans ce cas, j'ai calculé les largeurs de chaque div avec précision.
la source
Si vous connaissez le bootstrap, vous pouvez le faire facilement en utilisant la propriété 'flex'. Tout ce que vous avez à faire est de passer sous les propriétés css à div parent
où
.homepageSection
est ma parent div. Ajoutez maintenant le div enfant dans votre html commeoù abc est mon enfant div. Vous pouvez vérifier l'égalité de hauteur dans les deux enfants div indépendamment de la frontière juste en donnant la frontière à l'enfant div
la source
J'ai utilisé le style en ligne juste pour donner une idée.
la source
J'ai appris cette astuce lors d'un entretien de stage. La question initiale est de savoir comment vous assurer que la hauteur de chaque composant supérieur dans trois colonnes a la même hauteur qui affiche tout le contenu disponible. Fondamentalement, créez un composant enfant invisible qui restitue la hauteur maximale possible.
la source