Einklappbares Sidebar-Menü
Dies ist eine Seitenleistennavigation, die auf Dashboards usw. verwendet werden kann und auf einen reinen Symbolstatus reduziert werden kann.
ReactTailwind CSSlucide-react
Eine Seitenleistennavigation, mit der Sie zwischen einer Vollbildanzeige mit Text und einer kompakten Anzeige nur mit Symbolen wechseln können, die häufig auf Verwaltungsbildschirmen und Dashboards zu sehen sind. Ideal, wenn Sie die Anzeigefläche des Inhaltsbereichs maximieren möchten.
Vorschau
Dashboard Overview
Welcome back, Jane. Here is what’s happening today.
Total Revenue
$45,231
Active Users
2,410
New Orders
142
Recent Activity
Anwendungsfälle und Funktionen
- Dashboard- und Admin-Bildschirm: Entwickelt, um Benutzern die Konzentration auf den Hauptinhalt (Grafiken, Datentabellen usw.) zu ermöglichen, indem die Navigation nach Bedarf ausgeblendet wird.
- Vervollständigung mit Tooltips: Auch im kompakten Zustand mit nur Symbolen werden Zugänglichkeit und Benutzerfreundlichkeit durch die Anzeige von Tooltips beim Hover gewährleistet.
- Flüssige Animation: Durch die Kombination von Breite, Transparenz („Opazität“) und „maximale Breite“ erreichen wir natürliche Bewegungen, bei denen Text verschwindet und reibungslos erscheint.
Kernpunkte von Design und UX (Design & UX)
- Verhinderung von Textüberläufen: Durch die Kombination von „max-w-0“ und „overflow-hidden“ wird verhindert, dass der Text beim Falten in neue Zeilen bricht und das Layout zerstört.
- Visuelle Hervorhebung des aktiven Zustands: Der aktuell ausgewählte Menüpunkt hat einen blauen Hintergrund und eine blaue Textfarbe, um die aktuelle Position intuitiv zu vermitteln.
- Das Auge leiten: Die Umschalttaste zum Öffnen und Schließen ist am Rand der Seitenleiste platziert, um die Funktion „Hier drücken, um sich zu bewegen“ zu erhöhen.
So passen Sie es an (Anpassungsanleitung)
- Ändern Sie die Breite der Seitenleiste: Sie können sie auf die gewünschte Größe anpassen, indem Sie „w-64“ (im erweiterten Zustand) oder „w-20“ (im minimierten Zustand) auf der Seite des Implementierungscodes ändern.
- Themenfarben ändern: Indem Sie die Dienstprogrammklassen „bg-blue-600“ und „text-blue-700“ auf einmal ersetzen, können Sie sie auf Designs anwenden, die Ihren Markenfarben entsprechen.
Implementierungscode (Implementierung)
<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>
{/* Hauptinhaltsbereich (Beispiel) */}
<main className="flex-1 p-8 overflow-y-auto">
<h1 className="text-2xl font-bold text-slate-900">Dashboard</h1>
<p className="text-slate-500 mt-1">Wählen Sie ein Element aus der Seitenleiste aus.</p>
</main>
</div>
);
} Browser-Unterstützung
- Funktioniert gut mit den neuesten Versionen moderner Browser (Chrome, Firefox, Safari, Edge).
- „transition-all“- und „max-w-0“-Animationen werden auch in allen modernen Browsern reibungslos dargestellt.