CSS Dikey hizalama float ile çalışmıyor


86

Nasıl kullanabilir vertical-alignyanı sıra floatiçinde divözelliklerinde? Kullanmazsam vertical-alignişler iyi gidiyor float. Ama şamandırayı kullanırsam işe yaramaz. float:rightSon div için kullanmak benim için önemli .

Aşağıdakini deniyorum, şamandırayı tüm div'lerden kaldırırsanız, o zaman iyi çalışır:

<div class="wrap">
    <div class="left">First div, float left,  has more text.</div>
    <div class="left2">Second div, float left </div>
    <div class="right">Third div, float right</div>
</div>

CSS:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    float:left;
    vertical-align: middle;  
    display:inline-block

}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua;
    float:left;
    vertical-align: middle;   
    display:inline-block
}

.right{
    width: 150px;
    background: orange;
    float:right;
    vertical-align: middle;
    display:inline-block
}

JSFiddle

Yanıtlar:


90

Satır yüksekliğini ayarlamanız gerekir.

<div style="border: 1px solid red;">
<span style="font-size: 38px; vertical-align:middle; float:left; line-height: 38px">Hejsan</span>
<span style="font-size: 13px; vertical-align:middle; float:right; line-height: 38px">svejsan</span>
<div style="clear: both;"></div>

http://jsfiddle.net/VBR5J/


32
line-heighttüm öğeler için aynı değeri ayarlarsanız vertical-align, işe yaramaz. ( jsfiddle.net/VBR5J/448 )
Éderson T. Szlachta

<button>Öğeler için çalışmaz . Bunun yerine <span>a <button>.
Green

15
Bu cevap yanlış. Dikey hizalama divtek tek öğelere değil KONTEYNER'e (the ) aittir . Doğru çözüm - dikey hizalama yeteneğine sahip elemanlar yüzen - her ikisi de koymaktır vertical-alignve line-heightkap üzerinde: <div style="border: 1px solid red; vertical-align:middle; line-height: 38px;">. Aralık vertical-align:middle; line-height: 38px;stillerinden KALDIR .
ToolmakerSteve

1
Sadece önerdiğim şeyin cevabın kemanındaki kayan aralıklar için işe yaradığını, ancak bazı öğeler için işe yaramadığını keşfettim (kayan bir radyo girişi için başarısız oldu).
ToolmakerSteve

1
@ToolmakerSteve yanlış ve bu cevap yanlış. Dikey hizalama yalnızca satır içi öğeler, satır içi bloklar veya tablo hücreleri için geçerlidir (ikincisi sadece gariptir). Bir 'float' eklemek, en elemanını bir blok eleman yapar. Yine de, satır yüksekliği kullanmak (ve dikey hizalamayı göz ardı etmek) bir çözüm olabilir.
2018

15

Düzenlendi:

Dikey hizalama CSS özelliği bir satır içi, satır içi blok veya masa-hücresi elemanının dikey hizalanmasını belirler.

Dikey hizalamayı anlamak için bu makaleyi okuyun


1
inline-blockÖğeler için de geçerlidir .
Rolf

1
Güncellenmiş. Bunu kaçırdım. Bahsettiğin için teşekkürler.
Ahsan Khurshid

4
bu bir cevap değil
Serzhan Akhmetov

Bu bağlantı soruyu cevaplayabilirken, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse yalnızca bağlantı yanıtları geçersiz hale gelebilir. - Şu kaynaktan
Utsav Patel

8

Dikey hizalama gerçekten de kayan öğelerle çalışmaz. Bunun nedeni şamandıranın, öğeyi belgenin normal akışından kaldırmasıdır. Dönüştürme, görüntülemeye dayalı olanlar gibi diğer dikey hizalama tekniklerini kullanmak isteyebilirsiniz: tablo, mutlak konumlandırma, satır yüksekliği, js (belki son çare) veya hatta düz eski html tablosu (içerik ise belki ilk seçenek aslında tablo). Bu konuda hararetli bir tartışma olduğunu göreceksiniz.

Ancak, SİZİN 3 div'lerinizi dikey olarak şu şekilde hizalayabilirsiniz:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    display:inline-block;
    vertical-align: middle; 
}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua; 
    display:inline-block;
    vertical-align: middle; 
}

.right{
    width: 150px;
    background: orange;
    display:inline-block;
    vertical-align: middle; 
}

Neden hem sabit genişliğe, ekrana ihtiyaç duyduğunuzdan emin değilim: satır içi blok ve kayan.


Çözüme nasıl ulaşılacağını göstermek için cevabınıza biraz kod ekleyebilir misiniz?
abarisone

Ayrıca, "doğru cevabı" kırmak o kadar kolay ki ... Dünya'da 19 kişinin nasıl yukarı oy verdiğini merak ediyorum.
Gabriel

3
soru "şamandıraya ihtiyacı var: son elemanın üzerinde", bu yüzden son elemanın kabın sağ tarafında olmasına ihtiyaç duyabilir. Cevabınızda bu hedefe nasıl ulaşılır?
fly.x

Güzel cevap ve ayrıca çok net! Sadece Flexbox seçeneği eksik.
Luillyfe
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.