惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
O
OpenAI News
V
Vulnerabilities – Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
S
Schneier on Security
Latest news
Latest news
F
Full Disclosure
T
Tenable Blog
T
Troy Hunt's Blog
The Last Watchdog
The Last Watchdog
S
Secure Thoughts
L
LangChain Blog
有赞技术团队
有赞技术团队
Project Zero
Project Zero
Cloudbric
Cloudbric
爱范儿
爱范儿
GbyAI
GbyAI
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
The Exploit Database - CXSecurity.com
S
Security @ Cisco Blogs
Hugging Face - Blog
Hugging Face - Blog
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
C
Cisco Blogs
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V2EX - 技术
V2EX - 技术
Engineering at Meta
Engineering at Meta
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Schneier on Security
Schneier on Security
T
Threat Research - Cisco Blogs
M
MIT News - Artificial intelligence
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
K
Kaspersky official blog
The Hacker News
The Hacker News
V
V2EX
F
Fortinet All Blogs
L
LINUX DO - 最新话题
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News | PayPal Newsroom
博客园 - 三生石上(FineUI控件)
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - 华腾智算

smart-water 融合多端协同总体架构设计方案 现代前端架构的核心思想 极简设计框架 多端统一设计理念 一套规则,多端伸缩的UI设计理念 现代栅格设计之一 设计中的栅格系统 智慧水利顶层设计之何为“水利矩阵”与“数字孪生” 从古典Web到AI原生超级应用:团队学习路线与未来架构蓝图 最新架构设计 前端代码规范 v1.0 树型菜单全功能代码 最终最佳实践操作文档:统信UOS VSCode 全栈开发环境配置(基于 Chromium 浏览器) vscode-setting.json配置 VSCode 全栈开发环境初始化设置与跨平台配置指南(Windows/macOS 通用) VScode完整的跨平台适配方案 完整的跨平台 settings.json(飞雪飘鸿优化版) 数字孪生破局之道 完整的GLFW应用程序示例 雏形 程序方向 web三维 第一步,第一行,开始 绘制三角形 明确目标 从文本文件加载指令到模拟内存中,并显示前11个内存单元的内容 使用Python的pydub库播放音乐并打印二进制数据 python的音频处理 python加密与解密 mainwindows.cpp 十进制数213转换为二进制数的完整过程,使用除2取余法(也称为“重复除法法”) 二进制数 \((-1101.101)_2\) 转换为十进制数 - 华腾智算
跨平台弹性栅格理念设计
华腾智算 · 2026-07-16 · via 博客园 - 华腾智算

针对你描述的现代通用后台管理系统经典布局(顶部通栏 + 左侧双菜单 + 右侧多标签内容区),结合我们上几轮建立的跨平台弹性栅格理念,我给出以下详细方案。整体原则:用命名网格区域代替固定列数,用弹性轨道适配右侧内容,用一套间距令牌统一三端,并可平滑折叠至手机和大屏。


一、整体框架:CSS Grid 页面级布局

使用 Grid 命名区域 定义骨架,结构清晰、无固定列数:

.admin-layout {
  display: grid;
  grid-template-areas:
    "header  header  header"
    "nav-main nav-sub  content"
    "nav-main nav-sub  content";
  grid-template-columns: auto auto 1fr;  /* 主菜单、副菜单宽度自适应内容,内容区弹性 */
  grid-template-rows: 56px 1fr;         /* 顶部固定高度,下方撑满 */
  height: 100vh;
  overflow: hidden;
}

区域分配:

  • header:顶部通栏(Logo、折叠按钮、顶部菜单、工具栏)
  • nav-main:左侧主菜单(图标+文字,可折叠)
  • nav-sub:左侧副菜单(二级菜单树,可选隐藏)
  • content:右侧主内容区(标签栏+工具栏+内容)

这种网格完全摆脱了列数概念,只关心区域比例和最小宽度


二、各区域详细参数(桌面基准 1920×1080)

  • 高度56px(标准后台高度,触控友好)
  • 内边距:左右 24px,垂直居中
  • 布局:Flex,justify-content: space-between
  • 元素:Logo(固定宽度180px)、折叠按钮、顶部横向菜单(flex)、右侧工具栏(通知、用户头像等)
  • 背景:深色或主色,保持顶层固定。

2. 左侧主菜单 (nav-main)

  • 宽度
    • 展开:220px(包含图标+文字)
    • 折叠:64px(仅图标,通过JS切换类名改变grid列宽)
  • 实现:通过 grid-template-columns: 220px auto 1fr 切换为 64px auto 1fr(副菜单可一起隐藏或独立控制)。
  • 滚动overflow-y: auto,菜单项采用垂直列表。

3. 左侧副菜单 (nav-sub)

  • 宽度220px(与主菜单统一或略窄为180px),可独立折叠。
  • 可见性:当主菜单某项激活且有子级时显示,否则隐藏(通过修改grid-template-areas或设置宽度为0)。
  • 背景:比主菜单稍浅,形成层级。

4. 右侧内容区 (content)

内容区是栅格应用的核心,它由三部分组成:标签栏、工具栏、内容主体

我们将其内部设计为一个垂直Flex容器,高度撑满网格行:

.content-area {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: var(--bg-content);
}

4.1 标签栏 (tab-bar)

  • 高度40px
  • 布局:Flex横向,标签可滚动,右侧有操作按钮。
  • 间距:标签之间 4px,左右内边距 12px

4.2 工具栏 (toolbar)

  • 高度48px(自适应内容)
  • 内边距12px 24px
  • 布局:Flex,左侧放置筛选器、按钮等,右侧放置搜索等。

4.3 内容主体(核心网格区)

这里是弹性网格的直接应用。不限定24列,而是用 auto-fitminmax 让内容自适应。

通用内容网格容器:

.content-body {
  flex: 1;
  overflow-y: auto;
  padding: 24px;
  /* 针对仪表板类卡片使用弹性网格 */
}
.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 24px;
  align-content: start;
}

对于表单、详情页等非卡片型内容,则采用定宽弹性容器或单列布局,不使用强制的多列网格。表格直接撑满容器宽度即可。


三、现代栅格细节与令牌体系

1. 间距令牌(8px 基准,跨平台统一)

令牌 桌面值 用途
--space-xs 4px 标签间距
--space-sm 8px 工具栏元素小间隙
--space-md 12px 标签栏内边距
--space-lg 16px 菜单项内边距
--space-xl 24px 内容区内边距、卡片间隙
--space-2xl 32px 区块大分隔
--space-3xl 48px 较少使用,页面级留白

2. 内容区最大宽度与伸缩

  • 当右侧内容区宽度较大时(如1920屏,侧边栏均展开时内容区约 1920-220-220=1480px),卡片网格自然呈现 4–5 列。
  • 不设置最大宽度(后台系统需利用宽屏展示更多数据),但可对单行文本宽度过大的表格设置 max-width: 100% 确保不溢出。
  • 若希望某些仪表板模块限制阅读宽度,可包裹 max-width: 1440px; margin: 0 auto;

3. 内容网格列宽建议

  • 仪表板卡片minmax(300px, 1fr) 保证卡片最小宽度舒适。
  • 表格/列表:直接填充,无需网格。
  • 复杂表单:使用 grid-template-columns: 1fr 1fr1fr 2fr 等固定比例,而非列数。

四、关键交互与状态变化(如何用现代网格处理)

1. 主菜单折叠

切换 nav-main 宽度从 220px64px,修改 grid-template-columns 即可,右侧内容自动伸缩。副菜单可同时隐藏或跟随显示。

2. 副菜单的显示/隐藏

通过动态修改 grid-template-areas

"header  header  header"
"nav-main content content"   // 副菜单区域被移除

或设置 nav-sub 宽度为 0overflow: hidden 平滑过渡。

3. 响应式收缩到平板/小屏

当屏幕宽度不足以容纳双菜单时(如 < 1024px),通过媒体查询或容器查询改变布局:

  • 小于1024px:隐藏副菜单,甚至将主菜单折叠为图标模式。
  • 小于768px:顶部固定,菜单变为抽屉式覆盖,使用绝对定位或转换Grid为单列。
@media (max-width: 1024px) {
  .admin-layout {
    grid-template-columns: 64px 0 1fr;  /* 主菜单折叠,副菜单隐藏 */
  }
}
@media (max-width: 768px) {
  .admin-layout {
    grid-template-areas:
      "header"
      "content";
    grid-template-columns: 1fr;
  }
  .nav-main {
    position: fixed;
    left: 0; top: 56px;
    height: calc(100vh - 56px);
    transform: translateX(-100%);
    transition: transform 0.3s;
  }
  .nav-main.open {
    transform: translateX(0);
  }
}

五、手机端适配(1080×2400px,360dp基准)

遵循同一套HTML结构,仅改变CSS变量和Grid定义

  • 布局切换:顶部通栏保留,左侧菜单变为底部TabBar或抽屉,右侧内容区全宽。
  • 内容网格:卡片 minmax(160px, 1fr),保证手机一列或两列。
  • 间距:全局 --space-xl 降为 16px,工具栏内边距减少。
  • 标签栏:可改为横向滚动,高度不变。

典型手机端CSS覆盖

body.mobile .admin-layout {
  grid-template-areas:
    "header"
    "content";
  grid-template-columns: 1fr;
  grid-template-rows: 56px 1fr;
}
body.mobile .card-grid {
  --grid-min-col: 160px;
  --grid-gap: 12px;
}
body.mobile .content-body {
  padding: 16px;
}

左侧菜单通过底部导航或浮动按钮触发,不再占位。


六、户外大屏(3840×1680设计画布)适配

大屏上后台系统可能作为监控看板使用,布局可调整为:

  • 顶部通栏:稍高(64px),间距加大。
  • 左侧菜单:可默认折叠,或变更为独立的仪表板选择区。
  • 内容区:利用大量卡片网格,minmax(500px, 1fr) 使单卡变大,适应远距离观看。
  • 间距--space-xl 提升至 48px

通过添加 .bigscreen 类覆盖变量实现,HTML结构不变。


七、设计交付与开发协作要点

  1. Figma设计稿:桌面端画布1920×1080,使用自动布局和网格功能构建弹性卡片区,菜单使用固定宽度。标注时只需说明最小列宽和间距令牌名。
  2. 开发组件库:封装 AdminLayout 组件,接收 collapsedshowSubNav 等参数,内部基于CSS Grid实现。
  3. 栅格辅助线:设计工具中可沿用24列作为视觉对齐参考(水槽16px),但开发时不依赖它,直接映射弹性网格。
  4. 验收标准:在不同宽度下,卡片自动增减列数,菜单折叠平滑,间距一致,表格和表单不出现异常拉伸。

八、完整CSS骨架示例

:root {
  --header-h: 56px;
  --nav-main-w: 220px;
  --nav-sub-w: 220px;
  --grid-min-col: 300px;
  --grid-gap: 24px;
  --pad-content: 24px;
}

.admin-layout {
  display: grid;
  grid-template-areas:
    "head   head   head"
    "navm   navs   main";
  grid-template-columns: var(--nav-main-w) var(--nav-sub-w) 1fr;
  grid-template-rows: var(--header-h) 1fr;
  height: 100vh;
}
.header { grid-area: head; }
.nav-main { grid-area: navm; overflow-y: auto; }
.nav-sub { grid-area: navs; overflow-y: auto; }
.content { grid-area: main; display: flex; flex-direction: column; }
.tab-bar { height: 40px; flex-shrink: 0; }
.toolbar { height: 48px; flex-shrink: 0; }
.content-body { flex: 1; overflow-y: auto; padding: var(--pad-content); }

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(var(--grid-min-col), 1fr));
  gap: var(--grid-gap);
}

通过修改CSS变量即可实现折叠、响应式和多端适配,完全符合现代栅格设计趋势,同时完美满足后台管理系统的所有功能区域需求。