Pertimbangkan sumbu utama dan sumbu silang wadah fleksibel:
Sumber: W3C
Untuk menyelaraskan item fleksibel di sepanjang sumbu utama ada satu properti:
Untuk menyelaraskan item fleksibel di sepanjang sumbu silang ada tiga properti:
Pada gambar di atas, sumbu utama adalah horisontal dan sumbu silang vertikal. Ini adalah arah default dari wadah fleksibel.
Namun, petunjuk arah ini dapat dengan mudah dipertukarkan dengan flex-direction
properti.
/* 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;
(Sumbu silang selalu tegak lurus terhadap sumbu utama.)
Maksud saya dalam mendeskripsikan bagaimana kerja sumbu adalah bahwa sepertinya tidak ada yang istimewa dari kedua arah. Sumbu utama, sumbu silang, keduanya sama dalam hal kepentingan dan flex-direction
membuatnya mudah untuk bolak-balik.
Jadi mengapa sumbu silang mendapatkan dua properti pelurusan tambahan?
Mengapa align-content
dan align-items
dikonsolidasikan ke dalam satu properti untuk poros utama?
Mengapa sumbu utama tidak mendapatkan justify-self
properti?
Skenario di mana properti ini akan berguna:
menempatkan item fleksibel di sudut wadah fleksibel
#box3 { align-self: flex-end; justify-self: flex-end; }
membuat grup item fleksibel rata-rata (
justify-content: flex-end
) tetapi minta item pertama rata kiri (justify-self: flex-start
)Pertimbangkan bagian tajuk dengan sekelompok item nav dan logo. Dengan
justify-self
logo dapat disejajarkan ke kiri sementara item nav tetap paling kanan, dan semuanya menyesuaikan dengan lancar ("flexes") ke ukuran layar yang berbeda.dalam deretan tiga item fleksibel, tempelkan item tengah ke tengah wadah (
justify-content: center
) dan sejajarkan item yang berdekatan ke tepi wadah (justify-self: flex-start
danjustify-self: flex-end
).Perhatikan bahwa nilai-nilai
space-around
danspace-between
padajustify-content
properti tidak akan menjaga item tengah berpusat sekitar wadah jika item yang berdekatan memiliki lebar yang berbeda.
Pada tulisan ini, tidak ada disebutkan justify-self
atau justify-items
dalam spesifikasi flexbox .
Namun, dalam Modul Alignment Kotak CSS , yang merupakan proposal W3C yang belum selesai untuk membangun seperangkat properti penyelarasan yang umum untuk digunakan di semua model kotak, ada ini:
Sumber: W3C
Anda akan memperhatikan itu justify-self
dan justify-items
sedang dipertimbangkan ... tetapi tidak untuk flexbox .
Saya akan mengakhiri dengan mengulangi pertanyaan utama:
Mengapa tidak ada properti "justify-items" dan "justify-self"?
justify-content: flex-start
, jadi barang-barang ramai di awal seperti | abcd |. Apa yang Anda harapkan untuk dilakukan, jika Anda memakai justify-self: [anything]
item 'b' di sana?)
justify-self
untuk bekerja untuk item fleksibel? Saya akan mengatakan tidak jauh berbeda dari auto
margin yang sudah bekerja pada item fleksibel. Dalam contoh kedua Anda, justify-self: flex-end
pada item d akan memindahkannya ke ujung. Itu sendiri akan menjadi fitur hebat, yang auto
sudah bisa dilakukan margin. Saya mengirim jawaban dengan demonstrasi.
justify-content
dan justify-self
ditentukan, sehingga kasus dengan konflik (seperti skenario yang saya tanyakan) didefinisikan dengan jelas & masuk akal. Seperti yang saya catat dalam jawaban saya di sini, {justify|align}-self
adalah tentang menyelaraskan item dalam kotak yang lebih besar yang berukuran secara terpisah dari {justify|align}-self
nilai - dan tidak ada kotak seperti itu, pada sumbu utama, untuk item fleksibel yang akan disejajarkan.
justify-self
dan justify-content
akan berinteraksi, dalam kasus di mana mereka bertentangan (seperti skenario yang saya paparkan). Margin otomatis sama sekali tidak berinteraksi justify-content
sama sekali - mereka mencuri semua ruang pengepakan sebelum justify-content
mendapat kesempatan untuk menggunakannya. Jadi, margin otomatis tidak benar-benar analog untuk bagaimana ini akan bekerja.
justify-self
bisa bekerja untuk item fleksibel? Misalkan Anda memiliki item a, b, c, d dengan ruang ekstra untuk mendistribusikan di sekitar mereka, dan wadah fleksibel memilikijustify-content: space-between
, sehingga mereka berakhir seperti | abcd |. Apa artinya menambahkan misalnyajustify-self: center
atau 'justify-self: flex-end` hanya ke item' b 'di sana? Ke mana Anda mengharapkannya? (Saya melihat beberapa demo di salah satu jawaban di sini, tetapi saya tidak melihat cara yang jelas bahwa itu akan berhasil secara umum.)