Flexbox'ta Öğeleri Dikey ve Yatay Olarak Ortalama
Aşağıda iki genel merkezleme çözümü verilmiştir.
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ış div'lerin yüksekliği, değişken, tanımsız, bilinmeyen, her neyse olabilir. Ortalanmış div'lerin yüksekliği önemli değil.
İşte her ikisi için de HTML:
<div id="container"><!-- flex container -->
<div class="box" id="bluebox"><!-- flex item -->
<p>DIV #1</p>
</div>
<div class="box" id="redbox"><!-- flex item -->
<p>DIV #2</p>
</div>
</div>
CSS (dekoratif stiller hariç)
Esnek öğeler dikey olarak istiflendiğinde:
#container {
display: flex; /* establish flex container */
flex-direction: column; /* make main axis vertical */
justify-content: center; /* center items vertically, in this case */
align-items: center; /* center items horizontally, in this case */
height: 300px;
}
.box {
width: 300px;
margin: 5px;
text-align: center; /* will center text in <p>, which is not a flex item */
}
DEMO
Esnek öğeler yatay olarak istiflendiğinde:
flex-direction
Kuralı yukarıdaki koddan ayarlayın .
#container {
display: flex;
flex-direction: row; /* make main axis horizontal (default setting) */
justify-content: center; /* center items horizontally, in this case */
align-items: center; /* center items vertically, in this case */
height: 300px;
}
DEMO
Esnek öğelerin içeriğini merkezleme
Bir kapsamı esnek biçimlendirme bağlamda bir ebeveyn-çocuk ilişkisine sınırlıdır. Çocukların ötesindeki esnek bir konteynerin torunları, esnek düzene katılmazlar ve esnek özellikleri göz ardı ederler. Esasen, esnek özellikler çocukların ötesinde kalıtsal değildir.
Bu nedenle, çocuğa esnek özellikler uygulamak için her zaman display: flex
veya display: inline-flex
bir üst öğeye uygulamanız gerekir .
Esnek bir öğede bulunan metni veya diğer içeriği dikey ve / veya yatay olarak ortalamak için öğeyi (iç içe) bir esnek kap yapın ve merkezleme kurallarını tekrarlayın.
.box {
display: flex;
justify-content: center;
align-items: center; /* for single line flex container */
align-content: center; /* for multi-line flex container */
}
Daha fazla ayrıntı burada: Bir esnek kutunun içindeki metni dikey olarak hizalamak nasıl?
Alternatif olarak, margin: auto
esnek öğenin içerik öğesine başvurabilirsiniz .
p { margin: auto; }
Esnek auto
kenar boşlukları hakkında bilgi edinin : Esnek Öğeleri Hizalama Yöntemleri (bkz. Kutu # 56).
Birden çok esnek öğeyi merkezleme
Esnek bir konteynerin birden fazla çizgisi varsa (sarma nedeniyle) align-content
özellik, eksenler arası hizalama için gerekli olacaktır.
Spec'ten:
8.4. Flex Hatları Paketleme: align-content
mülkiyet
align-content
Esnek kapsayıcı içindeki bir esnek kabın hatları hizalar mülkiyet zaman nasıl benzer çapraz eksende fazladan bir boşluk vardır justify-content
ana ekseni içinde hizalar ürüne.
Bu özelliğin tek satırlı bir esnek kap üzerinde hiçbir etkisi yoktur.
Daha fazla ayrıntı burada: Esnek sarma, hizalama-benlik, hizalama öğeleri ve hizalama içeriği ile nasıl çalışır?
Tarayıcı desteği
Flexbox, IE <10 hariç tüm büyük tarayıcılar tarafından desteklenir . Safari 8 ve IE10 gibi bazı yeni tarayıcı sürümleri satıcı önekleri gerektirir . Ön ek eklemenin hızlı bir yolu için Autoprefixer kullanın . Bu cevapta daha fazla ayrıntı .
Eski tarayıcılar için merkezleme çözümü
CSS tablosu ve konumlandırma özelliklerini kullanan alternatif bir merkezleme çözümü için şu cevaba bakın: https://stackoverflow.com/a/31977476/3597276