Comment verticalement le contenu du centre à hauteur variable à l'intérieur d'un div?
Quelle est la meilleure façon d'verticalement centrer le contenu d'une div lorsque la hauteur du contenu est variable. Dans mon cas particulier, la hauteur de la div conteneur est fixe, mais ce serait bien si il y avait une solution qui pourrait fonctionner dans le cas où le conteneur a une hauteur variable ainsi. Aussi, j'aimerais une solution avec pas, ou très peu utiliser des hacks CSS et/ou de non-balisage sémantique.
- la méthode dans cet article tombe à l'eau dans Safari (4.0.5) :S
- Pas exactement, comme cette question est au sujet de hauteur variable div
- Aussi, cette question a été posée en premier.
- Double Possible de Comment verticalement centre d'une div pour tous les navigateurs?
Vous devez vous connecter pour publier un commentaire.
Juste ajouter
à l'intérieur de la div.
Ce qu'il fait est de déplacer la div à l'intérieur de la bordure supérieure à la moitié de la hauteur de la div extérieure (
top: 50%;
) et puis l'intérieur de la div en place par la moitié de sa hauteur (transform: translateY(-50%)
). Cela fonctionne avecposition: absolute
ourelative
.Gardez à l'esprit que
transform
ettranslate
marchands des préfixes qui ne sont pas inclus pour des raisons de simplicité.Codepen: http://codepen.io/anon/pen/ZYprdb
transform
choses liées est-webkit-
préfixé et maintenant ça fonctionne. Donc, voici un petit rappel: N'oubliez pas d'ajouter le-webkit-
préfixe trop.position: absolute
, n'est-ce pas?width
etheight
pourhtml
etbody
, il fonctionne aussi très bien dans Chrome sans avoir à définir un élément externe. Juste en utilisant le corps comme élément externe avecfixed
position! Super!translate
rendra tout blurrily comme il essaye de le manipuler .5px hauteur sur tout.Ce qui semble être la meilleure solution que j'ai trouvé pour ce problème, aussi longtemps que votre navigateur prend en charge les
::before
pseudo élément: CSS-Tricks: Centrage dans l'Inconnu.Il ne nécessite aucun supplément de balisage et semble très bien fonctionner. Je ne pouvais pas utiliser le
display: table
méthode cartable
éléments n'obéissent pas à lamax-height
propriété.CSS:
HTML:
.block { white-space: nowrap; font-size: 0; line-height: 0; }
et de laisser le négatif de la marge de droite sur le pseudo-élément, il vous suffit de réinitialiser fs et de lh sur .centré... comme cela, vous assurer que l'élément soit correctement positionné, même si c'est plus large que la fenêtre d'affichage (et ne pas avoir à utiliser de l'omi, un peu en désordre marge négative)..block
estposition:absolute
qui provoque des problèmes avec la Firefox et IE8. Cependant, il semble être fixe par retrait de lamargin-right
de.block:before
et définir.block { letter-spacing: -0.25em }
.center { letter-spacing: normal }
. Merci @Fadi!C'est quelque chose que j'ai besoin de faire beaucoup de temps et d'une solution cohérente, vous ajoutez un peu de non-balisage sémantique et certains navigateur spécifique hacks. Quand nous arrivons à la prise en charge du navigateur pour css 3 vous aurez votre centrage vertical sans pécher.
Pour une meilleure explication de la technique, vous pouvez regarder l'article que j'ai adapté à partir de, mais, fondamentalement, il consiste en l'ajout d'un élément supplémentaire, et l'application de différents styles dans internet explorer et les navigateurs qui prennent en charge
position:table\table-cell
sur la non-éléments de la table.Il existe de nombreuses façons (hacks) pour appliquer des styles dans des ensembles spécifiques de navigateurs. J'ai utilisé le conditionnel commentaires, mais regardez l'article lié ci-dessus pour voir les deux autres techniques.
Remarque: Il existe des moyens simples pour obtenir vertical de centrage si vous connaissez des 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 pour ensuite les jeter dans car il y a peut être une méthode qui ne nécessite pas de hacks de navigateur ou de non-balisage sémantique.
Mise à jour: nous commençons à Nous faire une meilleure prise en charge du navigateur pour CSS3, apportant à la fois flex-zone et transforme comme d'autres méthodes pour arriver 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 du navigateur est encore superficiel pour CSS3.
En utilisant le sélecteur d'enfant, j'ai pris Fadi est incroyable répondre ci-dessus et bouilli vers le bas, juste une règle CSS que je peux appliquer. Maintenant, tout ce que j'ai à faire est d'ajouter le
contentCentered
nom de la classe pour les éléments que je veux de centre:CSS:
HTML:
Fourche CodePen: http://codepen.io/dougli/pen/Eeysg
*
sélecteur va effectuer le pire que l'on a accepté la réponse. Peut-être pas un problème, mais il vaut la peine de noter. stevesouders.com/blog/2009/06/18/simplifying-css-selectors> div
à la place. calendar.perfplanet.com/2011/...Meilleur résultat pour moi pour l'instant:
div être centré:
Vous pouvez utiliser la marge de l'auto. Avec flex, la div semble être centrée verticalement trop.
C'est mon génial solution pour un
div
avec une dynamique (percentaged) de hauteur.CSS
HTML
Essayez par vous-même.