<div class="tab-menu-demo">
<div class="tab-container">
<nav class="tab-nav">
<div class="tab-list" role="tablist">
<button class="tab-button active" data-tab="overview" role="tab" aria-selected="true">
<span class="tab-icon">π</span>
<span class="tab-text">Overview</span>
</button>
<button class="tab-button" data-tab="analytics" role="tab" aria-selected="false">
<span class="tab-icon">π</span>
<span class="tab-text">Analytics</span>
</button>
<button class="tab-button" data-tab="reports" role="tab" aria-selected="false">
<span class="tab-icon">π</span>
<span class="tab-text">Reports</span>
</button>
<button class="tab-button" data-tab="settings" role="tab" aria-selected="false">
<span class="tab-icon">βοΈ</span>
<span class="tab-text">Settings</span>
</button>
<button class="tab-button" data-tab="team" role="tab" aria-selected="false">
<span class="tab-icon">π₯</span>
<span class="tab-text">Team</span>
</button>
</div>
<div class="tab-indicator"></div>
</nav>
<div class="tab-content">
<div class="tab-panel active" id="overview" role="tabpanel">
<div class="panel-content">
<h3>π Overview Dashboard</h3>
<p>Welcome to your main dashboard. Here you can see a summary of all your important metrics and recent activities.</p>
<div class="stats-grid">
<div class="stat-card">
<div class="stat-number">2,847</div>
<div class="stat-label">Total Users</div>
</div>
<div class="stat-card">
<div class="stat-number">$12,450</div>
<div class="stat-label">Revenue</div>
</div>
<div class="stat-card">
<div class="stat-number">94.2%</div>
<div class="stat-label">Uptime</div>
</div>
</div>
</div>
</div>
<div class="tab-panel" id="analytics" role="tabpanel">
<div class="panel-content">
<h3>π Analytics Center</h3>
<p>Dive deep into your data with comprehensive analytics and insights.</p>
<div class="chart-placeholder">
<div class="chart-bar" style="height: 60%;"></div>
<div class="chart-bar" style="height: 80%;"></div>
<div class="chart-bar" style="height: 45%;"></div>
<div class="chart-bar" style="height: 90%;"></div>
<div class="chart-bar" style="height: 70%;"></div>
</div>
</div>
</div>
<div class="tab-panel" id="reports" role="tabpanel">
<div class="panel-content">
<h3>π Reports & Documents</h3>
<p>Access and generate various reports for your business needs.</p>
<div class="report-list">
<div class="report-item">π Monthly Sales Report</div>
<div class="report-item">π User Engagement Analysis</div>
<div class="report-item">π° Financial Summary</div>
<div class="report-item">π― Performance Metrics</div>
</div>
</div>
</div>
<div class="tab-panel" id="settings" role="tabpanel">
<div class="panel-content">
<h3>βοΈ Settings & Configuration</h3>
<p>Customize your application settings and preferences.</p>
<div class="settings-grid">
<div class="setting-item">
<span>π Notifications</span>
<div class="toggle-switch"></div>
</div>
<div class="setting-item">
<span>π Dark Mode</span>
<div class="toggle-switch active"></div>
</div>
<div class="setting-item">
<span>π Two-Factor Auth</span>
<div class="toggle-switch"></div>
</div>
</div>
</div>
</div>
<div class="tab-panel" id="team" role="tabpanel">
<div class="panel-content">
<h3>π₯ Team Management</h3>
<p>Manage your team members and their permissions.</p>
<div class="team-grid">
<div class="team-member">
<div class="member-avatar">π¨βπΌ</div>
<div class="member-name">John Smith</div>
<div class="member-role">Admin</div>
</div>
<div class="team-member">
<div class="member-avatar">π©βπ»</div>
<div class="member-name">Sarah Johnson</div>
<div class="member-role">Developer</div>
</div>
<div class="team-member">
<div class="member-avatar">π¨βπ¨</div>
<div class="member-name">Mike Wilson</div>
<div class="member-role">Designer</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
.tab-menu-demo {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 30px;
border-radius: 16px;
min-height: 320px;
}
.tab-container {
background: white;
border-radius: 12px;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.tab-nav {
position: relative;
background: #f8fafc;
border-bottom: 1px solid #e2e8f0;
}
.tab-list {
display: flex;
position: relative;
overflow-x: auto;
scrollbar-width: none;
-ms-overflow-style: none;
}
.tab-list::-webkit-scrollbar {
display: none;
}
.tab-button {
background: none;
border: none;
padding: 16px 24px;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
font-weight: 500;
color: #64748b;
transition: all 0.3s ease;
white-space: nowrap;
position: relative;
min-width: fit-content;
}
.tab-button:hover {
color: #3b82f6;
background: rgba(59, 130, 246, 0.05);
}
.tab-button.active {
color: #3b82f6;
background: rgba(59, 130, 246, 0.1);
}
.tab-icon {
font-size: 16px;
}
.tab-text {
font-weight: 600;
}
.tab-indicator {
position: absolute;
bottom: 0;
left: 0;
height: 3px;
background: linear-gradient(90deg, #3b82f6 0%, #1d4ed8 100%);
border-radius: 3px 3px 0 0;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
width: 0;
}
.tab-content {
position: relative;
min-height: 250px;
}
.tab-panel {
display: none;
padding: 30px;
animation: fadeIn 0.3s ease-in-out;
}
.tab-panel.active {
display: block;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.panel-content h3 {
margin: 0 0 16px 0;
color: #1e293b;
font-size: 20px;
font-weight: 700;
}
.panel-content p {
color: #64748b;
line-height: 1.6;
margin: 0 0 24px 0;
}
/* Overview Panel Styles */
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 16px;
}
.stat-card {
background: linear-gradient(135deg, #f1f5f9 0%, #e2e8f0 100%);
padding: 20px;
border-radius: 12px;
text-align: center;
border: 1px solid #e2e8f0;
}
.stat-number {
font-size: 24px;
font-weight: 700;
color: #1e293b;
margin-bottom: 4px;
}
.stat-label {
font-size: 12px;
color: #64748b;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Analytics Panel Styles */
.chart-placeholder {
display: flex;
align-items: end;
gap: 12px;
height: 120px;
padding: 20px;
background: #f8fafc;
border-radius: 12px;
border: 1px solid #e2e8f0;
}
.chart-bar {
flex: 1;
background: linear-gradient(180deg, #3b82f6 0%, #1d4ed8 100%);
border-radius: 4px 4px 0 0;
min-height: 20px;
transition: all 0.3s ease;
}
.chart-bar:hover {
transform: scaleY(1.1);
filter: brightness(1.1);
}
/* Reports Panel Styles */
.report-list {
display: flex;
flex-direction: column;
gap: 12px;
}
.report-item {
padding: 16px;
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 8px;
color: #374151;
transition: all 0.3s ease;
cursor: pointer;
}
.report-item:hover {
background: #f1f5f9;
border-color: #3b82f6;
transform: translateX(4px);
}
/* Settings Panel Styles */
.settings-grid {
display: flex;
flex-direction: column;
gap: 16px;
}
.setting-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px;
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 8px;
}
.toggle-switch {
width: 44px;
height: 24px;
background: #e2e8f0;
border-radius: 12px;
position: relative;
cursor: pointer;
transition: all 0.3s ease;
}
.toggle-switch::after {
content: '';
position: absolute;
top: 2px;
left: 2px;
width: 20px;
height: 20px;
background: white;
border-radius: 50%;
transition: all 0.3s ease;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.toggle-switch.active {
background: #3b82f6;
}
.toggle-switch.active::after {
transform: translateX(20px);
}
/* Team Panel Styles */
.team-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 16px;
}
.team-member {
text-align: center;
padding: 20px;
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 12px;
transition: all 0.3s ease;
}
.team-member:hover {
transform: translateY(-4px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
}
.member-avatar {
font-size: 32px;
margin-bottom: 8px;
}
.member-name {
font-weight: 600;
color: #1e293b;
margin-bottom: 4px;
}
.member-role {
font-size: 12px;
color: #64748b;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Responsive */
@media (max-width: 768px) {
.tab-menu-demo {
padding: 16px;
}
.tab-panel {
padding: 20px;
}
.tab-button {
padding: 12px 16px;
font-size: 13px;
}
.stats-grid,
.team-grid {
grid-template-columns: 1fr;
}
}
document.addEventListener('DOMContentLoaded', function() {
const tabButtons = document.querySelectorAll('.tab-button');
const tabPanels = document.querySelectorAll('.tab-panel');
const tabIndicator = document.querySelector('.tab-indicator');
const toggleSwitches = document.querySelectorAll('.toggle-switch');
// Initialize tab indicator position
updateTabIndicator();
// Tab switching functionality
tabButtons.forEach(button => {
button.addEventListener('click', function() {
const targetTab = this.getAttribute('data-tab');
// Remove active class from all buttons and panels
tabButtons.forEach(btn => {
btn.classList.remove('active');
btn.setAttribute('aria-selected', 'false');
});
tabPanels.forEach(panel => {
panel.classList.remove('active');
});
// Add active class to clicked button and corresponding panel
this.classList.add('active');
this.setAttribute('aria-selected', 'true');
const targetPanel = document.getElementById(targetTab);
if (targetPanel) {
targetPanel.classList.add('active');
}
// Update indicator position
updateTabIndicator();
// Show feedback
const tabText = this.querySelector('.tab-text').textContent;
showFeedback(`Switched to: ${tabText}`);
});
});
// Update tab indicator position
function updateTabIndicator() {
const activeButton = document.querySelector('.tab-button.active');
if (activeButton && tabIndicator) {
const buttonRect = activeButton.getBoundingClientRect();
const containerRect = activeButton.parentElement.getBoundingClientRect();
tabIndicator.style.left = (activeButton.offsetLeft) + 'px';
tabIndicator.style.width = activeButton.offsetWidth + 'px';
}
}
// Toggle switches functionality
toggleSwitches.forEach(toggle => {
toggle.addEventListener('click', function() {
this.classList.toggle('active');
const isActive = this.classList.contains('active');
const settingName = this.previousElementSibling.textContent.trim();
showFeedback(`${settingName}: ${isActive ? 'Enabled' : 'Disabled'}`);
});
});
// Report item interactions
const reportItems = document.querySelectorAll('.report-item');
reportItems.forEach(item => {
item.addEventListener('click', function() {
const reportName = this.textContent.trim();
showFeedback(`Opening: ${reportName}`);
});
});
// Team member interactions
const teamMembers = document.querySelectorAll('.team-member');
teamMembers.forEach(member => {
member.addEventListener('click', function() {
const memberName = this.querySelector('.member-name').textContent;
showFeedback(`Viewing profile: ${memberName}`);
});
});
// Chart bar interactions
const chartBars = document.querySelectorAll('.chart-bar');
chartBars.forEach((bar, index) => {
bar.addEventListener('click', function() {
showFeedback(`Chart data point ${index + 1} selected`);
});
});
// Stat card interactions
const statCards = document.querySelectorAll('.stat-card');
statCards.forEach(card => {
card.addEventListener('click', function() {
const statLabel = this.querySelector('.stat-label').textContent;
showFeedback(`Viewing details: ${statLabel}`);
});
});
// Handle window resize for indicator
window.addEventListener('resize', updateTabIndicator);
// Keyboard navigation
document.addEventListener('keydown', function(e) {
if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
const activeButton = document.querySelector('.tab-button.active');
const buttons = Array.from(tabButtons);
const currentIndex = buttons.indexOf(activeButton);
let newIndex;
if (e.key === 'ArrowLeft') {
newIndex = currentIndex > 0 ? currentIndex - 1 : buttons.length - 1;
} else {
newIndex = currentIndex < buttons.length - 1 ? currentIndex + 1 : 0;
}
buttons[newIndex].click();
buttons[newIndex].focus();
}
});
// Feedback function
function showFeedback(message) {
const existing = document.querySelector('.demo-feedback');
if (existing) existing.remove();
const feedback = document.createElement('div');
feedback.className = 'demo-feedback';
feedback.textContent = message;
feedback.style.cssText = `
position: fixed;
top: 20px;
right: 20px;
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
color: white;
padding: 12px 20px;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
z-index: 10001;
box-shadow: 0 4px 15px rgba(59, 130, 246, 0.3);
transform: translateX(100%);
transition: transform 0.3s ease;
`;
document.body.appendChild(feedback);
requestAnimationFrame(() => {
feedback.style.transform = 'translateX(0)';
});
setTimeout(() => {
feedback.style.transform = 'translateX(100%)';
setTimeout(() => feedback.remove(), 300);
}, 2500);
}
// Initial feedback
setTimeout(() => {
showFeedback('Try switching between tabs!');
}, 1000);
});