justify-content dan align-items dalam satu kalimat
Di dalam container flex, justify-content menyebar item di sepanjang sumbu utama (melintasi baris), dan align-items menyejajarkannya di sumbu silang (naik turun di dalam baris). Keduanya dipasang di container:
Kotaknya berada di tengah ke dua arah: jaraknya sama dari tepi awal dan tepi akhir, juga dari atas dan bawah. Hapus height: 140px, maka align-items: center tidak punya apa-apa untuk dikerjakan, karena container menyusut setinggi item itu sendiri.
Semua nilai justify-content, lengkap dengan ukurannya
Setiap baris di bawah berisi tiga item yang sama dengan justify-content yang berbeda. Angka di label atas setiap baris adalah jarak yang ditinggalkan browser: sebelum item pertama, di antara item, dan setelah item terakhir.
Lebar container 420px dan item memakai 180px, jadi ada 240px ruang kosong. Ke mana ruang itu pergi:
| Nilai | Ruang kosong ditempatkan | Jarak di demo |
|---|---|---|
flex-start (dan start) | semuanya setelah item | 0 / 0 / 0 / 240 |
center | setengah sebelum, setengah setelah | 120 / 0 / 0 / 120 |
flex-end (dan end) | semuanya sebelum item | 240 / 0 / 0 / 0 |
space-between | hanya di antara item | 0 / 120 / 120 / 0 |
space-around | sama besar di kedua sisi setiap item, jadi tepi mendapat setengahnya | 40 / 80 / 80 / 40 |
space-evenly | semua jarak sama, termasuk tepi | 60 / 60 / 60 / 60 |
flex-start mengikuti arah flex, sedangkan start mengikuti arah tulisan. Keduanya hanya berbeda pada row-reverse atau column-reverse, di mana flex-start berada di ujung yang dibalik.
Semua nilai align-items
align-items bekerja melintang terhadap baris. Item di bawah punya tinggi yang berbeda-beda, jadi kamu bisa melihat apa yang dilakukan setiap nilai terhadapnya:
| Nilai | Yang terjadi di sumbu silang |
|---|---|
stretch (default) | Item tanpa tinggi yang ditetapkan memanjang untuk mengisi container |
flex-start (dan start) | Item berada di atas, dengan tingginya sendiri |
center | Item berada di tengah, dengan tingginya sendiri |
flex-end (dan end) | Item berada di bawah |
baseline | Item bergeser agar baris teks pertamanya berada di satu baseline yang sama |
Di kotak baseline, ketiga label "Ag" berdiri di satu garis meskipun yang pertama lebih besar dan yang kedua punya padding di atasnya. Nilai ini cocok untuk baris yang mencampur judul besar dengan teks kecil, atau label dengan input.
Klik untuk meratakan
Klik sel mana saja di grid 3 kali 3. Kotaknya akan pindah ke sana, dan CSS yang menempatkannya di sana ditampilkan di bawah:
Baris pada pemilih mengubah align-items, dan kolomnya mengubah justify-content. Sel di tengah adalah "center a div" yang klasik.
Di dalam kolom, keduanya bertukar
justify-content selalu mengikuti sumbu utama. Dengan flex-direction: column, sumbu utama menjadi vertikal, jadi justify-content memindahkan item naik turun dan align-items memindahkannya ke samping:
Kalau kamu tertukar, cukup tukar kedua property itu, tidak perlu menulis ulang layout-nya.
align-self dan margin auto: hanya satu item
align-self pada sebuah item menimpa align-items untuk item itu. Di flexbox tidak ada justify-self. Untuk memindahkan satu item di sepanjang sumbu utama, beri item itu margin auto, yang mengambil semua ruang kosong di sisi tersebut:
Item hijau turun ke bawah sendirian, dan item kuning terdorong ke ujung terjauh baris, sementara yang lain tetap di awal.
Kalau ada beberapa baris: align-content
align-items meratakan item di dalam barisnya. Kalau isi container terbungkus menjadi beberapa baris, align-content mengatur jarak antar baris itu sendiri, dan menerima nilai yang sama dengan justify-content. Property ini tidak berpengaruh di container nowrap, karena satu-satunya barisnya selalu mengisi tinggi container. Halaman flex-wrap menunjukkannya.
Kesalahan yang sering terjadi
- Tertukar sumbu.
justify-contentadalah arah aliran,align-itemsmelintang terhadapnya. Di dalam kolom, menengahkan secara vertikal memakaijustify-content: center. - Tidak ada ruang kosong. Item dengan
flex: 1mengambil semua ruang, jadijustify-contenttidak punya ruang untuk dibagi. Hal yang sama terjadi kalau container memakaiinline-flexdan lebarnya sama persis dengan item-itemnya. - Tidak ada tinggi untuk
align-items. Container yang setinggi isinya tidak menyisakan apa pun untuk diratakan. Tetapkanheightataumin-height. - Mencari
justify-selfdi flexbox. Di sana property itu diabaikan. Pakaimargin-inline-start: auto(ataumargin-left: auto) pada item. align-items: stretchyang tidak memanjang. Item yang punyaheightsendiri tetap memakai tinggi itu. Hapus tingginya (pakaimin-heightkalau butuh batas minimum).- Memasang property di item. Keduanya dipasang di container flex. Hanya
align-selfyang dipasang di item.
Pertanyaan yang sering diajukan
Apa perbedaan justify-content dan align-items?
justify-content membagi item di sepanjang sumbu utama, yaitu arah aliran item (horizontal untuk flex-direction: row). align-items mengatur posisinya di sepanjang sumbu silang (vertikal untuk sebuah baris). Di dalam kolom, keduanya bertukar: justify-content menjadi vertikal.
Apa perbedaan space-between, space-around, dan space-evenly?
space-between tidak memberi ruang sebelum item pertama atau setelah item terakhir, lalu membagi sisanya di antara item. space-around memberi setiap item ruang yang sama di kedua sisinya, jadi tepi hanya mendapat setengah jarak. space-evenly membuat semua jarak sama besar, termasuk di tepi.
Kenapa justify-content tidak berfungsi?
Biasanya karena tidak ada ruang kosong untuk dibagi: ada item dengan flex-grow atau flex: 1, atau container hanya selebar item-itemnya (misalnya display: inline-flex atau container yang memakai float). Periksa juga bahwa display: flex dipasang di elemen induk, bukan di item.
Kenapa align-items center tidak membuat item berada di tengah secara vertikal?
Kemungkinan tinggi container sama persis dengan tinggi isinya, jadi tidak ada ruang untuk menengahkan. Beri container flex sebuah tinggi atau min-height, dan item akan pindah ke bagian tengahnya.
Apa fungsi align-self?
align-self menimpa align-items milik container untuk satu item saja. Contohnya, align-self: flex-end pada satu child hanya memindahkan child itu ke ujung sumbu silang, sementara yang lain tetap di posisi yang diatur align-items.
Apakah ada justify-self di flexbox?
Tidak ada. Flexbox mengabaikan justify-self, karena sumbu utama dipakai bersama oleh semua item. Untuk mendorong satu item di sepanjang sumbu utama, pakai margin auto, misalnya margin-inline-start: auto. justify-self berfungsi di grid.