J'essaie de centrer verticalement un élément span
ou div
dans un autre div
élément. Cependant quand je mets vertical-align: middle
, rien ne se passe. J'ai essayé de changer les display
propriétés des deux éléments, et rien ne semble fonctionner.
Voici ce que je fais actuellement sur ma page Web:
.main {
height: 72px;
vertical-align: middle;
border: 1px solid black;
padding: 2px;
}
.inner {
vertical-align: middle;
border: 1px solid red;
}
.second {
border: 1px solid blue;
}
<div class="main">
<div class="inner">
This box should be centered in the larger box
<div class="second">Another box in here</div>
</div>
</div>
Voici un jsfiddle de l'implémentation montrant que cela ne fonctionne pas: http://jsfiddle.net/gZXWC/
Utilisation de CSS3:
Css:
Remarque: cela peut ne pas fonctionner dans les anciens IE
la source
inline-flex
d'avoir plusieurs éléments d'affilée à l'intérieur de l'élément intérieur..inner { width: 100%; }
. De cette façon, il semble fonctionner comme.outer { display: table; } .inner { display: table-cell; vertical-align: middle; }
mais sans forcer une largeur minimale.justify-content: center;
d'aligner horizontalement ce qui fonctionnait très bienEssayez ceci, fonctionne très bien pour moi:
la source
#element span {height:100%;display:-webkit-box;-webkit-box-pack:center;-webkit-box-align:center;}
- notez que la hauteur est importante pour garantir que la travée hérite de la pleine hauteur de son conteneur (probablement un div) sinon vous n'obtiendrez toujours pas le centrage vertical!box
dansdisplay
La définition de la hauteur de ligne à la même hauteur qu'elle contient div fonctionnera également
DEMO http://jsfiddle.net/kevinPHPkevin/gZXWC/7/
la source
line-height
changera également la hauteur de l'élément intérieur. b) L'élément intérieur n'est toujours pas centré verticalement avec précision. c) Il ne fonctionne pas sur les éléments qui ne contiennent pas de texte, par exemple:,<img>
ou les éléments à hauteur fixe.Dans le cas où vous ne pouvez pas compter sur Flexbox ... Placer
.child
au.parent
centre de. Fonctionne lorsque la taille des pixels est inconnue (en d'autres termes, toujours) et qu'il n'y a pas de problème avec IE9 + également.la source
Vous devez mettre
vertical-align: middle
l'élément intérieur, pas l'élément extérieur. Définissez laline-height
propriété sur l'élément externe pour qu'elle corresponde à celleheight
de l'élément externe. Ensuite, placezdisplay: inline-block
etline-height: normal
sur l'élément intérieur. En faisant cela, le texte sur l'élément interne se terminera par une hauteur de ligne normale. Fonctionne dans Chrome, Firefox, Safari et IE 8+Violon
la source
line-height: normal;
et çadisplay:inline;
marche aussi. Le bonus de cette méthode est qu'elle n'interfère pas avectext-align:center;
laquelle l'utilisationdisplay: table-cell;
peut créer des problèmes. Très souvent, nous voulons aligner aussi bien horizontalement que verticalement. Voir ce violon édité: jsfiddle.net/br090prs/36line-height: normal
etdisplay: inline-block
est pour que le texte interne soit correctement encapsulé. Si vous êtes sûr que le texte dans la div intérieure ne sera jamais bouclé, ces propriétés ne seront pas nécessaires.Je l'ai utilisé pour aligner tout au centre de la div enveloppe au cas où cela aiderait quelqu'un - je l'ai trouvé le plus simple:
la source
Voici un exemple de deux façons de faire un alignement vertical. Je les utilise et ils fonctionnent plutôt bien. L'un utilise le positionnement absolu et l'autre utilise la flexbox .
Exemple d'alignement vertical
En utilisant flexbox, vous pouvez aligner un élément par lui-même à l'intérieur d'un autre élément avec
display: flex;
usingalign-self
. Si vous devez l'aligner également horizontalement, vous pouvez utiliseralign-items
etjustify-content
dans le conteneur.Si vous ne souhaitez pas utiliser flexbox, vous pouvez utiliser la propriété position. Si vous rendez le conteneur relatif et le contenu absolu, le contenu pourra se déplacer librement à l'intérieur du conteneur. Donc, si vous utilisez
top: 0;
etleft: 0;
dans le contenu, il sera positionné dans le coin supérieur gauche du conteneur.Ensuite, pour l'aligner, il vous suffit de modifier les références supérieure et gauche à 50%. Cela positionnera le contenu au centre du conteneur à partir du coin supérieur gauche du contenu.
Vous devez donc corriger cela en traduisant le contenu de la moitié de sa taille vers la gauche et le haut.
la source
voici un excellent article sur la façon d'aligner vical .. J'aime la façon de flotter.
http://www.vanseodesign.com/css/vertical-centering/
Le HTML:
Et le style correspondant:
la source
HTML
CSS
Nous avons défini le div parent pour qu'il s'affiche sous forme de tableau et le div enfant pour qu'il s'affiche sous forme de cellule de tableau. Nous pouvons ensuite utiliser l'alignement vertical sur le div enfant et définir sa valeur au milieu. Tout ce qui se trouve à l'intérieur de cette division enfant sera centré verticalement.
la source
C'est simple. Ajoutez simplement
display:table-cell
votre classe principale.Découvrez ce jsfiddle !
la source
Voici la dernière solution la plus simple - pas besoin de changer quoi que ce soit, ajoutez simplement trois lignes de règles CSS à votre conteneur de div où vous souhaitez vous centrer. J'adore
Flex Box
#LoveFlexBoxPrime
la
justify-content
valeur peut être réglée sur les quelques options suivantes:flex-start
, qui alignera la division enfant à l'endroit où le flux flexible commence dans son conteneur parent. Dans ce cas, il restera au top.center
, qui alignera le div enfant sur le centre de son conteneur parent. C'est vraiment bien, car vous n'avez pas besoin d'ajouter un div supplémentaire pour envelopper tous les enfants pour mettre le wrapper dans un conteneur parent pour centrer les enfants. Pour cette raison, c'est le vrai centre vertical (dans lecolumn
flex-direction
. De même, si vous changez leflow-direction
enrow
, il deviendra centré horizontalement.flex-end
, qui alignera la division enfant à l'endroit où le flux flexible se termine dans son conteneur parent. Dans ce cas, il se déplacera vers le bas.space-between
, qui répartira tous les enfants du début du flux à la fin du flux. Si la démo, j'ai ajouté un autre div enfant, pour montrer qu'ils sont répartis.space-around
, similaire àspace-between
, mais avec la moitié de l'espace au début et à la fin du flux.la source
Puisque
vertical-align
fonctionne comme prévu sur untd
, vous pouvez mettre une seule celluletable
dans lediv
pour aligner son contenu.Clunky, mais fonctionne pour autant que je sache. Il pourrait ne pas avoir les inconvénients des autres solutions de contournement.
la source
Placez simplement le contenu dans un tableau avec une hauteur de 100% et définissez la hauteur du div principal
la source
Pour centrer verticalement un élément span ou div dans un autre div, ajoutez la position relative au div parent et la position absolue à la div enfant. Maintenant, la div enfant peut être positionnée n'importe où à l'intérieur de la div.
css:
la source
Il s'agit d'une approche moderne et elle utilise la fonctionnalité CSS Flexbox. Vous pouvez maintenant aligner verticalement le contenu dans votre conteneur parent en ajoutant simplement ces styles au
.main
conteneurEt vous êtes prêt à partir!
la source