Quelle est la meilleure façon de centrer verticalement le contenu d'un div lorsque la hauteur du contenu est variable. Dans mon cas particulier, la hauteur du conteneur div est fixe, mais ce serait formidable s'il y avait une solution qui fonctionnerait dans les cas où le conteneur a également une hauteur variable. Aussi, j'aimerais une solution sans ou très peu d'utilisation de hacks CSS et / ou de balisage non sémantique.
css
vertical-alignment
Jességavin
la source
la source
Réponses:
Il suffit d'ajouter
à la div interne.
Ce qu'il fait, c'est déplacer la bordure supérieure du div interne à la moitié de la hauteur du div externe (
top: 50%;
), puis le div interne vers le haut de la moitié de sa hauteur (transform: translateY(-50%)
). Cela fonctionnera avecposition: absolute
ourelative
.Gardez à l'esprit cela
transform
ettranslate
ayez des préfixes de fournisseur qui ne sont pas inclus pour plus de simplicité.Codepen: http://codepen.io/anon/pen/ZYprdb
la source
transform
des trucs connexes sont-webkit-
préfixés et maintenant cela fonctionne. Alors juste pour rappel: n'oubliez pas d'ajouter le-webkit-
préfixe aussi.position: absolute
, n'est-ce pas?translate
le rendu sera flou en essayant de gérer une hauteur de 0,5 px sur tout.Cela semble être la meilleure solution que j'ai trouvée à ce problème, tant que votre navigateur prend en charge le
::before
pseudo élément: CSS-Tricks: Centering in the Unknown .Il ne nécessite aucun balisage supplémentaire et semble fonctionner extrêmement bien. Je n'ai pas pu utiliser la
display: table
méthode car lestable
éléments n'obéissent pas à lamax-height
propriété.la source
.block { white-space: nowrap; font-size: 0; line-height: 0; }
et laisser la marge droite négative sur le pseudo élément, il vous suffit de réinitialiser fs et lh sur .centered ... ainsi vous vous assurez que l'élément sera correctement positionné même s'il est plus large que la fenêtre (et ne 'pas besoin d'utiliser la marge négative imo un peu désordonnée).C'est quelque chose que j'ai dû faire plusieurs fois et une solution cohérente nécessite toujours d'ajouter un peu de balisage non sémantique et des hacks spécifiques au navigateur. Lorsque nous obtenons le support du navigateur pour css 3, vous obtiendrez votre centrage vertical sans pécher.
Pour une meilleure explication de la technique, vous pouvez consulter l'article à partir duquel je l'ai adaptée , mais cela implique essentiellement d'ajouter un élément supplémentaire et d'appliquer différents styles dans IE et les navigateurs prenant en charge
position:table\table-cell
les éléments non-table.Il existe de nombreuses façons (hacks) d'appliquer des styles dans des ensembles spécifiques de navigateurs. J'ai utilisé des commentaires conditionnels mais regardez l'article lié ci-dessus pour voir deux autres techniques.
Remarque: Il existe des moyens simples d'obtenir un centrage vertical si vous connaissez certaines hauteurs à l'avance, si vous essayez de centrer une seule ligne de texte ou dans plusieurs autres cas. Si vous avez plus de détails, ajoutez-les car il peut y avoir une méthode qui ne nécessite pas de piratage de navigateur ou de balisage non sémantique.
Mise à jour: Nous commençons à obtenir une meilleure prise en charge du navigateur pour CSS3, en apportant à la fois la boîte flexible et les transformations comme méthodes alternatives pour obtenir un centrage vertical (entre autres effets). Voir cette autre question pour plus d'informations sur les méthodes modernes, mais gardez à l'esprit que la prise en charge des navigateurs est encore sommaire pour CSS3.
la source
En utilisant le sélecteur d'enfant, j'ai pris l'incroyable réponse de Fadi ci-dessus et l' ai réduite à une seule règle CSS que je peux appliquer. Il ne me reste plus qu'à ajouter le
contentCentered
nom de la classe aux éléments que je souhaite centrer:CodePen fourchu: http://codepen.io/dougli/pen/Eeysg
la source
*
sélecteur fonctionnera moins bien que la réponse acceptée. Ce n'est peut-être pas un problème, mais il convient de le noter. stevesouders.com/blog/2009/06/18/simplifying-css-selectors> div
place. calendar.perfplanet.com/2011/…Meilleur résultat pour moi jusqu'à présent:
div pour être centré:
la source
Vous pouvez utiliser la marge automatique. Avec flex, le div semble également être centré verticalement.
la source
Pour moi, la meilleure façon de faire est:
L'avantage est de ne pas avoir à rendre la hauteur explicite
la source
C'est ma solution géniale pour un
div
avec une hauteur dynamique (en pourcentage).CSS
HTML
Essayez cela par vous-même.
la source
vous pouvez utiliser un affichage flexible tel que le code ci-dessous:
la source