Jak wyrównać w pionie coś w tagu span?


144

Jak ustawić „x” w pionie na środku zakresu?

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

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

Odpowiedzi:


218

Użyj line-height:50px;zamiast wysokości. To powinno załatwić sprawę;)


1
Doskonale! Działa z każdym typem tagu. W moim przypadku pracował dla <img>.
Felipe Conde

21
Problem polega na tym, że tekst zawija się. W przypadku dwóch linii rozpiętość zostanie wyrenderowana z wysokością 100 pikseli.
Norberto Yoan

jeśli twój tekst się zawija, wypróbuj moją odpowiedź @NorbertoYoan
Hashbrown

ditto dla @Sumit (zduplikowane z powodu problemu z komentarzami SO )
Hashbrown

To nie powinna być najczęściej głosowana odpowiedź, czy rozwiązanie może dać inne niepożądane wyniki w zależności od treści.
rafaelmorais

113

Pamiętaj, że line-heightpodejście to zawodzi, jeśli masz długie zdanie, spanktóre przerywa linię, ponieważ nie ma wystarczająco dużo miejsca. W takim przypadku byłyby dwa wiersze z przerwą o wysokości N pikseli określonej we właściwości.

Utknąłem w tym, gdy chciałem wyświetlić obraz z tekstem wyśrodkowanym w pionie po prawej stronie, który działa w responsywnej aplikacji internetowej. Jako podstawę opieram się na podejściu zaproponowanym przez Erica Nickusa i Felipe Tadeo.

Jeśli chcesz osiągnąć:

pulpit

i to:

mobilny

.container {
    background: url( "https://i.imgur.com/tAlPtC4.jpg" ) 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;
}
<span class="container">
    <span>This is a centered sentence next to an image</span>
</span>


co to jest dynamiczny wzrost
Alberto Acuña

39

To najprostszy sposób, jeśli potrzebujesz wielu linii. Zawiń swój spantekst w inny spani określ jego wysokość za pomocą line-height. Sposobem na wielu liniach resetuje wewnętrzne 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*/
}

PRÓBNY

Oczywiście na zewnątrz spanmoże być divlub cokolwiek


2
spans, jak każdy inny element wbudowany, może zawierać dowolny element wbudowany HTML . Niezależnie od tego napisałem, że textvalignmiddlemoże to być, divjeśli jest to konieczne (i możesz to ustawić, display:inline;jeśli masz taką niechęć do używania spans)
Hashbrown

Chodzi mi o to, że nie powinni. Służą do umieszczania tekstu. W przeciwnym razie użyj elementu div.
JorgeeFG

3
spanjest ogólnym kontenerem wbudowanym dla html i nie zawiera jedynie wskazówki, że jest tylko tekstem; `Może służyć do grupowania elementów do celów stylizacji ... ''. Proponuję przeczytać specyfikację, zanim narzucisz innym swoje osobiste standardy kodowania, podając je jako fakty
Hashbrown

3
tak czy inaczej, ta linia konwersacji nie jest konstruktywna z technicznego punktu widzenia dla pytania i nie jest do czego służą komentarze w SO
Hashbrown

U mnie też działa. Użyto innego elementu niż span.
chocolata

27

Sposób Flexbox:

.foo {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 50px;
}

ponieważ .footo rozpiętość display: flex-inlinepasowałaby lepiej
koala

7
Czy chodziło Ci o „inline-flex”?
Tim Gerhard

5

Potrzebowałem tego dla linków, więc zawinąłem span tagiem a i div, a następnie wyśrodkowałem sam tag span

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%;
}

Dzięki za to, nienawidzę majstrować przy CSS, spędzałem cały dzień próbując wyśrodkować element w pionie, kiedy znalazłem tutaj twoją odpowiedź. Ratujesz życie!
Todd Nestor,

5

Pionowy obraz i tekst CSS na środku

Mam Stwórz jedno demo dla pionowego centrum obrazu i tekstu, mam również test na Firefox, Chrome, Safari, Internet Explorer 9 i 8.

Jest to bardzo krótki i łatwy w obsłudze css i html. Proszę sprawdzić poniższy kod i znaleźć wyjście na screenhort.

HTML

<div class="frame">
    <img src="capabilities_icon1.png" alt="" />
</div>

CSS

  .frame {
        height: 160px;      
        width: 160px;
        border: 1px solid red;
        white-space: nowrap;
        text-align: center; margin: 1em 0;
    }

    .frame::before {
        display: inline-block;
        height: 100%;
        vertical-align: middle;
        content:"";
    }

    img {
        background: #3A6F9A;
        vertical-align: middle;
    }

Wyjście wprowadź opis obrazu tutaj


2

to działa dla mnie (Keltex powiedział to samo)

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

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

1

Atrybut CSS wyrównywania w pionie nie działa niestety zgodnie z oczekiwaniami. W tym artykule wyjaśniono 2 sposoby wyrównania elementu w pionie za pomocą CSS.


1

Ustaw padding-top, aby był odpowiednią wartością, aby przesunąć x w dół, a następnie odejmij wartość, którą masz dla padding-top od wysokości.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.