Menu

CSS justify-content dan align-items: Semua Nilai

justify-content mengatur posisi item flex di sepanjang sumbu utama, dan align-items mengaturnya di sepanjang sumbu silang. Lihat semua nilainya berdampingan, lengkap dengan ukurannya, grid perataan yang bisa diklik, align-self, dan alasan kenapa justify-content kadang tidak berpengaruh apa-apa.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

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:

NilaiRuang kosong ditempatkanJarak di demo
flex-start (dan start)semuanya setelah item0 / 0 / 0 / 240
centersetengah sebelum, setengah setelah120 / 0 / 0 / 120
flex-end (dan end)semuanya sebelum item240 / 0 / 0 / 0
space-betweenhanya di antara item0 / 120 / 120 / 0
space-aroundsama besar di kedua sisi setiap item, jadi tepi mendapat setengahnya40 / 80 / 80 / 40
space-evenlysemua jarak sama, termasuk tepi60 / 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:

NilaiYang 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
centerItem berada di tengah, dengan tingginya sendiri
flex-end (dan end)Item berada di bawah
baselineItem 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-content adalah arah aliran, align-items melintang terhadapnya. Di dalam kolom, menengahkan secara vertikal memakai justify-content: center.
  • Tidak ada ruang kosong. Item dengan flex: 1 mengambil semua ruang, jadi justify-content tidak punya ruang untuk dibagi. Hal yang sama terjadi kalau container memakai inline-flex dan lebarnya sama persis dengan item-itemnya.
  • Tidak ada tinggi untuk align-items. Container yang setinggi isinya tidak menyisakan apa pun untuk diratakan. Tetapkan height atau min-height.
  • Mencari justify-self di flexbox. Di sana property itu diabaikan. Pakai margin-inline-start: auto (atau margin-left: auto) pada item.
  • align-items: stretch yang tidak memanjang. Item yang punya height sendiri tetap memakai tinggi itu. Hapus tingginya (pakai min-height kalau butuh batas minimum).
  • Memasang property di item. Keduanya dipasang di container flex. Hanya align-self yang 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.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai