Bir span etiketi içindeki bir şeyi dikey olarak nasıl hizalarım?


148

"X" in açıklığın ortasında dikey olarak hizalanmasını nasıl sağlayabilirim?

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

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

Yanıtlar:


222

line-height:50px;Yükseklik yerine kullanın . Bu hile yapmalı;)


1
Mükemmel! Her tür etiket için çalışır. Benim durumumda <img> için çalıştı.
Felipe Conde 13

22
Sorun, metnin kaydırılmasıdır. İki satırla bu açıklık 100px yüksekliğinde oluşturulacaktır.
Norberto Yoan

metniniz sarılırsa cevabımı deneyin @NorbertoYoan
Hashbrown

@Sumit için aynen ( SO'nun yorumlarıyla ilgili sorun nedeniyle çoğaltıldı )
Hashbrown

Bu en çok oylanan cevap olmamalı, çözüm içeriğe bağlı olarak başka istenmeyen sonuçlar verebilir mi?
rafaelmorais

114

Unutmayın line-heightEğer uzun bir cümle varsa yaklaşım başarısız spanyeterli alan olmadığı için çizgi çiğnemesini. Bu durumda, özellikte belirtilen N piksel yüksekliğine sahip bir boşluk içeren iki satırınız olur.

Duyarlı bir web uygulamasında çalışan, sağ tarafında dikey olarak ortalanmış bir metin olan bir görüntüyü göstermek istediğimde buna takılı kaldım. Temel olarak Eric Nickus ve Felipe Tadeo tarafından önerilen yaklaşımı kullanıyorum.

Başarmak istiyorsanız:

masaüstü

ve bu:

seyyar

.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>


dinamik yükseklik nedir
Alberto Acuña

40

Birden fazla hatta ihtiyacınız varsa bunu yapmanın en basit yolu budur. spanMetninizi başka bir metne sarın spanve yüksekliğini ile belirtin line-height. Birden çok satıra hile iç sıfırlıyor span's 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*/
}

DEMO

Tabii ki dış taraf spanbir divya da ne olabilir


2
spans, diğer herhangi bir satır içi öğe gibi, herhangi bir HTML satır içi öğesi içerebilir . Ne olursa olsun, bunun gerekirse textvalignmiddlebir olabileceğini yazdım div(ve display:inline;kullanmaktan bu kadar hoşlanmıyorsanız , ayarlayabilirsiniz spans)
Hashbrown

Demek istediğim yapmamalılar. Metin içermek içindir. Aksi takdirde bir div kullanın.
JorgeeFG

3
spanhtml için genel satır içi kapsayıcıdır ve yalnızca metin olduğu konusunda ipucu vermez; `` Stil amacıyla öğeleri gruplamak için kullanılabilir ... ''. Kişisel kodlama standartlarınızı başkalarına
gerçekmiş

3
her iki durumda da, bu konuşma hattı teknik anlamda soru için yapıcı değil ve SO'daki yorumların anlamı da değil
Hashbrown

Benim için de çalışıyor. Span'dan farklı bir öğe kullanıldı.
chocolata

29

Flexbox yolu:

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

çünkü .foobir aralık display: flex-inlinedaha uygun olur
Simon Lenz

8
"Satır içi esnek" mi demek istediniz?
Tim Gerhard

5

Bağlantılar için buna ihtiyacım vardı, bu yüzden aralığı bir a-etiketi ve bir div ile sardım ve ardından span etiketinin kendisini ortaladım

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

Bunun için teşekkürler, CSS ile uğraşmaktan nefret ediyorum, cevabınıza burada rastladığımda bütün günümü bir öğeyi dikey olarak ortalamak için harcıyordum. Sen bir hayat kurtarıcısın!
Todd Nestor

5

CSS dikey merkez resmi ve metni

Dikey görüntü merkezi ve metin için bir demo oluşturdum, ayrıca firefox, chrome, safari, internet explorer 9 ve 8 üzerinde de testlerim var.

Çok kısa ve kolay css ve html, Lütfen aşağıdaki kodu kontrol edin ve çıktıyı ekran görüntüsünde bulabilirsiniz.

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

Çıktı görüntü açıklamasını buraya girin


2

bu benim için çalışıyor (Keltex de aynısını söyledi)

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

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

1

Dikey hizalı css özelliği maalesef beklediğiniz şeyi yapmaz. Bu makale , css kullanarak bir öğeyi dikey olarak hizalamanın 2 yolunu açıklar.


1

X'i aşağı itmek için padding-top'ı uygun bir değer olacak şekilde ayarlayın, ardından padding-top için sahip olduğunuz değeri yükseklikten çıkarın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.