Menu

Cara Membuat Div di Tengah dengan CSS: Semua Metode

Semua cara menengahkan div secara horizontal, vertikal, atau keduanya: flexbox, grid, margin auto, posisi absolute dengan transform, inset dengan margin auto, dan align-content. Setiap metode berjalan langsung dan mengukur hasil penengahannya sendiri, lengkap dengan tabel kapan memakai yang mana.

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

Jawaban singkatnya

Untuk menengahkan div secara horizontal dan vertikal di dalam induknya, jadikan induknya grid dan tengahkan isinya:

.parent {
  display: grid;
  place-items: center;
  min-height: 200px; /* the parent needs room to center in */
}

Cara ini berfungsi untuk anak berukuran berapa pun dan tidak butuh apa-apa pada anaknya. Di bawah ini ada enam metode berdampingan. Setiap kotak mengukur dirinya sendiri setelah tampil dan mencetak seberapa jauh titik tengahnya dari titik tengah induk:

Keenamnya melaporkan 0px di kedua sumbu (border 1px pada panggungnya sama di setiap sisi, jadi tidak menggeser titik tengah). Ubah lebar atau teks sebuah kotak lalu jalankan lagi: metode yang tidak bergantung pada ukuran tetap akan tetap di 0.

Metode mana yang dipakai

MetodeMenengahkanAnak butuh ukuran tetap?Paling cocok untuk
Grid place-items: centerKedua sumbuTidakPilihan default: satu anak di dalam kotak
Flexbox justify-content + align-itemsKedua sumbuTidakSatu baris atau kolom item, ditengahkan sebagai kelompok
margin: auto di induk flex atau gridKedua sumbuTidakMenengahkan satu item sementara saudaranya ditata dengan cara lain
margin: 0 autoHorizontal sajawidth atau max-widthWadah halaman, artikel, form di alur normal
Absolute + translate(-50%, -50%)Kedua sumbuTidakOverlay, badge, dan modal di atas konten lain
Absolute + inset: 0; margin: autoKedua sumbuYa, lebar dan tinggiDialog berukuran tetap
align-content: center pada blockVertikalTidakPenengahan vertikal tanpa mengubah display induknya

Metode 1: flexbox

Flexbox menengahkan di dua sumbu dengan dua properti. justify-content mengurus sumbu utama (horizontal pada baris), dan align-items mengurus sumbu silang:

Dengan beberapa anak, flexbox menengahkan mereka sebagai satu kelompok sambil tetap dalam satu baris. Di sinilah flexbox lebih unggul dari grid, yang akan menumpuk ketiga item dalam satu kolom di tengah. Halaman justify-content membahas setiap nilai perataan.

Metode 2: grid

place-items: center adalah singkatan dari align-items: center ditambah justify-items: center. Pada grid container dengan satu anak, properti ini menengahkan anak itu ke dua arah:

Memakai min-height alih-alih height membuat induk bisa membesar jika kartunya lebih tinggi dari 180px, bukannya kartu meluber keluar.

Metode 3: margin: 0 auto (horizontal)

Elemen block dengan lebar yang lebih kecil dari wadahnya bisa ditengahkan secara horizontal dengan margin samping otomatis. Browser membagi ruang kosong sama rata ke dua sisi:

Kotak kedua mengisi seluruh lebar, jadi tidak ada ruang kosong dan tidak ada yang bergeser. Itulah alasan umum margin: 0 auto "tidak berfungsi". Cara ini juga hanya menengahkan secara horizontal di alur normal; margin vertikal auto menjadi 0 di sana. Tetapi di dalam induk flex atau grid, margin: auto menengahkan ke dua arah, yaitu kotak ketiga di perbandingan di atas.

Metode 4: posisi absolute dan transform

Saat elemen harus berada di atas konten lain (badge di atas foto, modal di atas halaman), posisikan secara absolute di 50% lalu tarik kembali sebesar setengah ukurannya sendiri:

top: 50%; left: 50% menaruh pojok kiri atas elemen di titik tengah. Persentase di dalam translate() mengacu pada ukuran elemen itu sendiri, jadi -50% menggesernya kembali sebesar setengah lebar dan tingginya, berapa pun ukurannya. Induknya harus diposisikan (position: relative), kalau tidak elemen akan ditengahkan di halaman. Pemosisian dibahas di halaman position.

Variasi untuk elemen yang ukurannya diketahui: position: absolute; inset: 0; margin: auto; ditambah width dan height. Margin otomatis membagi ruang di keempat sisi.

Metode 5: align-content pada block biasa

align-content: center sekarang juga berfungsi pada block container biasa, tidak hanya flex dan grid. Properti ini menengahkan konten secara vertikal tanpa mengubah cara anak-anaknya ditata:

.parent {
  min-height: 200px;
  align-content: center;   /* vertical centering, still display: block */
}
.child {
  max-width: 300px;
  margin-inline: auto;     /* horizontal centering */
}

Properti ini didukung di Chrome, Firefox, dan Safari versi saat ini. Browser lama mengabaikannya, jadi pakai grid jika kamu harus mendukung browser lama.

Menengahkan di seluruh layar

Untuk menengahkan dialog di viewport tanpa terpengaruh scroll, gabungkan lapisan layar penuh yang fixed dengan grid:

.overlay {
  position: fixed;
  inset: 0;                     /* covers the viewport */
  display: grid;
  place-items: center;
  background: rgb(0 0 0 / 50%);
}

Untuk menengahkan konten seluruh halaman secara vertikal, pakai min-height: 100dvh pada induknya, bukan 100vh: di ponsel, 100vh ikut menghitung area di belakang toolbar browser, sehingga "tengah"-nya terletak terlalu rendah.

Menengahkan teks adalah pekerjaan lain

Semua cara di atas menengahkan kotak. Untuk menengahkan teks di dalam kotak, pakai text-align: center padanya, seperti yang ditunjukkan di halaman teks rata tengah HTML. Sering kali kamu butuh keduanya: grid untuk menengahkan kartu, dan text-align untuk menengahkan baris-baris di dalamnya.

Kesalahan umum

  • Induk tanpa tinggi. Penengahan vertikal butuh ruang kosong; induk yang menyusut mengikuti isinya tidak punya ruang itu.
  • margin: 0 auto pada block selebar penuh. Beri width atau max-width lebih dulu.
  • margin: auto untuk menengahkan vertikal di alur normal. Margin auto vertikal bernilai 0 di sana; pakai flex atau grid.
  • Penengahan absolute tanpa induk yang diposisikan. Elemen ditengahkan di halaman, bukan di kotak.
  • align-items: center pada anak. Properti perataan ditaruh di induk (flex atau grid container), kecuali margin: auto dan align-self.
  • text-align: center untuk menengahkan block. Properti ini menengahkan konten inline (teks, gambar, anak inline-block), bukan anak berupa block.

Pertanyaan yang sering diajukan

Bagaimana cara membuat div di tengah secara horizontal dan vertikal?

Jadikan induknya grid dan tengahkan isinya: .parent { display: grid; place-items: center; }. Versi flexbox-nya adalah display: flex; justify-content: center; align-items: center;. Dengan cara mana pun, induknya butuh tinggi yang lebih besar dari div.

Bagaimana cara membuat div di tengah secara horizontal saja?

Beri lebar dan margin kiri kanan otomatis: .box { width: 300px; margin: 0 auto; } (atau max-width untuk blok yang responsif). margin-inline: auto adalah hal yang sama dalam properti logis.

Kenapa margin: 0 auto tidak membuat div saya ke tengah?

Div itu tidak punya lebar yang lebih kecil dari wadahnya, jadi tidak ada ruang kosong untuk dibagi (secara default, sebuah block mengisi lebar penuh). Atur width atau max-width. Cara ini juga tidak berpengaruh pada elemen inline dan tidak pernah menengahkan secara vertikal di alur normal.

Kenapa div saya tidak mau ke tengah secara vertikal?

Tinggi induknya hanya setinggi isinya, jadi tidak ada ruang lebih untuk menengahkan. Beri induk sebuah tinggi (atau min-height), lalu pakai penengahan dengan grid atau flexbox.

Apa cara paling mudah membuat div di tengah?

display: grid; place-items: center; pada induknya: dua deklarasi, kedua sumbu, anak berukuran berapa pun. Pakai flexbox jika induknya juga menata item lain dalam satu baris.

Bagaimana cara membuat teks di tengah div?

Pakai text-align: center pada div untuk teks dan konten inline. Menengahkan div itu sendiri dan menengahkan teks di dalamnya adalah dua pekerjaan yang berbeda.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai