Studi Kasus: Navbar
Membangun navbar responsif dengan flexbox: logo kiri, menu tengah, tombol kanan.
Struktur HTML navbar
<nav class="navbar">
<a class="logo" href="#">Brand</a>
<div class="menu">
<a href="#">Beranda</a>
<a href="#">Produk</a>
<a href="#">Tentang</a>
</div>
<a class="cta" href="#">Mulai</a>
</nav>Trik margin auto di flexbox
.navbar {
display: flex;
align-items: center;
gap: 16px;
}
.menu {
display: flex;
gap: 4px;
margin: 0 auto; /* dorong ke tengah! */
}margin: auto di dalam flex container menyerap semua ruang sisa ke arah itu. margin: 0 auto pada menu mendorongnya tepat ke tengah, mengapit logo dan tombol CTA. Ini trik elegan yang tidak ada di layout lain.
Alternatif: justify-content: space-between dengan tiga grup, tapi menu tidak akan tepat di tengah kalau lebar logo dan CTA beda.
Sentuhan akhir
.navbar {
padding: 12px 24px;
background: white;
border-bottom: 1px solid #e2e8f0;
position: sticky;
top: 0;
}
.menu a {
padding: 8px 14px;
border-radius: 8px;
color: #475569;
text-decoration: none;
}
.menu a:hover {
background: #f1f5f9;
color: #0f172a;
}
.cta {
background: #38bdf8;
color: white;
padding: 10px 20px;
border-radius: 999px;
text-decoration: none;
font-weight: 600;
}Catatan teknis: untuk mobile, pola umumnya: sembunyikan
.menudi layar kecil dan tampilkan tombol hamburger (butuh sedikit JavaScript atau checkbox hack). Fondasi flexbox-nya tetap sama.
Kenapa navbar memakai flexbox, bukan float?
Navbar adalah kasus satu dimensi sempurna: item berderet horizontal dengan alignment vertikal tengah. Float butuh clearfix dan tidak bisa centering vertikal mudah. Flexbox menyelesaikan dalam 3 baris.
Contoh: navbar dengan menu tengah PRESISI
Trik margin auto vs space-between:
/* margin auto: menu TEPAT di tengah viewport */
.navbar {
display: flex;
align-items: center;
}
.menu {
margin: 0 auto;
}
/* space-between: menu di tengah SISA ruang (tidak tepat tengah bila logo/CTA beda lebar) */
.navbar2 {
display: flex;
justify-content: space-between;
align-items: center;
}Pilih margin auto bila butuh presisi tengah; space-between bila cukup "kira-kira di tengah".
Contoh: navbar mobile sederhana
@media (max-width: 640px) {
.navbar {
flex-wrap: wrap;
}
.menu {
order: 3;
width: 100%;
margin: 8px 0 0;
justify-content: space-around;
}
}Menu turun ke baris sendiri di HP tanpa JavaScript.
Jebakan
Lupa flex-shrink pada logo. Logo dengan teks panjang bisa menyusut gepeng di HP. Beri flex-shrink: 0 pada logo.
CTA terdorong keluar layar. Terlalu banyak item + gap besar = overflow horizontal. Di HP, sederhanakan menu atau izinkan wrap.
Tips profesional
- Navbar +
position: sticky; top: 0;+backdrop-filter: blur(12px)= navbar kaca modern dalam 5 baris. - Beri
z-indexpada navbar sticky (misal 20) agar dropdown/hero tidak menutupinya saat scroll. - Untuk menu yang sangat panjang di HP, pola yang benar adalah hamburger + drawer (butuh sedikit JavaScript), bukan memampatkan semua link.
Rangkuman
Navbar = flex + align-items center + trik margin auto untuk centering. Kuasai pola ini karena dipakai di hampir setiap website.
export default function App(): JSX.Element { return <h1>Hello world</h1> }
Tantangan
Navbar Rata Kanan
Di playground:
- Ubah navbar menjadi varian "logo kiri, semua menu kanan": pindahkan
.menudan.ctake kanan memakai satu properti margin pada elemen yang tepat. - Tambahkan efek: link menu aktif (class
aktifdi HTML) punya background biru muda dan teks biru tua. - Di komentar, jelaskan kenapa
margin-left: autopada.menumendorongnya ke kanan.
<!doctype html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="styles.css" /> </head> <body> <h1>Halo CSS</h1> <p>Edit styles.css dan lihat hasilnya.</p> </body> </html>