Her biri tek cümlede justify-content ve align-items
Bir flex kapsayıcıda justify-content öğeleri ana eksen boyunca (satır boyunca) dağıtır, align-items ise onları çapraz eksen üzerinde (satırın aşağısı ve yukarısı boyunca) hizalar. İkisi de kapsayıcıya yazılır:
Kutu iki yönde de ortalanmış: başlangıç ve bitiş kenarlarına, üst ve alt kenarlara eşit uzaklıkta. height: 140px'i kaldır, align-items: center'ın yapacak bir işi kalmaz, çünkü kapsayıcı öğenin kendi yüksekliğine küçülür.
Bütün justify-content değerleri, ölçülmüş
Aşağıdaki her satır aynı üç öğe, farklı bir justify-content ile. Her satırın üstündeki etiketteki sayılar tarayıcının bıraktığı boşluklar: ilk öğeden önce, öğeler arasında ve son öğeden sonra.
Kapsayıcı 420px ve öğeler 180px kaplıyor, yani 240px boş alan var. Nereye gittiği:
| Değer | Boş alan nereye gider | Demodaki boşluklar |
|---|---|---|
flex-start (ve start) | tamamı öğelerden sonra | 0 / 0 / 0 / 240 |
center | yarısı önce, yarısı sonra | 120 / 0 / 0 / 120 |
flex-end (ve end) | tamamı öğelerden önce | 240 / 0 / 0 / 0 |
space-between | yalnızca öğeler arasına | 0 / 120 / 120 / 0 |
space-around | her öğenin iki yanına eşit, bu yüzden kenarlar yarısını alır | 40 / 80 / 80 / 40 |
space-evenly | kenarlar dahil her boşluk eşit | 60 / 60 / 60 / 60 |
flex-start flex yönünü, start ise yazı yönünü takip eder. Yalnızca row-reverse ya da column-reverse ile farklılaşırlar; orada flex-start ters çevrilmiş uçtadır.
Bütün align-items değerleri
align-items satırın karşısında çalışır. Aşağıdaki öğelerin yükseklikleri farklı, böylece her değerin onlarla ne yaptığını görebilirsin:
| Değer | Çapraz eksende ne olur |
|---|---|
stretch (varsayılan) | Yüksekliği ayarlanmamış öğeler kapsayıcıyı dolduracak şekilde büyür |
flex-start (ve start) | Öğeler kendi yüksekliklerinde üstte durur |
center | Öğeler kendi yüksekliklerinde ortalanır |
flex-end (ve end) | Öğeler altta durur |
baseline | Öğeler, metinlerinin ilk satırları tek bir taban çizgisini paylaşacak şekilde kayar |
baseline kutusunda üç "Ag" etiketi, ilki daha büyük ve ikincisinin üstünde padding olmasına rağmen tek bir çizgide duruyor. Büyük bir başlığı küçük metinle ya da bir etiketi bir input'la karıştıran bir satır için doğru değer budur.
Tıkla ve hizala
3'e 3 ızgaranın herhangi bir hücresine tıkla. Kutu oraya gider ve onu oraya koyan CSS aşağıda yazdırılır:
Seçicinin satırları align-items'ı, sütunları justify-content'i değiştirir. Ortadaki hücre klasik "div ortalama"dır.
Bir sütunda ikisi yer değiştirir
justify-content her zaman ana ekseni takip eder. flex-direction: column ile ana eksen dikeydir, bu yüzden justify-content öğeleri yukarı aşağı, align-items ise yana taşır:
Karıştırırsan düzeni baştan yazmak yerine iki özelliğin yerini değiştir.
align-self ve auto margin'ler: yalnızca tek öğe
Bir öğedeki align-self, o öğe için align-items'ı ezer. Flexbox'ta justify-self yoktur; tek bir öğeyi ana eksen boyunca taşımak için ona o taraftaki bütün boş alanı alan bir auto margin ver:
Yeşil öğe tek başına alta iniyor, kehribar rengi öğe ise satırın en sonuna itiliyor; diğerleri başta kalıyor.
Birden fazla satır olduğunda: align-content
align-items öğeleri kendi satırlarının içinde hizalar. Bir kapsayıcı birkaç satıra kırıldığında align-content satırların kendisini aralar ve justify-content ile aynı değerleri alır. Tek satırı her zaman kapsayıcının yüksekliğini dolduran nowrap bir kapsayıcıda hiçbir şey yapmaz. Onu flex-wrap sayfası gösteriyor.
Sık yapılan hatalar
- Eksenleri karıştırmak.
justify-contentakış yönüdür,align-itemsonun karşısıdır. Bir sütunda dikey ortalamajustify-content: center'dır. - Boş alan yok.
flex: 1olan bir öğe bütün alanı alır, bu yüzdenjustify-content'in dağıtacak bir şeyi kalmaz. Kapsayıcıinline-flexolup tam olarak öğeleri kadar geniş olduğunda da aynısı olur. align-itemsiçin yükseklik yok. İçeriği kadar uzun bir kapsayıcı hizalanacak bir şey bırakmaz. Birheightya damin-heightver.- Flexbox'ta
justify-selfaramak. Orada yok sayılır. Öğeyemargin-inline-start: auto(ya damargin-left: auto) ver. - Esnemeyen
align-items: stretch. Kendiheightdeğeri olan bir öğe onu korur. Yüksekliği kaldır (bir minimum gerekiyorsamin-heightkullan). - Özellikleri öğelere vermek. İkisi de flex kapsayıcıya yazılır. Bir öğeye yalnızca
align-selfyazılır.
Sıkça Sorulan Sorular
justify-content ile align-items arasındaki fark nedir?
justify-content öğeleri ana eksen, yani aktıkları yön boyunca dağıtır (flex-direction: row için yatay). align-items ise onları çapraz eksen boyunca konumlandırır (bir satır için dikey). Bir sütunda ikisi yer değiştirir: justify-content dikey olur.
space-between, space-around ve space-evenly arasındaki fark nedir?
space-between ilk öğeden önce ve son öğeden sonra boşluk bırakmaz, geri kalanı öğeler arasında paylaştırır. space-around her öğeye iki yanında eşit boşluk verir, bu yüzden kenarlar yarım boşluk alır. space-evenly kenarlar dahil her boşluğu eşit yapar.
justify-content neden çalışmıyor?
Genellikle dağıtılacak boş alan yoktur: bir öğede flex-grow ya da flex: 1 vardır ya da kapsayıcı yalnızca öğeleri kadar geniştir (örneğin display: inline-flex ya da float edilmiş bir kapsayıcı). Ayrıca display: flex'in öğelere değil ebeveyne verildiğini kontrol et.
align-items center neden dikeyde ortalamıyor?
Kapsayıcı büyük olasılıkla tam olarak içeriği kadar uzundur, bu yüzden içinde ortalanacak bir şey yoktur. Flex kapsayıcıya bir yükseklik ya da min-height ver, öğeler ortasına gider.
align-self ne işe yarar?
align-self, tek bir öğe için kapsayıcının align-items değerini ezer. Örneğin bir çocuğa verilen align-self: flex-end, diğerleri align-items'ın koyduğu yerde kalırken yalnızca o çocuğu çapraz eksenin sonuna taşır.
Flexbox'ta justify-self var mı?
Hayır. Flexbox justify-self'i yok sayar, çünkü ana eksen bütün öğeler tarafından paylaşılır. Tek bir öğeyi ana eksen boyunca itmek için margin-inline-start: auto gibi bir auto margin kullan. justify-self grid'de çalışır.