186 votes

Comment puis-je alignez verticalement quelque chose à l'intérieur d'une balise span?

Comment puis-je obtenir le "x" pour être verticalement alignées dans le milieu de la durée?

.foo {
    height: 50px;
    border: solid black 1px;
    display: inline-block;
    vertical-align: middle;
}

<span class="foo">
   x
</span>

259voto

Sindre Sorhus Points 20538

Utiliser line-height:50px; , au lieu de la hauteur. Cela devrait faire l'affaire ;)

124voto

lluisaznar Points 991

Sachez que la hauteur de la ligne ne parvient pas, si vous avez une longue phrase en l'espace qui rompt la ligne car il n'y a pas assez d'espace. Dans ce cas, vous disposez de deux lignes, avec un écart avec la hauteur de la N de pixels spécifié dans la propriété.

J'ai collé dedans quand j'ai voulu montrer une image avec un texte centré verticalement sur son côté droit, qui travaille dans un responsive web de l'application. Comme base, j'utilise l'approche proposée par Eric Nickus et Felipe Tadeo. Si vous souhaitez obtenir:

desktop

et:

mobile

C'est le CSS:

.container {
    background: url( "<PATH_TO_IMAGE>" ) no-repeat;
    display: inline-block;
    background-size: 40px 40px; /* image's size */
    height: 40px; /* image's height */
    padding-left: 50px; /* image's width plus 10 px (margin between text and image) */
}

.container span {
    height: 40px; /* image's height */
    display: table-cell;
    vertical-align: middle;
}

Et c'est le HTML:

<span class="container">
    <span>This is a centered sentence next to an image</span>
</span>

Démo

48voto

Hashbrown Points 1888

C'est la façon la plus simple de le faire si vous avez besoin de plusieurs lignes. Vous envelopper span'd texte dans un autre span et de préciser sa hauteur avec line-height. L'astuce pour plusieurs lignes est la réinitialisation de l'intérieur spans' line-height.

<span class="textvalignmiddle"><span>YOUR TEXT HERE</span></span>
.textvalignmiddle {
    line-height: /*set height*/;
}

.textvalignmiddle > span {
    display: inline-block;
    vertical-align: middle;
    line-height: 1em; /*set line height back to normal*/
}

DÉMO

Bien sûr que l'extérieur de la span pourrait être un div ou whathaveyou

5voto

Jason Points 31

J'avais besoin de cela pour les liens, donc j'ai enveloppé la durée avec un tag et un div, alors centrée sur la balise span lui-même

HTML

<div>
    <a class="tester" href="#">
        <span>Home</span>
    </a>
</div>

CSS

.tester{
    display: inline-block;
    width: 9em;
    height: 3em;
    text-align: center;
}
.tester>span{
    position: relative;
    top: 25%;
}

2voto

Felipe Tadeo Points 623

cela fonctionne pour moi (Keltex dit la même chose)

.foo {
height: 50px;
...
}
.foo span{
vertical-align: middle; 
}

<span class="foo"> <span>middle!</span></span>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X