<div class="dashboard-container">
<aside class="sidebar">
<div class="sidebar-header">
<h2>Admin Panel</h2>
<button class="sidebar-toggle" id="sidebarToggle">☰</button>
</div>
<nav class="sidebar-nav">
<ul>
<li><a href="#" class="active"><span class="hidden md:inline">Dashboard</span><span class="inline md:hidden">D</span></a></li>
<li><a href="#"><span class="hidden md:inline">Analytics</span><span class="inline md:hidden">A</span></a></li>
<li><a href="#"><span class="hidden md:inline">Users</span><span class="inline md:hidden">U</span></a></li>
<li><a href="#"><span class="hidden md:inline">Settings</span><span class="inline md:hidden">S</span></a></li>
<li><a href="#"><span class="hidden md:inline">Logout</span><span class="inline md:hidden">L</span></a></li>
</ul>
</nav>
</aside>
<main class="main-content">
<header class="header">
<h1>Dashboard</h1>
<div class="user-profile">
<span>Welcome, Admin</span>
<div class="w-6 h-6 rounded-full bg-gray-100 flex-shrink-0"></div>
</div>
</header>
<section class="widgets">
<div class="widget">
<h3>Sales Overview</h3>
<div class="widget-content">
<canvas id="salesChart"></canvas>
<p>Data placeholder for sales metrics.</p>
</div>
</div>
<div class="widget">
<h3>User Activity</h3>
<div class="widget-content">
<canvas id="activityChart"></canvas>
<p>Data placeholder for user activity.</p>
</div>
</div>
<div class="widget">
<h3>Recent Transactions</h3>
<div class="widget-content">
<ul>
<li>Transaction #1 - $500</li>
<li>Transaction #2 - $1200</li>
<li>Transaction #3 - $300</li>
</ul>
</div>
</div>
<div class="widget">
<h3>System Status</h3>
<div class="widget-content">
<p>CPU Usage: 45%</p>
<p>Memory: 60%</p>
<p>Disk: 80%</p>
</div>
</div>
</section>
</main>
</div>
.dashboard-container {
display: flex;
flex-direction: row;
gap: 0;
min-height: 80vh;
}
.sidebar {
width: 250px;
background-color: #2c3e50;
color: white;
min-height: 80vh;
position: sticky;
overflow-y: auto;
flex-grow: 0;
flex-shrink: 0;
transition: flex-basis 0.3s ease;
}
.sidebar-header {
padding: 20px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #34495e;
}
.sidebar-toggle {
background: none;
border: none;
color: white;
font-size: 24px;
cursor: pointer;
display: none;
}
.sidebar-nav ul {
list-style: none;
padding: 20px;
}
.sidebar-nav a {
color: white;
text-decoration: none;
display: block;
padding: 10px;
margin-bottom: 5px;
border-radius: 5px;
}
.sidebar-nav a:hover,
.sidebar-nav a.active {
background-color: #3498db;
}
.main-content {
flex-grow: 1;
padding: 20px;
transition: margin-left 0.3s ease;
}
.header {
background-color: white;
padding: 20px;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
margin-bottom: 20px;
border-radius: 8px;
}
.user-profile {
display: flex;
align-items: center;
gap: 10px;
}
.avatar {
border-radius: 50%;
}
.widgets {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.widget {
background-color: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
white-space: normal;
word-break: break-word;
}
.widget h3 {
margin-bottom: 15px;
color: #2c3e50;
}
.widget-content {
min-height: 150px;
}
@media (max-width: 768px) {
.sidebar {
flex-basis: 60px;
flex-shrink: 0;
}
.sidebar-header h2 {
display: none;
}
.sidebar-toggle {
display: block;
}
.sidebar-nav a {
text-align: center;
padding: 10px 5px;
}
.sidebar.active {
width: 250px;
}
.sidebar.active {
flex-basis: 100%;
}
.sidebar.active .sidebar-header h2 {
display: block;
}
.sidebar.active a .hidden {
display: inline;
}
.sidebar.active a .inline {
display: none;
}
.widgets {
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
}
}
<script>
document.addEventListener('DOMContentLoaded', () => {
const sidebar = document.querySelector('.sidebar');
const mainContent = document.querySelector('.main-content');
const sidebarToggle = document.getElementById('sidebarToggle');
sidebarToggle.addEventListener('click', () => {
sidebar.classList.toggle('active');
mainContent.classList.toggle('active');
});
});
</script>