Skip to content

Commit def87b2

Browse files
committed
Add left sidebar toggle.
1 parent 04ca2f5 commit def87b2

File tree

2 files changed

+111
-2
lines changed

2 files changed

+111
-2
lines changed

assets/css/style.css

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1019,4 +1019,89 @@ footer {
10191019
padding: 1rem;
10201020
min-height: 200px;
10211021
}
1022-
}
1022+
}
1023+
1024+
/* Sidebar Toggle & Overlay */
1025+
.header-left {
1026+
display: flex;
1027+
align-items: center;
1028+
gap: 1rem;
1029+
}
1030+
1031+
.menu-toggle {
1032+
display: flex; /* Always visible now */
1033+
background: rgba(255, 255, 255, 0.2);
1034+
border: none;
1035+
border-radius: 50%;
1036+
width: 36px;
1037+
height: 36px;
1038+
align-items: center;
1039+
justify-content: center;
1040+
cursor: pointer;
1041+
color: #fff;
1042+
backdrop-filter: blur(4px);
1043+
transition: background 0.2s;
1044+
font-size: 1.2rem;
1045+
}
1046+
1047+
.menu-toggle:hover {
1048+
background: rgba(255, 255, 255, 0.3);
1049+
}
1050+
1051+
.sidebar-overlay {
1052+
position: fixed;
1053+
top: 0;
1054+
left: 0;
1055+
right: 0;
1056+
bottom: 0;
1057+
background: rgba(0,0,0,0.5);
1058+
z-index: 999;
1059+
opacity: 0;
1060+
pointer-events: none;
1061+
transition: opacity 0.3s ease;
1062+
backdrop-filter: blur(2px);
1063+
}
1064+
1065+
/* Desktop Styles (Default) */
1066+
.sidebar {
1067+
transition: transform 0.3s ease;
1068+
}
1069+
1070+
.main-content {
1071+
transition: margin-left 0.3s ease;
1072+
}
1073+
1074+
/* Desktop Closed State */
1075+
body.sidebar-closed .sidebar {
1076+
transform: translateX(-100%);
1077+
}
1078+
1079+
body.sidebar-closed .main-content {
1080+
margin-left: 0;
1081+
}
1082+
1083+
/* Mobile Styles */
1084+
@media (max-width: 768px) {
1085+
.sidebar {
1086+
display: flex !important;
1087+
transform: translateX(-100%); /* Default hidden on mobile */
1088+
z-index: 1000;
1089+
}
1090+
1091+
/* Mobile Open State */
1092+
body.sidebar-open .sidebar {
1093+
transform: translateX(0);
1094+
box-shadow: 2px 0 10px rgba(0,0,0,0.5);
1095+
}
1096+
1097+
body.sidebar-open .sidebar-overlay {
1098+
opacity: 1;
1099+
pointer-events: auto;
1100+
}
1101+
}
1102+
1103+
1104+
1105+
1106+
1107+

index.html

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,21 @@
6969
</div>
7070
</aside>
7171

72+
<!-- Sidebar Overlay -->
73+
<div class="sidebar-overlay" onclick="toggleSidebar()"></div>
74+
7275
<!-- Main Content Area -->
7376
<main class="main-content">
7477

7578
<!-- Header / Hero -->
7679
<header class="main-header">
7780
<div class="header-top">
78-
<div class="version-badge">v1.7.17</div>
81+
<div class="header-left">
82+
<button class="menu-toggle" onclick="toggleSidebar()">
83+
<ion-icon name="menu-outline"></ion-icon>
84+
</button>
85+
<div class="version-badge">v1.7.17</div>
86+
</div>
7987
<div class="header-actions">
8088
<button class="lang-switch" title="Switch Language" onclick="toggleLanguage()">
8189
<span style="font-size: 0.8rem; font-weight: 700;">EN</span>
@@ -270,6 +278,22 @@ <h4>Zero Configuration</h4>
270278
document.documentElement.setAttribute('data-theme', savedTheme);
271279
updateThemeIcon(savedTheme);
272280

281+
// Sidebar Toggle Logic
282+
function toggleSidebar() {
283+
if (window.innerWidth < 768) {
284+
document.body.classList.toggle('sidebar-open');
285+
document.body.classList.remove('sidebar-closed'); // Reset desktop state just in case
286+
} else {
287+
document.body.classList.toggle('sidebar-closed');
288+
document.body.classList.remove('sidebar-open'); // Reset mobile state just in case
289+
}
290+
}
291+
292+
// Close sidebar when clicking overlay (Mobile only)
293+
document.querySelector('.sidebar-overlay').addEventListener('click', function() {
294+
document.body.classList.remove('sidebar-open');
295+
});
296+
273297
// Language Switcher (Mock implementation for demo)
274298
const translations = {
275299
'zh': {

0 commit comments

Comments
 (0)