说明目录
Garden 使用说明写作与排版

阅读排版是怎么工作的

740/1040/1340px 三级宽度计算、丨标题断行、图片防抖动、深色模式图片衬底与无品牌蓝配色。

Garden 的文章页面围绕长文阅读体验做了几项自动化处理。这些机制在博客文章、专栏文章和本说明书页面上使用同一套样式与测量脚本。

1.三级自适应宽度:740px / 1040px / 1340px

文章页面的主体由居中正文列与右侧浮动目录(200px)组成。页面加载及窗口尺寸变化时,ArticleMeasure 脚本会测量正文中的图片与表格,按窗口两侧剩余空白对称向外拓宽:

内容元素最大宽度展开规则与边界条件
普通段落、列表、代码块、内置组件740px正文字号 17px、行高 1.75,每行约 38~42 个汉字,始终保持在阅读列内
宽幅配图(.fig)1040px高分屏截图默认按像素宽度的一半(naturalWidth / 2)计算显示宽度;当显示宽度超过正文列且视口 >= 900px 时,向左右各最多延伸 150px(距窗口边缘至少留 24px;在说明书页面则限制在左侧导航与右侧目录之间的留白内)
多列宽表格(.table-wrap)1340px脚本先以 max-content 测量表格不折行时的真实宽度;超出 740px 且视口 >= 900px 时,向左右各最多延伸 300px
右侧章节目录(.toc)200px在独立文章页,当拓宽后的图片或表格右边缘靠近目录时,目录自动向右平移避让;若右侧空间不足以放下目录则自动隐藏,滚过宽元素后恢复

2.标题断行与字号缩放

文章标题通过 ArticleTitle 组件处理,规则只有两条:

  1. 写了分隔符(丨、| 或前后带空格的 |):在第一个分隔符处拆成上下两行,并按较长一行的字符宽度(汉字计 1、大写字母计 0.68、其余字符计 0.58、空格计 0.3)计算 --l 缩放变量,使较长一行刚好放进标题宽度而不再次折行。分隔符本身保留在屏幕阅读器可读文本中。
  2. 没有写分隔符:保持单段 <h1>,仅使用 CSS text-wrap: balance 让浏览器均衡换行,不会自动在冒号、破折号或中间位置拆行,也不会自动改变字号。

提醒

如果标题里写了 丨,但分隔符左边或右边为空(例如 丨副标题),npx garden check 会报 title-split 警告(提示 分隔符两侧都要有文字)。

3.构建期读取图片尺寸与点击放大

在运行 npx garden sync 时,构建脚本会直接解析本地图片(PNG、JPEG、WebP、GIF、SVG)的像素宽高并写入 .garden/generated-content.ts 的 imageSizes 表:

1. 构建期读取尺寸 写入 width / height 与 --wl 2. 客户端测量拓宽 按当前视口调整宽图与目录 3. 深色衬底与灯箱 深色垫 #faf9f5 · 点击放大

服务端生成的 HTML 已经带有图片的 width、height、data-nw、data-bw 以及宽图的初始 --wl / --wr,图片尚未下载完成时也不会把下方文字顶得跳动。

点击上方按钮查看图片从构建到渲染的三个阶段

4.深色模式配图衬底与暖纸墨色

技术文章里常有透明背景、深色线条的架构图或公式截图。切到深色模式后,如果直接放在深灰背景上,黑线会看不见;如果做反色滤镜(filter: invert),彩色截图又会失真。

Garden 的做法是在深色模式下把正文配图与灯箱大图的 background 设为浅色纸底变量 var(--image-backing)(即 #faf9f5),不加反色滤镜、不改内边距。透明底黑线图能直接看清,不透明的实心截图则完全不受影响。站点 Favicon 图标同样共用这一衬底变量,而文章封面、头像和链接卡片缩略图不会套用该规则。

全站配色定义在 app/styles/tokens.css 中,不使用品牌蓝,主要语义色值如下:

颜色变量浅色模式深色模式用途
--paper#faf9f5#1f1e1d页面主背景色(深色模式下配图衬底 --image-backing 亦为 #faf9f5)
--paper-deep / --well#f0eee6#262624代码块底色与内嵌凹槽背景
--chip#f0eee6#30302e标签胶囊与按钮底色
--card#ffffff#262624独立卡片、图框与弹窗底色
--ink#1b1a18#eeece7标题、正文强调与主交互色
--text / --soft#2d2c29 / #4a4844#dcd9d2 / #bdb9b0正文段落与次级说明文字
--muted#6e6b64#a09b91日期、图注、表头辅助信息(均满足 WCAG AA 4.5:1 对比度)
--rule / --rule-strong#e6e3dc / #d6d2c9#3d3d3a / #4d4c481px 细分割线、卡片边框与强调边线
目录