文档密集页两栏排版与对外截图脱敏
一句话:图多的说明/参考页塞进窄 prose 单栏,截图一张张竖着堆 → 桌面端又长又窄;正解是加宽容器 + 每个「说明+图」做左右两栏 grid、窄屏回落单栏。附带三条同场景复用纪律:对外截图脱敏「裁窗口外围 > 逐处打码」、空状态给成型卡片、无头 Chrome 截图做静态视觉自检。
事实记录(不可修改区)
- 项目:蛛网之上「任务书」版块下的
/tasks/spec/(教程类任务规范页),2026-07-24 单会话从建页到排版收口 - 内容形态:一页承载约 14 张操作截图 + 分步说明的文档密集型参考页,复用主站
.prose排版(--max: 46rem) - 症状:桌面端每张截图在 46rem 窄栏里占满宽度、上下堆叠,整页极长且左右大量留白,作者反馈「电脑端看起来好长、非常窄」
- 修法:该页
.spec容器加宽到 60rem;每个「说明+截图」单元改display:grid两列(文左图右),@media (max-width:760px)回落单列 - 自检:build →
astro preview→ 无头 Chrome--screenshot分别在 1280 / 420 两种宽度抓图 → 读图确认桌面两栏、窄屏单栏后才推 - 脱敏:钉钉上传流程 6 张原图地址栏均带
authCode=…&code=…登录态凭证,另有侧栏组织名与卡片内内部飞书 wiki 链接;统一裁掉浏览器窗口外围(只留内容面板)而非逐处打码,顺带 14MB→613KB - 空状态:任务书列表无招募任务时原为一句悬空文字夹在两条 2px 黑分隔线之间,改为虚线边框成型卡片(蛛网标记+标题+说明+规范页入口)
- 验证状态:✅ 两种宽度实测截图确认;线上
tiaozhuxiansheng.com/tasks/spec/已上线 - 数据来源:会话执行记录 + git log(above-the-web
d401707建页 →cd82e6f两栏 →d9cef1c空状态)
主诊断:图多页别在窄栏里竖堆
反直觉点:窄栏(46rem)是为「正文可读行长」调的,读纯文字很舒服;但一旦每段配一张占满宽度的截图,窄栏就把图也压窄、被迫竖排,页面纵向被拉到两三屏,横向又空一半——「适合读字的宽度」不等于「适合图文并排的宽度」。
正解不是把图缩小(图会看不清),而是给图文一人一半:
<!-- 每个「说明 + 截图」单元 -->
<div class="step">
<div class="step-text"> …标题 + 说明… </div>
<figure><img src="…" loading="lazy" /><figcaption>…</figcaption></figure>
</div>
.spec { max-width: 60rem; } /* 先加宽容器,腾出两栏空间 */
.step {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); /* 图一侧略宽 */
gap: 1.2rem 2.4rem;
align-items: start; /* 图顶对齐标题,不被拉伸居中 */
margin: 1.6em 0 2em;
}
@media (max-width: 760px) { /* 窄屏回落单栏:图落到文字下方 */
.step { grid-template-columns: 1fr; }
.spec figcaption { text-align: center; }
}
要点:
minmax(0, …)两列都要写,否则栅格列有最小内容宽度、图会溢出撑破容器;align-items: start:默认stretch会把图垂直拉伸/居中,标题和图错位;- 纯文字小节(无截图)不套
.step,保持整行即可,别为对齐硬塞空图位; - 这是呈现层的响应式收敛,和 站内新版块五件套模式_三次复用与起刊两坑_v1 的「列表/详情页复用 design token」同层——版块骨架之上,单页按内容密度再调版式。
纪律一:对外截图,裁窗口外围优于逐处打码
一句话律:对外发布的操作截图,先裁到只剩内容面板,再谈打码。 浏览器窗口外围是敏感信息的高发区,裁掉比逐处涂黑更干净、更不易漏。
三类高发泄露点(本次 6 张原图全中):
- 地址栏:SaaS 文档(钉钉 alidocs / 飞书等)分享链接常带
authCode/code/token等登录态凭证,公开即等于把令牌贴上互联网,且撤回不干净; - 侧栏 / 面包屑:组织名、团队名、成员头像(如「课研组 / 厦门鲸鹭潮起…」);
- 卡片 / 列表内容:内部知识库的 wiki 链接、他人文档地址。
处置顺序:能裁则裁(教学内容通常集中在中间/右侧面板,外围是浏览器 chrome 和无关列表)——裁完往往一处敏感信息都不剩,可读性反而更好(大分辨率截图大半是 OS 菜单栏和程序坞);裁不掉的孤立字段再纯色块覆盖。本次裁窗口顺带把体积从 14MB 压到 613KB。
判据补充:身份类信息(成员名、头像)是否算敏感看语境——本页规范正文本就拿真实姓名日期当命名范例(作者已确认公开),对应截图里的同名信息就不必打码;凭证类(authCode)则无条件处理。改动前把这类判断显式抛给作者拍板,不自作主张发或撤。
纪律二:空状态给成型卡片,不要悬空文字
列表页「暂无内容」若只是一句居中文字,夹在版块的重分隔线之间会显得像内容没加载出来(本次任务书列表 masthead 与归档区各有一条 2px 黑线,空文字悬在中间的大片空白里)。
改成一张虚线边框的成型卡片:主题标记(蛛网 emoji 呼应站名)+ 标题 + 一句引导 + 一个出口链接(去看归档 / 读交付标准)。空状态从「像坏了」变成「像刻意留白的引导位」。这是低成本高回报的观感项——空状态是真实会被看到的状态,值得当正式设计对待。
纪律三:静态视觉问题用无头 Chrome 自检
排版/观感类改动不能靠脑补,但也不必等真人看。本地就能闭环:
astro build && astro preview --port <p> # 起本地预览
# 桌面 + 窄屏两种宽度各抓一张
chrome --headless=new --disable-gpu --hide-scrollbars \
--window-size=1280,2400 --screenshot=out.png "http://localhost:<p>/<path>"
抓图后读图诊断(两栏是否成立、窄屏是否回落、有无溢出),改完再抓,直到两种宽度都对再推。
这是 Claude预览环境不派发滚动事件_滚动类功能无法行为验证_v1 结论的正向复用:那篇讲的是预览 iframe 不派发 scroll/动画事件、行为类功能无法在预览里验证,只能退到无头 Chrome / 真机;而静态版式恰好是无头 Chrome 的强项——不依赖滚动、不依赖动画时钟,一张 --screenshot 就能定性。行为验证退级用的同一把工具,拿来做视觉自检是顺水人情。
结果分析
- 主诊断可迁移到任何 SSG 的文档密集型页面(教程、规范、API 参考、变更日志配图):判据是「一页 ≥ 若干张需并排说明的图」,就别用读正文的窄栏,上「加宽 + 图文两栏 + 窄屏回落」;
- 三条纪律都不是本页独有——对外截图脱敏适用于任何要公开的 SaaS 操作录屏/截图,空状态卡片适用于任何列表页,无头 Chrome 自检适用于任何静态视觉改动;
- 与 任务书制作与学员协作需求收口方法论_v1 的分工:那篇管「任务书内容怎么写」,本档管「承载这些内容的页面版式与对外资产处理」,内容规范 × 呈现工程两条线。
关联文档
- Claude预览环境不派发滚动事件_滚动类功能无法行为验证_v1 —— 本档纪律三是其无头 Chrome 退级手段的正向复用:行为类退级工具反过来做静态视觉自检
- 站内新版块五件套模式_三次复用与起刊两坑_v1 —— 同项目(任务书版块);五件套是版块骨架,本档是骨架内单页按内容密度再调版式
- 任务书制作与学员协作需求收口方法论_v1 —— 内容侧方法论;与本档呈「内容规范 × 承载工程」分工
- 双部署目标的base路径陷阱_根路径拼出双斜杠_v1 —— 本页复用同一双目标部署管线(
import.meta.env.BASE_URL归一化) - ⚠️ 美工改稿全站落地_跨稿重复才是规范_v1 —— 同族无头 Chrome 静态自检再验(2026-07-26,用它渲染交付用的进度图 PNG):补上一条口径——
--screenshot是视口截图,不会自动截全页,内容比--window-size长就被切;解法是两趟,先在页面里塞document.title = scrollHeight用--dump-dom读出内容高度,再按精确高度截第二趟 - 09_平台工程索引