Daha
Flexbox: yatay ve dikey olarak ortalayın
Flexbox kullanarak div'i yatay ve dikey olarak kapsayıcı içinde nasıl ortalayabilirsiniz? Aşağıdaki örnekte, yatay olarak ortalanmış olan her sayının birbirinin altında (satırlarda) olmasını istiyorum.
.flex-container {
padding: 0;
margin: 0;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
}
row {
width: 100%;
}
.flex-item {
background: tomato;
padding: 5px;
width: 200px;
height: 150px;
margin: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
<div class="flex-container">
<div class="row">
<span class="flex-item">1</span>
</div>
<div class="row">
<span class="flex-item">2</span>
</div>
<div class="row">
<span class="flex-item">3</span>
</div>
<div class="row">
<span class="flex-item">4</span>
</div>
</div>
579
3
Sanırım aşağıdaki gibi bir şey istiyorsunuz.
Demoyu görmek için: http://jsfiddle.net/audetwebdesign/tFscL/
Yükseklik ve üst/alt dolgunun düzgün çalışmasını istiyorsanız
.flex-item
öğeleriniz blok düzeyinde (span
yerinediv
) olmalıdır.Ayrıca,
.row
üzerinde, genişliği100%
yerineauto
olarak ayarlayın..flex-container` özelliklerinizde sorun yok.
.row
un görünüm portunda dikey olarak ortalanmasını istiyorsanız,
htmlve
bodyiçin %100 yükseklik atayın ve ayrıca
body` kenar boşluklarını sıfırlayın.Dikey hizalama etkisini görmek için
.flex-container
ın bir yüksekliğe ihtiyacı olduğunu unutmayın, aksi takdirde konteyner içeriği içine almak için gereken minimum yüksekliği hesaplar, bu da bu örnekte görünüm portu yüksekliğinden daha azdır.Dipnot: flex-flow
,
flex-direction,
flex-wrapözellikleri bu tasarımın uygulanmasını kolaylaştırabilirdi. Bence
.row` konteynırına, elemanların etrafına bazı şekillendirmeler (arka plan resmi, kenarlıklar vb.) eklemek istemediğiniz sürece ihtiyaç yoktur.Yararlı bir kaynak: http://demo.agektmr.com/flexbox/
Flexbox'ta Öğeler Dikey ve Yatay Olarak Nasıl Ortalanır?
Aşağıda iki genel merkezleme çözümü bulunmaktadır.
Biri dikey olarak hizalanmış esnek öğeler için (
flex-direction: column
) ve diğeri yatay olarak hizalanmış esnek öğeler için (flex-direction: row
).Her iki durumda da ortalanmış divlerin yüksekliği değişken, tanımsız, bilinmeyen, her neyse olabilir. Ortalanmış divlerin yüksekliği önemli değildir.
İşte her ikisi için de HTML:
CSS (dekoratif stiller hariç)
Esnek öğeler dikey olarak istiflendiğinde:
[DEMO](http://jsfiddle.net/8o29y7pd/)
Esnek öğeler yatay olarak istiflendiğinde:
Yukarıdaki koddan
flex-direction
kuralını ayarlayın.[DEMO](http://jsfiddle.net/8o29y7pd/3/)
Esnek öğelerin içeriğini ortalamak
Esnek biçimlendirme bağlamının*](https://www.w3.org/TR/css-flexbox-1/#flex-containers) kapsamı, ebeveyn-çocuk ilişkisiyle sınırlıdır. Bir flex konteynerinin alt öğelerinin ötesindeki torunları flex düzenine katılmaz ve flex özelliklerini yok sayar. Esasen, flex özellikleri alt öğelerin ötesinde miras alınamaz.
Bu nedenle, flex özelliklerini çocuğa uygulamak için her zaman bir üst öğeye
display: flex
veyadisplay: inline-flex
uygulamanız gerekecektir.Bir flex öğesinde bulunan metni veya diğer içeriği dikey ve/veya yatay olarak ortalamak için, öğeyi (iç içe) bir flex konteyner haline getirin ve merkezleme kurallarını tekrarlayın.
Daha fazla ayrıntı için: https://stackoverflow.com/q/25311541/3597276
Alternatif olarak, esnek öğenin içerik öğesine
margin: auto
uygulayabilirsiniz.Flex
auto
marjları hakkında buradan bilgi edinin: Flex Öğelerini Hizalama Yöntemleri (bkz. kutu#56).Birden fazla esnek öğe satırını ortalamak
Bir flex konteyner birden fazla satıra sahip olduğunda (sarma nedeniyle)
align-content
özelliği çapraz eksen hizalaması için gerekli olacaktır.Spesifikasyondan:
Daha fazla ayrıntı için: https://stackoverflow.com/q/42613359/3597276
Tarayıcı desteği
Flexbox, [IE < 10 hariç] tüm büyük tarayıcılar tarafından desteklenmektedir (http://caniuse.com/#search=flex). Safari 8 ve IE10 gibi bazı yeni tarayıcı sürümleri [satıcı önekleri] gerektirir(https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix). Önekleri eklemenin hızlı bir yolu için Autoprefixer kullanın. Daha fazla ayrıntı bu yanıt.
Eski tarayıcılar için merkezleme çözümü
CSS tablo ve konumlandırma özelliklerini kullanan alternatif bir merkezleme çözümü için şu yanıta bakın: https://stackoverflow.com/a/31977476/3597276
Önemli tarayıcılara özgü nitelikleri kullanmayı unutmayın:
align-items: center; -->
justify-content: center; -->
Flex'i daha iyi anlamak için bu iki bağlantıyı okuyabilirsiniz: http://css-tricks.com/almanac/properties/j/justify-content/ ve http://ptb2.me/flexbox/
İyi şanslar.