Setelah kita belajar berbagai properti CSS (warna, font, margin, padding, border, border-radius), sekarang saatnya menerapkannya untuk membuat komponen website yang paling penting: Navigasi Bar (Navbar). Navbar adalah peta website yang membantu pengguna berpindah halaman.
Apa Itu Navigasi Bar (Navbar)?
Navbar adalah menu navigasi yang biasanya terletak di bagian atas website. Berisi link-link ke halaman utama (Home), tentang kami (About), layanan (Services), kontak (Contact), dll.
• Logo/Brand → identitas website (biasanya di kiri)
• Menu Link → navigasi ke halaman lain (di tengah atau kanan)
• Styling → warna, hover effect, aktif page
• Responsive → bisa beradaptasi di HP (nanti di seri media query)
Struktur Dasar Navbar
Navbar biasanya menggunakan tag <nav> (semantik HTML5) dan di dalamnya terdapat <ul> (unordered list) untuk menu.
<nav>
<div class="logo">MyWebsite</div>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
Mengapa pakai <ul> dan <li>? Karena secara semantik, menu adalah sebuah daftar (list). Ini baik untuk SEO dan aksesibilitas.
1. Navbar Sederhana (Tanpa Flex)
Tanpa CSS, navbar akan tampil vertikal karena <li> adalah block element. Kita butuh CSS untuk membuatnya horizontal.
<style>
nav {
background: #1e293b;
padding: 15px 30px;
}
nav ul {
list-style: none; /* hilangkan bullet */
margin: 0;
padding: 0;
}
nav ul li {
display: inline-block; /* membuat menu horizontal */
margin-right: 20px;
}
nav ul li a {
color: white;
text-decoration: none;
padding: 8px 16px;
border-radius: 8px;
transition: background 0.3s;
}
nav ul li a:hover {
background: #3b82f6;
}
</style>
Hasilnya:
2. Navbar Modern dengan Flexbox (Paling Disarankan)
Flexbox adalah cara paling modern dan mudah untuk membuat navbar. Properti kunci: display: flex, justify-content: space-between, dan align-items: center.
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.navbar {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 15px 40px;
display: flex;
justify-content: space-between; /* logo di kiri, menu di kanan */
align-items: center; /* vertikal tengah */
box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}
.logo a {
color: white;
font-size: 24px;
font-weight: bold;
text-decoration: none;
}
.nav-links {
display: flex;
list-style: none;
gap: 25px; /* jarak antar menu */
}
.nav-links li a {
color: white;
text-decoration: none;
font-size: 16px;
padding: 8px 12px;
border-radius: 8px;
transition: all 0.3s;
}
.nav-links li a:hover {
background: rgba(255,255,255,0.2);
transform: translateY(-2px);
}
/* efek aktif page */
.nav-links li a.active {
background: rgba(255,255,255,0.3);
font-weight: bold;
}
</style>
<nav class="navbar">
<div class="logo"><a href="#">MyWebsite</a></div>
<ul class="nav-links">
<li><a href="#" class="active">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
Hasil navbar modern:
display: flex;→ mengaktifkan flexbox pada containerjustify-content: space-between;→ item pertama di kiri, terakhir di kanan, sisanya di tengahalign-items: center;→ item sejajar secara vertikal (tengah)gap: 25px;→ jarak antar item (pengganti margin)
3. Navbar dengan Tombol (Login/Register)
Seringkali navbar memiliki tombol CTA (Call to Action) seperti Login atau Register.
<style>
.navbar {
background: white;
padding: 15px 40px;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.logo {
font-size: 24px;
font-weight: bold;
color: #3b82f6;
}
.nav-links {
display: flex;
list-style: none;
gap: 30px;
align-items: center;
}
.nav-links a {
text-decoration: none;
color: #334155;
font-weight: 500;
transition: color 0.3s;
}
.nav-links a:hover {
color: #3b82f6;
}
.btn-login {
background: transparent;
border: 2px solid #3b82f6;
padding: 8px 20px;
border-radius: 8px;
color: #3b82f6;
}
.btn-login:hover {
background: #3b82f6;
color: white;
}
.btn-register {
background: #3b82f6;
border: none;
padding: 8px 20px;
border-radius: 8px;
color: white;
}
.btn-register:hover {
background: #2563eb;
}
</style>
<nav class="navbar">
<div class="logo">BrandName</div>
<ul class="nav-links">
<li><a href="#">Home</a></li>
<li><a href="#">Features</a></li>
<li><a href="#">Pricing</a></li>
<li><a href="#" class="btn-login">Login</a></li>
<li><a href="#" class="btn-register">Register</a></li>
</ul>
</nav>
Hasil navbar dengan tombol:
4. Navbar dengan Dropdown (Sub Menu)
Untuk website yang lebih kompleks, navbar bisa memiliki dropdown menu (sub menu).
<style>
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background: white;
min-width: 160px;
box-shadow: 0 8px 16px rgba(0,0,0,0.1);
border-radius: 8px;
z-index: 1;
top: 100%;
left: 0;
}
.dropdown-content a {
color: #333;
padding: 12px 16px;
display: block;
text-decoration: none;
}
.dropdown-content a:hover {
background: #f0f4f8;
border-radius: 8px;
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown > a::after {
content: " ▼";
font-size: 10px;
}
</style>
<li class="dropdown">
<a href="#">Services</a>
<div class="dropdown-content">
<a href="#">Web Design</a>
<a href="#">SEO</a>
<a href="#">Digital Marketing</a>
</div>
</li>
Hasil dropdown (hover ke Services):
Hover ke "Services" untuk melihat dropdown (simulasi)
Studi Kasus: Navbar Website Lengkap
Berikut contoh navbar lengkap yang menggabungkan semua elemen: logo, menu, tombol, dan efek hover.
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Navbar Modern - Belajar CSS</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: #f0f4f8;
}
/* ========== NAVBAR ========== */
.navbar {
background: white;
padding: 15px 40px;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 4px 15px rgba(0,0,0,0.08);
position: sticky;
top: 0;
z-index: 1000;
}
.logo a {
font-size: 28px;
font-weight: bold;
text-decoration: none;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
}
.nav-links {
display: flex;
list-style: none;
gap: 30px;
align-items: center;
}
.nav-links a {
text-decoration: none;
color: #334155;
font-weight: 500;
transition: all 0.3s;
padding: 8px 0;
position: relative;
}
/* efek underline saat hover */
.nav-links a::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 0%;
height: 2px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
transition: width 0.3s;
}
.nav-links a:hover::after {
width: 100%;
}
.nav-links a:hover {
color: #667eea;
}
.btn-contact {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white !important;
padding: 10px 24px !important;
border-radius: 30px;
}
.btn-contact:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(102,126,234,0.4);
}
.btn-contact::after {
display: none;
}
/* ========== HERO SECTION (isi halaman) ========== */
.hero {
text-align: center;
padding: 80px 20px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
}
.hero h1 {
font-size: 48px;
margin-bottom: 20px;
}
.hero p {
font-size: 18px;
opacity: 0.9;
max-width: 600px;
margin: 0 auto;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 40px 20px;
}
.info-box {
background: white;
border-radius: 16px;
padding: 25px;
margin-top: 30px;
box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}
.info-box h3 {
color: #1e293b;
margin-bottom: 15px;
}
.info-box ul {
margin-left: 20px;
}
.info-box li {
margin-bottom: 10px;
color: #475569;
}
code {
background: #e2e8f0;
padding: 2px 8px;
border-radius: 6px;
font-family: monospace;
}
</style>
</head>
<body>
<nav class="navbar">
<div class="logo">
<a href="#">MyBrand</a>
</div>
<ul class="nav-links">
<li><a href="#" class="active">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">Portfolio</a></li>
<li><a href="#" class="btn-contact">Contact Us</a></li>
</ul>
</nav>
<section class="hero">
<h1>Selamat Datang di MyBrand</h1>
<p>Kami membantu Anda membangun website modern dengan teknologi terbaru</p>
</section>
<div class="container">
<div class="info-box">
<h3>Penjelasan Properti Navbar</h3>
<ul>
<li><code>display: flex;</code> → membuat navbar menjadi fleksibel (logo di kiri, menu di kanan)</li>
<li><code>justify-content: space-between;</code> → logo di kiri, menu di kanan</li>
<li><code>align-items: center;</code> → semua item sejajar vertikal tengah</li>
<li><code>gap: 30px;</code> → jarak antar menu (pengganti margin)</li>
<li><code>position: sticky; top: 0;</code> → navbar tetap di atas saat scroll</li>
<li><code>a::after</code> → pseudo-element untuk efek underline saat hover</li>
<li><code>background: linear-gradient(...)</code> → gradien untuk tombol dan logo</li>
</ul>
</div>
</div>
</body>
</html>
Hasil visual navbar lengkap:
Variasi Posisi Navbar
| Posisi | CSS | Penjelasan |
|---|---|---|
| Static (default) | position: static; |
Mengikuti aliran halaman (akan hilang saat scroll) |
| Sticky | position: sticky; top: 0; |
Tetap di atas saat scroll (populer) |
| Fixed | position: fixed; top: 0; |
Selalu tetap di atas (tidak bergerak) |
- Gunakan logo yang jelas dan mudah diingat
- Menu tidak terlalu banyak (maksimal 5-6 link)
- Beri efek hover agar interaktif
- Tandai halaman aktif (active class) agar pengguna tahu posisinya
- Buat responsif (nanti dengan media query) agar bisa di HP
- Gunakan flexbox untuk layout yang rapi
Kesalahan Umum Pemula
- Lupa
list-style: none;→ Bullet list masih muncul di menu. - Lupa
text-decoration: none;→ Link masih bergaris bawah. - Margin dan padding bawaan browser →
uldanbodypunya margin default. Gunakan* { margin: 0; padding: 0; }. - Menggunakan
<div>untuk menu → Lebih baik pakai<ul>dan<li>untuk semantik yang benar. - Lupa menutup tag → Navbar bisa berantakan.
- Jika navbar tidak rata, cek apakah
justify-content: space-betweensudah diterapkan - Jika menu turun ke bawah, cek apakah
display: flexsudah di container danlitidak punyadisplay: block - Gunakan Developer Tools (F12) → inspect navbar → lihat computed styles
Latihan Singkat
- Buat file HTML baru dengan judul "Latihan Navbar"
- Buat navbar dengan 5 menu: Home, About, Services, Blog, Contact
- Gunakan
display: flexdanjustify-content: space-between - Tambahkan logo di kiri dengan teks "MySite"
- Beri background gradien pada navbar
- Buat efek hover: underline atau perubahan warna
- Tambahkan class
activepada menu Home - Simpan dan buka di browser
Intisari Hari Ini
- Navbar menggunakan
<nav>+<ul>+<li>+<a> display: flex;→ kunci membuat navbar horizontaljustify-content: space-between;→ logo di kiri, menu di kananalign-items: center;→ vertikal tengahgap: 20px;→ jarak antar menuposition: sticky; top: 0;→ navbar tetap di atas saat scroll- Efek hover membuat navbar lebih interaktif
- Navbar dengan logo, 5 menu link (Home, Features, Pricing, Testimonials, Contact)
- Satu menu berupa dropdown (misal: Services dengan submenu Web Dev, Mobile Dev, SEO)
- Satu menu berupa tombol (Get Started) dengan warna berbeda
- Efek hover: underline gradien atau perubahan warna background
- Navbar sticky (tetap di atas saat scroll)
- Halaman memiliki section Hero, Features (3 kartu), Footer
- Buat kotak penjelasan di footer yang mendokumentasikan semua properti CSS yang digunakan di navbar
Bonus: Buat navbar responsif sederhana dengan media query (saat layar < 768px, menu berubah kolom atau muncul hamburger menu).
Selamat mencoba!
Artikel Sebelumnya: HTML Dasar #24 - Mengatur Border dan Border Radius (Membuat Kartu)
Artikel Selanjutnya: HTML Dasar #26 - Cara Menambahkan JavaScript ke HTML (Inline, Internal, External)
