ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

瑞士国际主义风格页面布局编排:Resume Matcher 可移植设计系统的 Grid 与面板排版实战指南

瑞士国际主义风格页面布局编排:Resume Matcher 可移植设计系统的 Grid 与面板排版实战指南 瑞士国际主义风格页面布局编排Resume Matcher 可移植设计系统的 Grid 与面板排版实战指南【免费下载链接】Resume-MatcherThe #1 AI Harness for Building Resumes, PDFs, Cover Letters more, locally with 100 LLMs support.项目地址: https://gitcode.com/GitHub_Trending/re/Resume-Matcher本指南围绕仓库内可移植设计系统文档 layouts.md 展开系统讲解如何将瑞士国际主义风格Swiss International Style亦称国际字体排印风格 / 粗野主义的设计元件组合成完整页面网格系统、面板头部、非对称留白、打印页面尺寸与字体节奏。读完本文你将掌握一套可直接落地的 Tailwind CSS React/JSX 页面排版范式并能从 Resume Matcher 前端的源码实现中看到这些原则的真实落地形态——无论是仪表盘网格、简历双栏模板还是 PDF 打印渲染都遵循同一套数学化的结构逻辑。设计系统定位布局是网格优先的组合学瑞士风格的设计系统在仓库中是一份自包含self-contained的可移植设计包位于 docs/portable/swiss-design-system/其核心原则强调数学化网格优先于视觉直觉、非对称平衡优先于对称居中、无装饰的硬边几何。其中 layouts.md 专门回答一个问题如何把 tokens.md 定义的设计令牌与 components.md 定义的元件组装成整页。系统奖励数学化网格与非对称平衡惩罚居中装饰性排布——这一判断标准贯穿本文所有小节。布局层依赖的原子基础包括Canvas 暖白背景#F0F0E8绝不使用纯白、Ink 纯黑#000000边框与结构线、4px 间距刻度p-1/p-2/p-4/p-6/p-8/p-12/p-16、以及衬线标题 无衬线正文 等宽元数据的三字体层级。布局组合前建议先通读这些令牌文档因为本文所有类名都建立在这些值之上。网格系统Grid systems先定列数然后坚持瑞士设计是网格优先的动手排版前先选定列数并全程坚持。列数不是装饰选择而是节奏感的来源。仪表盘 / 索引网格5 列的非对称节奏大型集合类内容的推荐形态div classNamegrid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-4 {items.map(item Card key{item.id} {...item} /)} /div关键洞察大屏下使用 5 列是刻意为之——它制造了该风格标志性的非对称节奏。3 列或 4 列同样可行但要避免用 2 列展示集合类内容因为 2 列过于对称、显得呆板。移动端 1 列、平板 2 列、桌面 5 列的断点渐进本身就是先定列数原则在响应式下的延伸。在 Resume Matcher 前端中这一原则有真实落点。swiss-grid.tsx 的仪表盘卡片区使用容器查询container驱动列数grid-cols-1 2xl:grid-cols-2 3xl:grid-cols-3 5xl:grid-cols-5卡片网格跟随容器实际宽度而非视口宽度——因为瑞士风格的外框被约束为max-w-[86rem]超宽屏上卡片不会过度拉伸。这与文档5 列制造非对称节奏的设计意图完全一致并且进一步演进了5 列的触发条件只有当容器宽度达到5xl断点才启用 5 列。注意该实现还用了bg-black gap-[1px]的缝隙网格技巧——黑色背景 1px 间隙让卡片之间的分割线天然呈现 1px 纯黑结构线这与设计系统分割线 1–2px 纯黑、绝不发灰的规则同源。编辑器 预览分栏硬黑分割线定风格构建编辑器 实时预览型界面时div classNameflex h-full div classNamew-1/2 border-r-2 border-black {/* editor */} /div div classNamew-1/2 {/* preview */} /div /div那条 2px 纯黑硬分割线正是瑞士感而非通用感的来源。文档明确警告不要用细灰分割线——那会削弱结构强度。分割线的视觉权重是布局语义的一部分而非可有可无的装饰。这个左右分栏 硬分割线的模式在简历双栏模板中有源码级对应。swiss-two-column.module.css 使用 CSS Grid 定义grid-template-columns: 65% 35%主栏 65%、侧栏 35%主栏通过border-right: 1px solid var(--resume-border-tertiary)建立纵向分割线并用align-items: start保证两栏各自独立滚动排布而不互相拉伸。从源码结构看这里的分割线使用 1px 而非 2px是因为简历正文属于密集内容场景——文档在 tokens.md 中也规定默认 1px、强调 2px密集内容收紧线宽是同一规则的应用。侧边栏 内容区固定宽度流体内容div classNameflex h-full aside classNamew-64 border-r-2 border-black p-6 {/* nav */} /aside main classNameflex-1 p-8 {/* content */} /main /div要点侧边栏固定宽度256px /w-64内容区流体伸缩flex-1。同时文档给出一个反直觉建议抵制用平滑动画做可折叠侧边栏——如果必须折叠就让它瞬间吸附snap而不是带动画曲线。这与设计系统二元binary而非动画的整体气质一致anti-patterns.md 把动画过渡transition-all列为禁忌无过渡或瞬时完成。面板头部Panel headers状态方块 等宽标题每个主要面板都要有一个带标签的头部由状态方块 等宽大写标签构成——这是瑞士风格最具辨识度的点缀defining flourish// Editor panel div classNameflex items-center gap-2 mb-4 div classNamew-3 h-3 bg-blue-700 / span classNamefont-mono text-xs uppercase tracking-widerEditor Panel/span /div // Preview panel div classNameflex items-center gap-2 mb-4 div classNamew-3 h-3 bg-green-700 / span classNamefont-mono text-xs uppercase tracking-widerLive Preview/span /div方块的颜色编码了面板的角色输入、输出、状态等并且要求每个项目只选一次、保持一致。这与 components.md 中状态指示器12px 方块 等宽大写标签、绝不用圆形的规则互为表里——圆形是装饰性几何方块是结构性几何。状态颜色本身取自 tokens.md 的有限色板Hyper Blue#1D4ED8主操作、Signal Green#15803D成功/下载、Alert Orange#F97316警告、Alert Red#DC2626错误/删除不允许为状态临时发明新颜色。留白Whitespace用不均匀内边距制造非对称平衡瑞士风格的非对称平衡来自内容块周围**不均匀uneven**的内边距// Symmetric — feels generic div classNamep-8 h1Title/h1 pBody/p /div // Asymmetric — feels Swiss div classNamept-6 pb-12 pl-8 pr-16 h1Title/h1 pBody/p /div文档给出一个可操作的常用技巧右侧留白多于左侧、底部留白多于顶部。这种方向性权重directional weight会把视线拉着扫过页面——它不是随机的不对称而是有方向的编排。同时要注意非对称留白仍然要建立在 4px 间距刻度上tokens.md 规定pt-6 pb-12 pl-8 pr-16全部落在 6/12/8/16 刻度内自定义间距会破坏节奏。页面尺寸Page dimensions为打印 / PDF 布局锚定标准纸张如果目标是打印输出必须锚定标准纸张尺寸const PAGE_SIZES { A4: { width: 210, height: 297 }, // mm — international standard LETTER: { width: 215.9, height: 279.4 }, // mm — US standard }; // Convert mm to px at 96 DPI const mmToPx (mm: number) mm * 3.7795275591;对基于浏览器的 PDF 渲染如 headless Chromium在打印样式表中设置页面尺寸page { size: A4; margin: 0; }这一节在 Resume Matcher 中有完整的源码级实现比文档示例更进一步。page-dimensions.ts 定义了与文档完全一致的常量PAGE_DIMENSIONS { A4: { width: 210, height: 297 }, LETTER: { width: 215.9, height: 279.4 } }并实现了双向转换mmToPx(mm) (mm / 25.4) * 96换算系数约 3.7795与文档给出的mm * 3.7795275591数学等价、pxToMm(px)逆向换算。该模块还进一步提供了getContentArea(pageSize, margins)按页边距扣除后的可打印内容区尺寸getContentAreaPx(...)与getPageDimensionsPx(...)毫米与像素双模输出calculatePreviewScale(pageWidthMm, containerWidthPx)计算页面在容器内的预览缩放比例用于屏幕预览与打印稿的尺寸一致性。这印证了文档的深层意图页面尺寸不是打印时才考虑的事而是贯穿 PDF 模板设计、屏幕预览与最终渲染的同一套数学基准。仓库中apps/backend/app/pdf.py与 pdf-template-guide.md 配套负责浏览器端 PDF 渲染链路page规则正是打印样式表的标准入口。字体节奏Typography rhythm标题贴近其引入的内容标题应该更靠近它引入的内容而不是更靠近上方的其他内容——而浏览器默认边距恰恰相反必须修正h2 classNamefont-serif text-2xl font-bold mt-12 mb-2Section Title/h2 p classNamefont-sansContent directly under the header./p文档将mt-12 mb-2垂直方向非对称定为默认值并建议下意识地使用它。这与 tokens.md 的角色映射表严格对应章节标题用font-serifGeorgia / Times 系xl–2xl 加粗锚定主区块正文用font-sansInter / Helvetica / system-ui基准字号。字体节奏与留白节奏共享同一套非对称哲学——上下间距的不均衡既是视觉风格也是信息分组的语义工具标题与其下内容在视觉上成组与上方区块分离。布局层反模式什么不能做布局特有的反模式清单完整清单见 anti-patterns.md不要全局居中——瑞士风格默认左对齐不要用卡片轮播carousel——直接展示网格内容不该被藏起来不要弱化分割线——边框必须是 1–2px 纯黑绝不发灰不要给面板过渡加动画——它们应当瞬间切换snap。这些条目在 anti-patterns.md 中还有更细的展开与pre-merge checklist合并前检查清单页面背景必须是 Canvas 而非纯白、内容默认左对齐、主要区块的内边距必须非对称、面板间分割线 1–2px 纯黑、无动画过渡最终用眯眼测试squint test自检——去掉除黑与一个强调色之外的所有颜色布局是否依然可读、是否依然一眼瑞士而非普通 SaaS 应用。这也是从看起来差不多对到真正符合风格的最后一道关卡。结语从元件到整页的统一语法本文继承并展开的 layouts.md 给出了一套从元件到整页的组合语法先定网格列数1→2→5、用 2px 纯黑分割线划分功能区、给每个面板配状态方块 等宽大写标题、用 4px 刻度上的非对称内边距建立方向性留白、为打印输出锚定 A4/LETTER 标准尺寸、用mt-12 mb-2修正标题与内容的距离节奏、最后以反模式清单做发布前自检。在 Resume Matcher 仓库中这些原则不是停留在文档里的纸面规范——swiss-grid.tsx 的容器查询五列网格、swiss-two-column.module.css 的 65/35 硬分割双栏、page-dimensions.ts 的纸张尺寸与毫米像素换算都是同一套设计语言的实现样本。将这套文档包整体tokens → components → layouts → ai-prompt → anti-patterns复制进任意项目即可复用其原则不依赖任何特定框架——用 Tailwind、原生 CSS、Vue 或 Svelte 落地数学与结构不变。【免费下载链接】Resume-MatcherThe #1 AI Harness for Building Resumes, PDFs, Cover Letters more, locally with 100 LLMs support.项目地址: https://gitcode.com/GitHub_Trending/re/Resume-Matcher创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表