Esnek bir kabın ana eksenini ve çapraz eksenini düşünün:
Kaynak: W3C
Esnek öğeleri ana eksen boyunca hizalamak için bir özellik vardır:
Esnek öğeleri çapraz eksen boyunca hizalamak için üç özellik vardır:
Yukarıdaki görüntüde, ana eksen yatay ve çapraz eksen dikeydir. Bunlar bir esnek kabın varsayılan yönleridir.
Bununla birlikte, bu yönler flex-direction
mülkle kolayca değiştirilebilir .
/* main axis is horizontal, cross axis is vertical */
flex-direction: row;
flex-direction: row-reverse;
/* main axis is vertical, cross axis is horizontal */
flex-direction: column;
flex-direction: column-reverse;
(Çapraz eksen her zaman ana eksene diktir.)
Eksenlerin nasıl çalıştığını tarif etmemdeki amacım, her iki yönde de özel bir şey olmadığıdır. Ana eksen, çapraz eksen, ikisi de önem açısından eşittir flex-direction
ve ileri geri geçişi kolaylaştırır.
Öyleyse çapraz eksen neden iki ek hizalama özelliği alıyor?
Ana eksen için neden tek bir mülkte birleştirilir align-content
ve align-items
birleştirilir?
Ana eksen neden bir justify-self
özellik almıyor ?
Bu özelliklerin yararlı olacağı senaryolar:
esnek kabın köşesine esnek bir eşya yerleştirme
#box3 { align-self: flex-end; justify-self: flex-end; }
bir grup esnek öğeyi sağa hizala (
justify-content: flex-end
) ancak ilk öğeyi sola hizala (justify-self: flex-start
)Bir grup gezinme öğesi ve bir logo içeren bir başlık bölümü düşünün. İle
justify-self
logo nav ürün sağında kalırken sola hizalanmış ve farklı ekran boyutlarına sorunsuz her şey ayarlanabilece¤inden ( "esner") olabilir.üç esnek öğeden oluşan bir satırda, orta öğeyi kabın ortasına (
justify-content: center
) yapıştırın ve bitişik öğeleri kap kenarlarına (justify-self: flex-start
vejustify-self: flex-end
) hizalayın .Bitişik öğeler farklı genişliklere sahipse, değerler
space-around
vespace-between
onjustify-content
özelliğinin orta öğeyi kap etrafında ortalamayacağını unutmayın.
Bu yazı gibi, hiç söz yoktur justify-self
ya justify-items
içinde FlexBox spec .
Bununla birlikte, W3C'nin tüm kutu modellerinde kullanılmak üzere ortak bir hizalama özellikleri seti oluşturmak için tamamlanmamış önerisi olan CSS Kutusu Hizalama Modülünde , aşağıdakiler vardır:
Kaynak: W3C
Bunu fark edeceksiniz justify-self
ve justify-items
düşünülüyor ... ama flexbox için değil .
Ana soruyu tekrarlayarak bitireceğim:
Neden "bloklama ögeleri" ve "bloklama-kendi kendine" özellikleri yoktur?
justify-content: flex-start
, bu yüzden öğeler başlangıçta | abcd | gibi kalabalıktır. justify-self: [anything]
'B' öğesini oraya
justify-self
çalışmayı beklersiniz ? auto
Esnek kalemler üzerinde zaten marjlardan çok farklı değil diyebilirim . İkinci örneğinizde, justify-self: flex-end
d öğesinde onu uzak kenara taşır. Bu, kendi içinde, auto
marjların zaten yapabileceği harika bir özellik olurdu . Bir gösteri ile bir cevap gönderdim.
justify-content
ve justify-self
belirtildiği gibi, böylece çatışma içeren vakalar (sorduğum senaryolar gibi) açıkça ve mantıklı bir şekilde tanımlanmıştır. Burada cevabımda belirttiğim gibi , değerden bağımsız olarak boyutlandırılan daha büyük bir kutudaki{justify|align}-self
öğeleri hizalamakla ilgilidir - ve ana eksende, esnek bir öğenin hizalanması için böyle bir kutu yoktur. {justify|align}-self
justify-self
ve justify-content
etkileşime gireceğinizi soruyordum . Otomatik kenar boşlukları hiçbir şekilde etkileşime girmezjustify-content
- justify-content
kullanma şansı elde etmeden önce tüm ambalaj alanını çalarlar . Dolayısıyla, otomatik marjlar bunun nasıl çalışacağı konusunda gerçekten iyi bir analog değildir.
justify-self
Esnek bir ürün için nasıl çalışmayı beklersiniz ? Etrafında dağıtmak için ekstra alana sahip a, b, c, d öğeleriniz olduğunu ve esnek kabın olduğunu varsayalımjustify-content: space-between
, böylece | abcd |justify-self: center
Oradaki 'b' öğesine örneğin `` justify-self: flex-end`'i eklemek ne anlama gelir ? Nereye gitmesini beklersiniz? (Buradaki yanıtlardan birinde bazı demolar görüyorum, ancak genel olarak işe yarayacağına dair net bir yol göremiyorum.)