SnippetUI

Menu Sidebar Collapsible

Ini adalah navigasi sidebar yang dapat digunakan di dasbor, dll., dan dapat diciutkan ke status hanya ikon.

ReactTailwind CSSlucide-react

Navigasi sidebar yang memungkinkan Anda beralih antara tampilan ukuran penuh dengan teks dan tampilan ringkas yang hanya berisi ikon, sering terlihat di layar manajemen dan dasbor. Ideal jika Anda ingin memaksimalkan area tampilan area konten.

Pratinjau

Dashboard Overview

Welcome back, Jane. Here is what’s happening today.

Total Revenue

$45,231

Active Users

2,410

New Orders

142

Recent Activity

Kasus & Fitur Penggunaan

  • Layar Dasbor & Admin: Dirancang untuk memungkinkan pengguna fokus pada konten utama (grafik, tabel data, dll.) dengan menutup navigasi sesuai kebutuhan.
  • Penyelesaian dengan tooltips: Meskipun dalam keadaan kompak dengan hanya ikon, aksesibilitas dan kemudahan penggunaan dipastikan dengan menampilkan tooltips saat mengarahkan kursor.
  • Animasi halus: Dengan menggabungkan lebar, transparansi (opacity), dan max-width, kami mencapai gerakan alami yang membuat teks menghilang dan muncul dengan mulus.

Poin-poin penting dari desain dan UX (Desain & UX)

  • Pencegahan luapan teks: Menggabungkan max-w-0 dan overflow-hidden mencegah teks pecah menjadi baris baru dan merusak tata letak saat dilipat.
  • Menyorot status aktif secara visual: Item menu yang dipilih saat ini memiliki latar belakang biru dan warna teks untuk menyampaikan posisi saat ini secara intuitif.
  • Memandu mata: Tombol sakelar untuk membuka dan menutup ditempatkan di tepi sidebar untuk meningkatkan kemampuan “tekan di sini untuk bergerak.”

Cara menyesuaikan (Panduan Kustomisasi)

  • Ubah lebar sidebar: Anda dapat menyesuaikannya dengan ukuran yang Anda inginkan dengan mengubah w-64 (saat diperluas) atau w-20 (saat diciutkan) di sisi kode implementasi.
  • Mengubah warna tema: Dengan mengganti kelas utilitas bg-blue-600 dan text-blue-700 sekaligus, Anda dapat menerapkannya pada desain yang sesuai dengan warna merek Anda.

Kode implementasi (Implementasi)

<div className="flex h-screen bg-slate-50 font-sans overflow-hidden">
    
    {/* Sidebar */}
    <aside 
      className={`bg-white border-r border-slate-200 flex flex-col transition-all duration-300 ease-in-out relative z-10 ${
        isCollapsed ? 'w-20' : 'w-64'
      }`}
    >
      {/* Header */}
      <div className="h-16 flex items-center px-4 border-b border-slate-100 shrink-0">
        <div className="flex items-center gap-3 overflow-hidden whitespace-nowrap">
          <div className="w-10 h-10 rounded-xl bg-blue-600 flex items-center justify-center shrink-0 shadow-sm shadow-blue-200">
            <Hexagon className="w-6 h-6 text-white" />
          </div>
          <span 
            className={`font-bold text-slate-800 text-xl transition-all duration-300 overflow-hidden ${
              isCollapsed ? 'max-w-0 opacity-0' : 'max-w-[200px] opacity-100'
            }`}
          >
            DashUI
          </span>
        </div>
      </div>

      {/* Navigation */}
      <nav className="flex-1 py-6 px-3 space-y-2 overflow-y-auto overflow-x-hidden">
        {navItems.map((item, index) => (
          <a 
            key={index}
            href="#" 
            className={`flex items-center gap-3 px-3 py-3 rounded-xl transition-colors group relative ${
              item.active 
                ? 'text-blue-700 bg-blue-50 hover:bg-blue-100' 
                : 'text-slate-500 hover:bg-slate-100 hover:text-slate-900'
            }`}
          >
            <item.icon className="w-6 h-6 shrink-0" />
            
            <span 
              className={`font-semibold whitespace-nowrap transition-all duration-300 flex-1 text-sm overflow-hidden ${
                isCollapsed ? 'max-w-0 opacity-0' : 'max-w-[200px] opacity-100'
              }`}
            >
              {item.label}
            </span>

            {/* Badge display (only when expanded) */}
            {!isCollapsed && item.badge && (
              <span className="bg-blue-100 text-blue-700 py-0.5 px-2 rounded-full text-xs font-bold whitespace-nowrap">
                {item.badge}
              </span>
            )}

            {/* Tooltip (displayed on hover only when collapsed) */}
            {isCollapsed && (
              <div className="absolute left-14 hidden group-hover:block bg-slate-800 text-white text-xs px-2.5 py-1.5 rounded-md shadow-lg z-20 whitespace-nowrap pointer-events-none opacity-0 transition-opacity duration-200 group-hover:opacity-100">
                {item.label}
              </div>
            )}
          </a>
        ))}
      </nav>

      {/* Footer Profile */}
      <div className="p-4 border-t border-slate-100 shrink-0">
        <a href="#" className="flex items-center gap-3 hover:bg-slate-50 p-2 -m-2 rounded-xl transition-colors">
          <img 
            src="https://i.pravatar.cc/150?u=a042581f4e29026704d" 
            alt="User Avatar" 
            className="w-10 h-10 rounded-full shrink-0 border border-slate-200 object-cover" 
          />
          <div 
            className={`flex-1 min-w-0 transition-all duration-300 overflow-hidden ${
              isCollapsed ? 'max-w-0 opacity-0' : 'max-w-[200px] opacity-100'
            }`}
          >
            <p className="text-sm font-semibold text-slate-900 truncate">Jane Doe</p>
            <p className="text-xs text-slate-500 truncate">Admin</p>
          </div>
        </a>
      </div>
    </aside>

    {/* Toggle Button */}
    <button 
      onClick={() => setIsCollapsed(!isCollapsed)}
      className={`absolute top-6 z-20 cursor-pointer bg-white border border-slate-200 text-slate-500 hover:text-blue-600 hover:bg-blue-50 rounded-full p-1.5 shadow-sm transition-all duration-300 ${
        isCollapsed ? 'left-[4.2rem]' : 'left-[15rem]'
      }`}
      aria-label={isCollapsed ? "Expand sidebar" : "Collapse sidebar"}
    >
      <ChevronLeft className={`w-4 h-4 transition-transform duration-300 ${isCollapsed ? 'rotate-180' : ''}`} />
    </button>

{/* Area Konten Utama (Contoh) */}
    <namakelas utama="flex-1 p-8 overflow-y-auto">
      <h1 className="text-2xl font-bold text-slate-900">Dasbor</h1>
      <p className="text-slate-500 mt-1">Pilih item dari sidebar.</p>
    </utama>

</div>
);
}

Dukungan Peramban

  • Bekerja dengan baik dengan versi terbaru browser modern (Chrome, Firefox, Safari, Edge).
  • Animasi transition-all dan max-w-0 juga ditampilkan dengan lancar di semua browser modern.