Gemini撸出来的
手机端适配
预览图
<!DOCTYPE html><html><head> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>xxxx for <##title##></title> <style> /* CSS 变量,便于全局修改风格 */ :root { --primary-color: #007bff; /* 蓝色作为强调色,但侧边栏选中项将使用黑色系 */ --text-color: #212529; /* 深色文本,在白色背景下更清晰 */ --light-text-color: #495057; /* 浅色文本 */ --background-color: #ffffff; /* 主体背景改为白色 */ --surface-color: rgba(248, 249, 250, 0.8); /* 浅灰半透明表面,接近白色 */ --border-color: rgba(0, 0, 0, 0.1); /* 浅边框颜色 */ --transition-duration: 0.4s; --box-shadow-light: 0 4px 15px rgba(0, 0, 0, 0.08); /* 调整阴影使其在白色背景下更明显 */ --box-shadow-hover: 0 8px 25px rgba(0, 0, 0, 0.15); --dark-selection-bg: #343a40; /* 黑色系选中背景 */ --dark-selection-text: #ffffff; /* 黑色系选中文字颜色 */ } /* 通用样式重置 */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html, body { font-family: 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; font-size: 16px; line-height: 1.6; color: var(--text-color); background-color: var(--background-color); height: 100%; display: flex; flex-direction: column; overflow-x: hidden; /* 防止水平滚动条 */ transition: background-color var(--transition-duration) ease, color var(--transition-duration) ease; } a { color: var(--primary-color); text-decoration: none; transition: color var(--transition-duration) ease; } a:hover { color: #0056b3; } /* 移动端头部栏样式 */ .mobile-header { display: none; /* 默认在桌面端隐藏 */ background-color: #ffffff; /* 顶栏主体改为白色 */ color: var(--text-color); /* 顶栏文字颜色 */ padding: 10px 20px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); /* 调整阴影 */ align-items: center; justify-content: space-between; position: fixed; /* 固定在顶部 */ top: 0; left: 0; right: 0; z-index: 999; /* 确保在内容之上,侧边栏之下 */ height: 60px; /* 固定高度 */ transition: background-color var(--transition-duration) ease, box-shadow var(--transition-duration) ease; } .mobile-header .header-title { font-size: 1.3rem; font-weight: bold; flex-grow: 1; text-align: center; padding-left: 20px; /* 为汉堡菜单图标留出空间 */ padding-right: 10px; white-space: nowrap; /* 防止标题换行 */ overflow: hidden; /* 隐藏溢出部分 */ text-overflow: ellipsis; /* 溢出时显示省略号 */ } /* 汉堡菜单按钮样式 (调整为在mobile-header中) */ .menu-toggle { position: static; /* 不再是fixed定位 */ display: flex; /* 默认在桌面端隐藏,但在 mobile-header 中需 flex */ width: 30px; height: 30px; flex-direction: column; justify-content: space-around; padding: 0; /* 移除内边距 */ cursor: pointer; background-color: transparent; /* 透明背景 */ border-radius: 8px; box-shadow: none; /* 移除阴影 */ transition: transform var(--transition-duration) ease; } .menu-toggle:hover { transform: scale(1.05); } .menu-toggle span { display: block; width: 100%; height: 3px; background-color: var(--text-color); /* 汉堡菜单条改为深色文本色 */ border-radius: 2px; transition: all var(--transition-duration) ease; } /* 汉堡菜单打开时的动画效果 */ .menu-toggle.open span:nth-child(1) { transform: translateY(8px) rotate(45deg); } .menu-toggle.open span:nth-child(2) { opacity: 0; } .menu-toggle.open span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); } /* --- 顶部横幅样式 --- */ .top-banner { display: none; /* 默认隐藏,只在桌面端显示 */ background-color: #343a40; /* 深灰色背景 */ color: #ffffff; /* 白色文字 */ text-align: center; padding: 15px 20px; font-size: 1.1rem; font-weight: bold; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); position: sticky; /* 粘性定位 */ top: 0; left: 0; right: 0; z-index: 990; /* 在内容之上,低于 mobile-header */ } /* --- 布局容器 --- */ .container { display: flex; flex-grow: 1; max-width: 1200px; margin: 0 auto; padding: 20px; gap: 20px; width: 100%; } /* --- 侧边栏 --- */ .sidebar { width: 280px; background-color: var(--surface-color); border-radius: 20px; padding: 20px; box-shadow: var(--box-shadow-light); transition: all var(--transition-duration) ease; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border: 1px solid var(--border-color); flex-shrink: 0; will-change: transform, box-shadow; } .sidebar:hover { box-shadow: var(--box-shadow-hover); transform: translateY(-2px); } .sidebar-menu ul { list-style: none; } /* 侧边栏每个菜单项的“玻璃卡片”效果 */ .sidebar-menu > ul > li { background-color: rgba(255, 255, 255, 0.9); /* 更接近白色,减少透明度 */ border: 1px solid rgba(0, 0, 0, 0.08); /* 浅边框 */ border-radius: 12px; padding: 10px; margin-bottom: 12px; backdrop-filter: blur(5px); transition: all var(--transition-duration) ease; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03); /* 调整阴影 */ will-change: transform, box-shadow; } .sidebar-menu > ul > li:hover { background-color: rgba(250, 250, 250, 0.95); /* 悬停时略微变色 */ transform: scale(1.01); /* 轻微缩放 */ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); } .sidebar-menu a { display: block; padding: 8px 15px; border-radius: 8px; color: var(--light-text-color); transition: all var(--transition-duration) ease; } /* 选中项的样式 - 黑色系主体 */ .menuactive > .menulinkactive { background-color: var(--dark-selection-bg); /* 黑色系背景 */ color: var(--dark-selection-text); /* 白色文字 */ font-weight: bold; border-radius: 8px; box-shadow: 0 6px 15px rgba(0, 0, 0, 0.25); /* 较强的阴影 */ transform: translateY(-2px); text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); /* 略微文字阴影 */ } .menuactive > .menulinkactive:hover { background-color: #495057; /* 悬停时略微变浅 */ color: white; transform: translateY(-4px); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3); } /* 子菜单调整 */ .sidebar-menu ul ul { margin-top: 8px; padding-left: 15px; } .sidebar-menu ul ul a { font-size: 0.9em; padding: 6px 10px; } /* --- 主内容区域 --- */ .main-content { flex-grow: 1; display: flex; flex-direction: column; gap: 20px; } .page-content { flex-grow: 1; padding: 30px; background: linear-gradient(135deg, rgba(255,255,255,0.95), rgba(255,255,255,0.9)); /* 更白的渐变背景 */ border-radius: 20px; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); box-shadow: var(--box-shadow-light); border: 1px solid rgba(0, 0, 0, 0.1); /* 浅边框 */ transition: all var(--transition-duration) ease; will-change: transform, box-shadow; } .page-content:hover { box-shadow: var(--box-shadow-hover); transform: translateY(-2px); } .page-content h1 { font-size: 2.5rem; margin-bottom: 10px; color: var(--text-color); } .page-content h2 { font-size: 1.2rem; color: var(--light-text-color); margin-bottom: 30px; } /* 面板间隔 */ .overview, .details { margin-bottom: 20px; } /* 表格响应式容器 */ .table-responsive { width: 100%; overflow-x: auto; /* 允许水平滚动 */ -webkit-overflow-scrolling: touch; /* iOS 上的平滑滚动 */ } /* 页脚 */ .footer { padding: 20px 30px; text-align: center; color: var(--light-text-color); font-size: 0.8rem; border-top: 1px solid var(--border-color); margin-top: 20px; flex-shrink: 0; transition: opacity var(--transition-duration) ease, border-color var(--transition-duration) ease; will-change: opacity; } /* 隐藏 filter */ .filter { display: none; } /* --- 响应式设计 --- */ /* 桌面端 (min-width: 993px) */ @media (min-width: 993px) { .mobile-header { display: none; /* 桌面端隐藏移动头部 */ } .menu-toggle { display: none; /* 桌面端隐藏汉堡菜单 */ } .top-banner { display: block; /* **桌面端显示顶部横幅** */ } /* 桌面端 container 顶部间距根据横幅高度调整 */ .container { padding-top: 20px; /* 现有顶部间距 */ /* 考虑到 top-banner 是 sticky,实际内容会从 banner 下方开始 */ /* 如果希望内容完全在 banner 下方,可以给 body 或 main-content 加上 margin-top */ } body { padding-top: 0; /* 确保 body 没有额外的顶部 padding */ } } /* 小于或等于 992px 的屏幕 */ @media (max-width: 992px) { .mobile-header { display: flex; /* 在小屏幕显示头部栏 */ } .top-banner { display: none; /* 移动端隐藏顶部横幅 */ } /* 调整 container 顶部间距以避开固定头部栏 */ .container { flex-direction: column; padding: 10px; gap: 10px; padding-top: 70px; /* 为固定头部栏留出空间 (mobile-header 高度 60px + 10px 间距) */ } .sidebar { width: 100%; margin-top: 0; box-shadow: none; transform: none; position: static; /* 992px以下侧边栏不再是fixed,而是跟随文档流 */ padding-top: 0; /* 移除内边距调整 */ } .sidebar-menu > ul > li { transform: none; } .page-content:hover { transform: none; box-shadow: var(--box-shadow-light); } } /* 小于或等于 768px 的屏幕 (真正的小型移动设备) */ @media (max-width: 768px) { .sidebar { position: fixed; /* 侧边栏固定定位,以便从左侧滑出 */ left: -250px; /* 默认隐藏在屏幕左侧,250px 与宽度一致 */ top: 0; bottom: 0; z-index: 1000; /* 在所有内容之上 */ width: 250px; /* 侧边栏宽度 */ padding: 15px; box-shadow: 2px 0 5px rgba(0,0,0,0.1); background-color: rgba(255, 255, 255, 0.95); border: none; margin-top: 0; padding-top: 70px; /* 为固定头部栏留出空间 */ overflow-y: auto; /* 侧边栏内容过多时允许滚动 */ transition: left var(--transition-duration) ease; /* 确保 left 属性有过渡效果 */ } .sidebar.show { left: 0; /* 当有 'show' 类时,滑入显示 */ } /* 遮罩层样式 */ .overlay { display: none; /* 默认隐藏 */ position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.5); /* 半透明黑色 */ z-index: 990; /* 在侧边栏之下,内容之上 */ transition: opacity var(--transition-duration) ease; opacity: 0; } .overlay.show { display: block; /* 当侧边栏显示时,显示遮罩 */ opacity: 1; } /* 当侧边栏打开时,禁用主页面的滚动 */ body.no-scroll { overflow: hidden; } } </style></head><body> <header class="mobile-header" id="mobile-header"> <div class="menu-toggle" id="menu-toggle"> <span></span> <span></span> <span></span> </div> <div class="header-title"> xxxxx for <##title##> </div></header><div class="top-banner"> - xxxxx for SmokePing -</div><div class="overlay" id="overlay"></div><div class="container"> <aside class="sidebar" id="sidebar"> <nav class="sidebar-menu"> <##menu##> </nav> </aside> <div class="main-content"> <main class="page-content"> <h1><##title##></h1> <h2><##remark##></h2> <section class="overview"> <div class="table-responsive"> <##overview##> </div> </section> <section class="details"> <div class="table-responsive"> <##body##> </div> </section> </main> <footer class="footer"> <p class="footer-right"><small>Running on <##smokeping##> by <##author##></small></p> <p><small>Maintained by <a href="mailto:<##contact##>"><##owner##></a></small></p> </footer> </div></div><script> document.addEventListener('DOMContentLoaded', function() { const menuToggle = document.getElementById('menu-toggle'); const sidebar = document.getElementById('sidebar'); const overlay = document.getElementById('overlay'); const body = document.body; function toggleSidebar() { sidebar.classList.toggle('show'); menuToggle.classList.toggle('open'); overlay.classList.toggle('show'); body.classList.toggle('no-scroll'); // 切换 body 的滚动状态 } // 点击汉堡菜单时切换侧边栏 menuToggle.addEventListener('click', toggleSidebar); // 点击遮罩层时关闭侧边栏 overlay.addEventListener('click', toggleSidebar); // 可选:如果侧边栏内的链接被点击,也关闭侧边栏 const sidebarLinks = sidebar.querySelectorAll('a'); sidebarLinks.forEach(link => { link.addEventListener('click', function(event) { // 如果是移动端且侧边栏可见,则关闭 if (window.innerWidth <= 768 && sidebar.classList.contains('show')) { toggleSidebar(); } }); }); // 监听窗口大小变化,当从移动端变回桌面端时,确保侧边栏状态重置 window.addEventListener('resize', function() { if (window.innerWidth > 768) { sidebar.classList.remove('show'); menuToggle.classList.remove('open'); overlay.classList.remove('show'); body.classList.remove('no-scroll'); } }); });</script><script src="js/prototype.js" type="text/javascript"></script><script src="js/scriptaculous/scriptaculous.js?load=builder,effects,dragdrop" type="text/javascript"></script><script src="js/cropper/cropper.js" type="text/javascript"></script><script src="js/smokeping.js" type="text/javascript"></script></body></html>
评论 (0)