diff --git a/src/app.css b/src/app.css index d690981..aed1d0e 100644 --- a/src/app.css +++ b/src/app.css @@ -245,6 +245,102 @@ a:hover { color: var(--header-text-hover); } +/* Mobile Hamburger Menu */ +.mobile-menu-btn { + display: none; + background: none; + border: none; + cursor: pointer; + padding: 10px; + z-index: 1100; +} + +.mobile-menu-btn span { + display: block; + width: 25px; + height: 3px; + background-color: var(--header-text); + margin: 5px 0; + transition: all 0.3s; + border-radius: 2px; +} + +.mobile-menu-btn.open span:nth-child(1) { + transform: rotate(45deg) translate(5px, 6px); +} + +.mobile-menu-btn.open span:nth-child(2) { + opacity: 0; +} + +.mobile-menu-btn.open span:nth-child(3) { + transform: rotate(-45deg) translate(5.5px, -6.5px); +} + +@media screen and (max-width: 767px) { + .header .container { + justify-content: space-between; + } + .header .brand { + position: static; + z-index: 1100; + } + .mobile-menu-btn { + display: block; + } + .header nav { + position: absolute; + top: 58px; + left: 0; + width: 100%; + height: 0; + overflow: hidden; + flex-direction: column; + background-color: var(--header-bg); + transition: height 0.3s ease; + justify-content: flex-start; + } + @supports (backdrop-filter: blur(10px)) or (-webkit-backdrop-filter: blur(10px)) { + .header nav { + background-color: var(--header-bg-blur); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + } + } + .header nav.open { + height: calc(100vh - 58px); + overflow-y: auto; + } + .header nav a, + .header nav .nav-dropdown-trigger { + width: 100%; + padding: 15px 20px; + font-size: 1.1rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + justify-content: flex-start; + } + .header nav .nav-dropdown { + flex-direction: column; + align-items: flex-start; + width: 100%; + height: auto; + } + .header nav .dropdown-menu { + position: static; + width: 100%; + box-shadow: none; + border: none; + background-color: rgba(255, 255, 255, 0.05); + opacity: 1; + pointer-events: auto; + transform: none; + display: none; + } + .header nav .nav-dropdown:hover .dropdown-menu { + display: block; + } +} + /* DoIt Style Home Profile */ .home-profile { text-align: center; @@ -1174,9 +1270,11 @@ footer section p:first-child { transition: 0.3s; } -.ctrler-item a:hover { - background-color: var(--accent-color); - opacity: 1; +@media (hover: hover) { + .ctrler-item a:hover { + background-color: var(--accent-color); + opacity: 1; + } } /* ========== VOID 风格 TOC (侧栏目录) ========== */ @@ -1364,8 +1462,10 @@ footer section p:first-child { color: #cececf; } -#toggle-toc:hover { - background-color: var(--accent-color); +@media (hover: hover) { + #toggle-toc:hover { + background-color: var(--accent-color); + } } #toggle-toc svg, @@ -1386,6 +1486,15 @@ footer section p:first-child { } } +/* 移动端默认不显示目录 */ +@media screen and (max-width: 767px) { + #toggle-toc, + .TOC, + .toc-mask { + display: none !important; + } +} + /* Tags Styling (VOID style) */ .tags { margin: 1.5rem 0; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index e2d12bd..103c32d 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -8,6 +8,7 @@ let scrolled = $state(false); let uptimeText = $state(''); + let isMobileMenuOpen = $state(false); function calcUptime(launchDate: string): string { if (!launchDate) return ''; @@ -55,31 +56,50 @@ {@render children()} {:else}
-
+
- {$page.data.site?.title || 'BlogFlare'} -