Halaman admin adalah inti dari banyak aplikasi web modern, berfungsi sebagai pusat kendali untuk mengelola data, pengguna, dan pengaturan sistem. Tampilan yang rapi, responsif, dan mudah digunakan sangat krusial untuk efisiensi kerja. Salah satu fitur UI yang populer dan sangat membantu dalam hal ini adalah sidebar yang dapat di-toggle (disembunyikan/ditampilkan).
Sidebar yang dapat di-toggle memungkinkan pengguna untuk memaksimalkan ruang layar untuk konten utama saat dibutuhkan, dan menampilkannya kembali untuk navigasi. Dalam panduan ini, kita akan mempelajari cara membuat halaman admin dasar dengan fitur toggle sidebar yang interaktif, menggunakan framework CSS Bootstrap untuk styling dan JavaScript murni untuk fungsionalitasnya.
Mempersiapkan Lingkungan Pengembangan
Sebelum memulai, pastikan Anda memiliki struktur dasar HTML dan telah menyertakan Bootstrap. Kita akan menggunakan Bootstrap 5.
1. Struktur HTML Dasar
Buat file index.html dan sertakan CDN Bootstrap untuk CSS dan JavaScript. Pastikan JavaScript diletakkan di akhir <body> untuk kinerja terbaik.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Dashboard Admin Interaktif</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> <!-- Gaya kustom --> <style> body { display: flex; min-height: 100vh; overflow-x: hidden; /* Mencegah overflow horizontal saat sidebar disembunyikan */ } #sidebar { width: 250px; min-width: 250px; background-color: #343a40; /* Dark background */ color: white; transition: all 0.3s ease-in-out; flex-shrink: 0; /* Mencegah sidebar menyusut */ } #sidebar.hidden { margin-left: -250px; /* Sembunyikan sidebar ke kiri */ } #content { flex-grow: 1; padding: 20px; transition: margin-left 0.3s ease-in-out; } #topbar { background-color: #f8f9fa; border-bottom: 1px solid #dee2e6; padding: 1rem; margin-bottom: 20px; } #topbar .btn { color: #343a40; } /* Responsiveness for smaller screens */ @media (max-width: 768px) { #sidebar { position: fixed; height: 100vh; z-index: 1000; margin-left: -250px; /* Sembunyikan secara default pada mobile */ } #sidebar.hidden { margin-left: -250px; } #sidebar.visible { margin-left: 0; } #content { width: 100%; margin-left: 0 !important; } body.sidebar-visible #content { margin-left: 250px; /* Dorong konten saat sidebar terlihat */ } } </style> </head> <body> <!-- Struktur utama akan ditambahkan di sini --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script> <script> // Kode JavaScript akan ditambahkan di sini </script> </body> </html>
Merancang Tata Letak Halaman Admin
Kita akan menggunakan layout flexbox untuk membagi halaman menjadi sidebar dan area konten utama. Bootstrap sudah mendukung flexbox dengan baik.
2. Struktur Utama (Sidebar dan Konten)
Tambahkan kode berikut di dalam tag <body> sebelum skrip Bootstrap.
<!-- Sidebar --> <div id="sidebar" class="d-flex flex-column p-3 text-white hidden"> <a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none"> <span class="fs-4">Admin Panel</span> </a> <hr> <ul class="nav nav-pills flex-column mb-auto"> <li class="nav-item"> <a href="#" class="nav-link active" aria-current="page"> Dashboard </a> </li> <li> <a href="#" class="nav-link text-white"> Produk </a> </li> <li> <a href="#" class="nav-link text-white"> Pesanan </a> </li> <li> <a href="#" class="nav-link text-white"> Pengguna </a> </li> <li> <a href="#" class="nav-link text-white"> Pengaturan </a> </li> </ul> <hr> <div class="dropdown"> <a href="#" class="d-flex align-items-center text-white text-decoration-none dropdown-toggle" id="dropdownUser1" data-bs-toggle="dropdown" aria-expanded="false"> <img src="https://github.com/mdo.png" alt="" width="32" height="32" class="rounded-circle me-2"> <strong>Admin</strong> </a> <ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="dropdownUser1"> <li><a class="dropdown-item" href="#">Pengaturan</a></li> <li><a class="dropdown-item" href="#">Profil</a></li> <li><hr class="dropdown-divider"></li> <li><a class="dropdown-item" href="#">Keluar</a></li> </ul> </div> </div> <!-- Konten Utama --> <div id="content"> <!-- Topbar (untuk tombol toggle) --> <div id="topbar" class="d-flex justify-content-between align-items-center"> <button class="btn btn-primary" id="sidebarToggle"> <span class="navbar-toggler-icon"></span> </button> <h4 class="mb-0">Dashboard</h4> <!-- Anda bisa menambahkan elemen lain di topbar, seperti notifikasi atau profil --> </div> <!-- Area Konten --> <div class="container-fluid"> <h1 class="mt-4">Selamat Datang di Dashboard Admin!</h1> <p>Ini adalah area konten utama Anda. Anda dapat menambahkan berbagai widget, grafik, dan tabel di sini.</p> <div class="row mt-4"> <div class="col-md-4 mb-4"> <div class="card bg-primary text-white"> <div class="card-body"> <h5 class="card-title">Total Pengguna</h5> <p class="card-text fs-2">1,234</p> </div> </div> </div> <div class="col-md-4 mb-4"> <div class="card bg-success text-white"> <div class="card-body"> <h5 class="card-title">Pendapatan Bulan Ini</h5> <p class="card-text fs-2">Rp 50.000.000</p> </div> </div> </div> <div class="col-md-4 mb-4"> <div class="card bg-warning text-dark"> <div class="card-body"> <h5 class="card-title">Pesanan Baru</h5> <p class="card-text fs-2">45</p> </div> </div> </div> </div> <div class="card mt-4"> <div class="card-header"> Daftar Aktivitas Terbaru </div> <div class="card-body"> <p>Fitur-fitur dan log aktivitas akan muncul di sini.</p> <ul class="list-group"> <li class="list-group-item">Pengguna John Doe mendaftar.</li> <li class="list-group-item">Pesanan #12345 diterima.</li> <li class="list-group-item">Produk baru 'Laptop Gaming' ditambahkan.</li> </ul> </div> </div> </div> </div>
Perhatikan beberapa hal di atas:
<body>memilikidisplay: flexagar sidebar dan konten berada dalam satu baris.#sidebarmemiliki lebar tetap (widthdanmin-width) dan transisi untuk animasi. Classhiddenakan digunakan untuk menyembunyikannya.#contentmenggunakanflex-grow: 1agar mengisi sisa ruang yang tersedia.#topbarberisi tombol toggle dan judul halaman.- Media query di CSS untuk layar kecil akan menyembunyikan sidebar secara default dan mengubah perilakunya menjadi tumpang tindih.
Mengimplementasikan Fungsionalitas Toggle dengan JavaScript
Sekarang, saatnya menambahkan interaktivitas dengan JavaScript.
3. Kode JavaScript untuk Toggle
Tambahkan kode berikut di dalam tag <script> di bagian paling bawah <body>.
document.addEventListener('DOMContentLoaded', function() { const sidebarToggle = document.getElementById('sidebarToggle'); const sidebar = document.getElementById('sidebar'); const body = document.body; // Untuk mengontrol class pada body untuk mobile // Fungsi untuk meng-toggle sidebar function toggleSidebar() { sidebar.classList.toggle('hidden'); // Untuk mobile, tambahkan/hapus class 'sidebar-visible' pada body if (window.innerWidth <= 768) { body.classList.toggle('sidebar-visible'); } } // Event listener untuk tombol toggle sidebarToggle.addEventListener('click', toggleSidebar); // Sembunyikan sidebar secara default pada perangkat mobile saat dimuat if (window.innerWidth <= 768) { sidebar.classList.add('hidden'); body.classList.remove('sidebar-visible'); // Pastikan tidak ada class visible saat hidden } else { // Tampilkan sidebar secara default pada desktop sidebar.classList.remove('hidden'); } // Tangani perubahan ukuran layar window.addEventListener('resize', function() { if (window.innerWidth <= 768) { // Pada mobile, sembunyikan sidebar jika sebelumnya terlihat atau tidak ada class hidden if (!sidebar.classList.contains('hidden')) { sidebar.classList.add('hidden'); body.classList.remove('sidebar-visible'); } } else { // Pada desktop, pastikan sidebar terlihat sidebar.classList.remove('hidden'); body.classList.remove('sidebar-visible'); // Hapus class visible jika ada } }); });
Penjelasan JavaScript:
- Kita mendapatkan referensi ke elemen tombol toggle dan sidebar menggunakan ID mereka.
sidebar.classList.toggle('hidden')adalah inti dari fungsi ini. Ini akan menambahkan classhiddenjika tidak ada, atau menghilangkannya jika sudah ada. Classhiddeninilah yang akan memanipulasi posisi sidebar (menggesernya ke luar layar).- Kita juga menambahkan penanganan untuk ukuran layar (media query JavaScript) agar sidebar berperilaku berbeda pada desktop dan mobile. Pada mobile, sidebar akan overlay konten, sedangkan pada desktop, ia akan mendorong konten.
- Event listener
resizememastikan bahwa perilaku sidebar disesuaikan ketika ukuran jendela browser diubah.
No comments
Jangan lupa kasih komentar ya!. Karena komentar kalian membantu kami menyediakan informasi yang lebih baik
Tidak boleh menyertakan link atau promosi produk saat berkomentar. Komentar tidak akan ditampilkan. Hubungi 081271449921(WA) untuk dapat menyertakan link dan promosi