Layouting dengan Utility Tailwind
Bangun layout yang kompleks dengan mudah! Pelajari cara menggunakan utility classes Tailwind CSS untuk menerapkan Flexbox dan Grid, mengatur perataan, urutan, dan celah antar elemen.
Ngatur Tata Letak Kayak Pro: Flexbox & Grid Versi Tailwind CSS!
Udah jago ngasih style dasar pake utility Tailwind? Keren! Sekarang, gimana caranya kita nyusun elemen-elemen itu biar tampil rapi di halaman? Entah itu mau dijejerin horizontal, vertikal, atau bahkan dibikin jadi kisi-kisi (grid) yang kompleks.
Nah, kamu pasti inget kan sama "superhero" layouting di CSS murni: Flexbox dan CSS Grid? Kabar baiknya, Tailwind CSS nyediain utility class yang super intuitif buat ngaktifin dan ngontrol Flexbox dan Grid ini langsung dari HTML-mu! Gak perlu lagi nulis banyak properti di file CSS terpisah buat layout dasar.
1. Display Utilities: "Sifat" Dasar Elemen ala Tailwind
Sebelum masuk ke Flexbox atau Grid, inget lagi soal properti display
. Tailwind punya utility buat ini:
block
: Bikin elemen jadidisplay: block;
(mulai baris baru, lebar penuh).inline-block
: Bikin elemen jadidisplay: inline-block;
(sejajar tapi bisa diatur width/height).inline
: Bikin elemen jadidisplay: inline;
(sejajar, lebar sesuai konten).hidden
: Sama kayakdisplay: none;
(elemen ilang total dari layout).flex
: Nah, ini buat ngaktifin Flexbox Container! Sama kayakdisplay: flex;
.inline-flex
: Bikin Flex Container yang sifatnya inline.grid
: Ini buat ngaktifin Grid Container! Sama kayakdisplay: grid;
.inline-grid
: Bikin Grid Container yang sifatnya inline.- Dan ada beberapa lagi (
table
,flow-root
, dll. yang lebih jarang dipake pemula).
Kamu tinggal tambahin class ini ke elemen parent yang mau kamu jadiin Flex atau Grid Container.
<div class="flex ..."> <!-- Ini jadi Flex Container -->
<!-- Anak-anaknya otomatis jadi Flex Items -->
</div>
<div class="grid ..."> <!-- Ini jadi Grid Container -->
<!-- Anak-anaknya otomatis jadi Grid Items -->
</div>
<span class="block bg-blue-200 p-2">Span ini jadi kayak Div</span>
<div class="inline bg-red-200 p-2">Div ini jadi kayak Span</div>
2. Flexbox Utilities: Ngatur Item Satu Dimensi Jadi Gampang!
Tailwind bikin pake Flexbox jadi kerasa alami banget. Sebagian besar properti Flexbox Container dan Flex Item punya padanan utility class-nya.
a. Untuk Flex Container (Elemen Parent)
-
flex-row
:flex-direction: row;
(default kalau kamu cuma nulisflex
). Item dijejer horizontal. -
flex-row-reverse
:flex-direction: row-reverse;
-
flex-col
:flex-direction: column;
Item dijejer vertikal. -
flex-col-reverse
:flex-direction: column-reverse;
-
flex-wrap
:flex-wrap: wrap;
(Item boleh turun baris). -
flex-wrap-reverse
:flex-wrap: wrap-reverse;
-
flex-nowrap
:flex-wrap: nowrap;
(Default, item dipaksa satu baris). -
justify-start
:justify-content: flex-start;
-
justify-end
:justify-content: flex-end;
-
justify-center
:justify-content: center;
-
justify-between
:justify-content: space-between;
-
justify-around
:justify-content: space-around;
-
justify-evenly
:justify-content: space-evenly;
-
items-start
:align-items: flex-start;
-
items-end
:align-items: flex-end;
-
items-center
:align-items: center;
-
items-baseline
:align-items: baseline;
-
items-stretch
:align-items: stretch;
(Default). -
content-start
,content-end
,content-center
,content-between
,content-around
,content-evenly
,content-stretch
: Ini buatalign-content
, cuma ngefek kalauflex-wrap: wrap;
dan ada beberapa baris item. -
gap-{size}
,gap-x-{size}
,gap-y-{size}
: Buat ngasih jarak (gap) antar flex items. JAUH LEBIH GAMPANG daripada pake margin di tiap item!{size}
ngikutin skala spacing Tailwind.- Contoh:
gap-4
(gap 1rem di semua arah),gap-x-2
(gap horizontal 0.5rem),gap-y-8
(gap vertikal 2rem).
- Contoh:
Contoh Flexbox Container:
<!-- Menu navigasi horizontal di tengah dengan jarak -->
<nav class="flex justify-center gap-x-6 py-4 bg-slate-100">
<a href="#" class="hover:text-blue-500">Beranda</a>
<a href="#" class="hover:text-blue-500">Produk</a>
<a href="#" class="hover:text-blue-500">Kontak</a>
</nav>
<!-- Kartu-kartu yang dijejer dan bisa wrap, item di tengah vertikal -->
<div class="flex flex-wrap justify-around items-center gap-4 p-4 bg-gray-200 min-h-[200px]">
<div class="bg-white p-4 rounded shadow w-40 text-center">Kartu 1</div>
<div class="bg-white p-4 rounded shadow w-40 text-center">Kartu 2 Lebih Tinggi</div>
<div class="bg-white p-4 rounded shadow w-40 text-center">Kartu 3</div>
<div class="bg-white p-4 rounded shadow w-40 text-center">Kartu 4</div>
</div>
b. Untuk Flex Items (Elemen Anak)
order-{number}
atauorder-first
,order-last
,order-none
: Buat ngatur urutan item.order-1
,order-2
,order-first
(sama kayakorder: -9999;
),order-last
(sama kayakorder: 9999;
).grow
ataugrow-{value}
:flex-grow: 1;
atauflex-grow: value;
(grow-0
ituflex-grow: 0;
).shrink
ataushrink-{value}
:flex-shrink: 1;
atauflex-shrink: value;
(shrink-0
ituflex-shrink: 0;
).basis-{size/percentage}
:flex-basis
(misal,basis-1/2
buat 50%,basis-auto
,basis-0
,basis-full
).flex-1
:flex: 1 1 0%;
(Item bisa tumbuh, bisa menciut, basis 0% - sering buat bagi ruang sama rata).flex-auto
:flex: 1 1 auto;
flex-initial
:flex: 0 1 auto;
(Default).flex-none
:flex: none;
(0 0 auto
).self-start
,self-end
,self-center
,self-stretch
,self-auto
,self-baseline
: Buatalign-self
item individual.
Contoh Flex Items:
<div class="flex bg-slate-100 p-2 gap-2">
<div class="flex-1 bg-blue-300 p-2 text-center">Item 1 (flex-1)</div>
<div class="flex-1 bg-green-300 p-2 text-center">Item 2 (flex-1)</div>
<div class="w-32 shrink-0 bg-red-300 p-2 text-center">Item 3 (lebar tetap, gak mau nyusut)</div>
<!-- w-32 untuk basis, shrink-0 agar tidak menyusut -->
</div>
<div class="flex items-start bg-slate-100 p-2 h-32 gap-2 mt-4">
<div class="bg-purple-300 p-2">Awal</div>
<div class="self-center bg-pink-300 p-2">Tengah Sendiri</div>
<div class="self-end bg-yellow-300 p-2">Akhir Sendiri</div>
</div>
3. Grid Utilities: Arsitek Layout Dua Dimensi Versi Cepat!
Tailwind juga bikin CSS Grid jadi gampang dipake.
a. Untuk Grid Container
grid-cols-{number}
: Nentuin jumlah kolom dengan lebar yang sama. Misal,grid-cols-3
bikin 3 kolom sama lebar (kayak1fr 1fr 1fr
). Maksimal biasanya sampegrid-cols-12
.grid-cols-none
:grid-template-columns: none;
.grid-rows-{number}
: Nentuin jumlah baris dengan tinggi yang sama (atau implisit).grid-flow-row
,grid-flow-col
,grid-flow-row-dense
,grid-flow-col-dense
: Buatgrid-auto-flow
.gap-{size}
,gap-x-{size}
,gap-y-{size}
: Sama kayak di Flexbox, buat jarak antar sel grid.justify-items-*
(start
,end
,center
,stretch
).align-items-*
(start
,end
,center
,stretch
,baseline
).place-items-*
(shorthand buatalign-items
danjustify-items
).- (Untuk
grid-template-columns
dangrid-template-rows
yang lebih kustom (misal,200px 1fr auto
), kamu bisa pake nilai arbitrer:grid-cols-[200px_1fr_auto]
).
Contoh Grid Container:
<!-- Layout 3 kolom sederhana -->
<div class="grid grid-cols-3 gap-4 p-4 bg-gray-200">
<div class="bg-violet-300 p-3 rounded">Kolom 1</div>
<div class="bg-violet-300 p-3 rounded">Kolom 2</div>
<div class="bg-violet-300 p-3 rounded">Kolom 3</div>
<div class="bg-violet-300 p-3 rounded">Kolom 4 (akan di baris baru)</div>
</div>
<!-- Layout dengan ukuran kolom kustom -->
<div class="grid grid-cols-[200px_minmax(0,_1fr)_auto] gap-2 p-2 bg-lime-100 mt-4">
<div class="bg-lime-300 p-2">Sidebar (200px)</div>
<div class="bg-lime-400 p-2">Konten Utama (1fr)</div>
<div class="bg-lime-300 p-2">Info (auto)</div>
</div>
b. Untuk Grid Items
col-span-{number}
: Bikin item ngambil beberapa kolom. Misal,col-span-2
(item ngambil 2 kolom).col-start-{line}
,col-end-{line}
: Nentuin posisi item berdasarkan garis kolom.row-span-{number}
: Bikin item ngambil beberapa baris.row-start-{line}
,row-end-{line}
: Nentuin posisi item berdasarkan garis baris.justify-self-*
(start
,end
,center
,stretch
).align-self-*
(start
,end
,center
,stretch
,baseline
).place-self-*
(shorthand buatalign-self
danjustify-self
).
Contoh Grid Items:
<div class="grid grid-cols-4 grid-rows-2 gap-2 p-2 bg-cyan-100 h-48 mt-4">
<div class="bg-cyan-400 p-2 rounded col-span-2">Item A (2 kolom)</div>
<div class="bg-cyan-500 p-2 rounded row-span-2 self-center">Item B (2 baris, tengah vertikal)</div>
<div class="bg-cyan-400 p-2 rounded">Item C</div>
<div class="bg-cyan-400 p-2 rounded col-start-1 row-start-2">Item D (kolom 1, baris 2)</div>
<!-- Item E akan mengisi sisa (kolom 2, baris 2) -->
<div class="bg-cyan-400 p-2 rounded">Item E</div>
<div class="bg-cyan-400 p-2 rounded col-start-4 row-start-2">Item F (kolom 4, baris 2)</div>
</div>
4. Positioning Utilities
Tailwind juga punya utility buat properti position
dan offset (top
, left
, right
, bottom
, inset
).
static
,relative
,absolute
,fixed
,sticky
.- Offset:
top-0
,left-4
,bottom-auto
,right-[10px]
,inset-0
(shorthand buat top,right,bottom,left = 0),inset-x-0
,inset-y-4
. Skalanya ngikutin spacing.
Contoh Positioning:
<div class="relative h-32 w-full bg-slate-200 p-4">
Ini parent relatif.
<div class="absolute bottom-0 right-0 bg-red-400 p-2 rounded">
Anak absolut di pojok kanan bawah.
</div>
</div>
<div class="sticky top-0 bg-yellow-300 p-2 z-10"> <!-- Akan nempel di atas pas scroll -->
Header Nempel!
</div>
5. Z-Index (z-{index}
)
Buat ngatur tumpukan elemen yang diposisikan.
z-0
,z-10
,z-20
,z-30
,z-40
,z-50
,z-auto
.- Nilai arbitrer:
z-[999]
.
Dengan utility Flexbox dan Grid dari Tailwind, ngatur layout jadi kerasa lebih cepet dan intuitif karena kamu bisa langsung liat efeknya di HTML. Gak perlu bolak-balik file CSS buat ngubah display
, justify-content
, atau grid-template-columns
lagi.
Kuncinya adalah pahamin konsep dasar Flexbox dan Grid di CSS murni dulu (yang udah kita pelajari!), terus liat gimana Tailwind "nerjemahin" properti-properti itu jadi utility class yang gampang dipake. Dokumentasi Tailwind lagi-lagi jadi teman terbaikmu buat nyari utility spesifik.
Selanjutnya, kita bakal liat gimana cara bikin layout Tailwind ini jadi responsif di berbagai ukuran layar!
Kuis Layouting dengan Tailwind CSS
Pertanyaan 1 dari 5
Utility class Tailwind apa yang Anda gunakan untuk membuat sebuah `<div>` menjadi flex container dan item-item di dalamnya dijejerkan secara horizontal dari kiri ke kanan?