NeuroKB 能力展示台
53 项一套编号:外观 15/交互 15/词条 13/治理 10。要你看的是上面 5 项。
编号已经统一了。之前有两套号(档案 38 条、展台 25 条)在打架,现在只剩这一套, 每张卡最下面那行小字写了它两个旧号,你手上任何一张老截图都还能对上。

怎么用:每张卡上面是编号和名字,灰底那块是能动的样品(可以在里面滚动、点、勾选), 下面三行是出处、代价、我的判断。只有标「看你」的那 5 项需要你开口; 标「建议加」的我默认就做,你不同意再喊停;标「已在线上」的不用你管。 回我一句「看你那几条里 观-02 要、词-13 不要」我就照做。

字体这里用系统栈,装到站上会换成我们裁过的 Noto Sans SC,所以字重与字距的观感会更紧一点。

要你挑的 —— 只有你能定 5

词-09 题头读法 看你词条管理

病名后面跟方括号拼音:癫痫[diān xián]。百度每条都这样,解决「这个字到底怎么念」。

癫痫 [diān xián] 疾病

出处 百度词条页题头实测(百度.md 词条结构节)。
代价 条目位加一栏「读法」并逐条填(28 条起步);含带声调字母要重裁字体子集(ā é ǐ 这类码位现在不在 2,240 个里)。
判断 待定。查药名和罕见病名时很实用,但代价是联网重裁 + 离线包变大——字体已经是包里 58.0% 那头大象了。你这条一直没点,我需要你定。

词-13 检索台首页 看你词条管理

首页第一屏只有搜索框,不写主张句。

命中 3 条:偏头痛、癫痫持续状态、重症肌无力

出处 苹果首页是 tile 叙事(图片),百度首页第一个元素就是搜索框。我们现在的首页是黑 tile 里既有主张句也有搜索框——两头都占。
代价 删掉 hero 的介绍文案(文案不消失,挪进「关于」那一行)。
判断 待定,我倾向留主张句但压到一行:这是给人看的站,不是给人用的工具首页;但你说「每次进来都是要搜东西的」,那就删。这条要你定。

观-02 整屏面板 看你外观

一屏一块、整幅换底色、右边距归零——苹果产品页的形状。我们现在的卡片是 28px 大圆角,两回事。

第一块

整幅白底,通到屏幕两边。

第二块

整幅灰底。两块之间没有任何线。

出处 苹果首页 9 个 tile 同一模板零变体(苹果.md)。反面记账:百度词条页正文不通栏,它靠的是内缩 22px。
代价 改 --r-panel 与 .panel 的边距;0 字节、0 字形。
判断 待定,而且这是你说「还是老样子」最可能指的那件。整屏块对图片叙事有效,对长条文不一定划算——每块都要重新起一次视觉呼吸。备选是 观-01 的分组底色:分区不靠切屏,靠底色。**这条我建议你亲眼看舞台再定,因为它决定整站骨架。**

观-15 填充图标 看你外观

同一组图标的两种画法:iOS 的 tab bar 用填充形,工具栏用描边形。我们底栏现在只有一套。

填充
描边
四宫格
房子

出处 HIG icons 页(原文已存档案);苹果站内 SVG 是 inline + currentColor + 1em,深色底上的描边会加粗(2.25 → 2.75)。SF Symbols 的字形我们不能用,只借它的规格。
代价 每枚图标 1 行 SVG,0 字形(SVG 不占字体子集)。
判断 看你——填充更「像 iOS」,描边更轻,两种我都能做。顺带定一件事:当前页那一格要不要用实心表示。你在这个舞台上按一遍就知道了。

互-12 大标题收进栏 看你交互

iOS 的招牌:大标题往上滚,滚到顶栏时「缩」进顶栏变成小字。

‹ 疾病偏头痛

偏头痛

往下滚,看右边那行小字怎么浮进顶栏。

↓

↓

出处 iOS navigation bar 的 large title(官方没发布具体数值,档案 参考源码档案/资料/iOS.md 第 5 节已注明这是推断)。
代价 约 10 行 JS + 4 行 CSS,且要处理与节条的叠放顺序。
判断 待定,我倾向不装:顶栏已经常驻病名了,所以它买的收益可能只是动画本身。你看了舞台再定,想要就装。

建议加的 —— 我打算做,除非你说不 21

词-01 信息框 建议加词条管理

词条标题下面那张键值卡(窄屏贴在标题下,宽屏才浮右上)。百度疾病类固定 6 个专有字段,我们目前一个都没有。

偏头痛
就诊科室神经内科
起病反复发作,单侧,4–72 h
常见诱因月经、睡眠不足、含酪胺食物
红旗雷击样头痛、发热伴颈僵
复核2026-09-28

出处 百度 22 条跨专科普查:疾病类稳定 6 字段(就诊科室 8/8、多发群体 8/8、常见病因 7/8、常见症状 6/8、常见发病部位 3/8),而药物类完全不共用疾病类字段;UpToDate/DynaMed 同形。
代价 要先有字段数据(这是内容活,28 条起步可交外部 AI 填、我验收)+ 与 词-02/词-03/治-06 同批。UI 本身约 20 行。
判断 装,这是「像一台词条站」最关键的一件。也是你旧账里挂着的那件:「要不要批量开 24 个新药名的卡位」——新药名开位就是给它填字段。

词-02 字段有型 建议加词条管理

每个可量化字段带 {规范值, 单位}:值给机器、文本给人,类型层独立于排版层。

出处 百度 22 条实测 12 种 dataType / 366 个值。三条必抄的教训:① dateTime 的键名 minitue 拼错却活在生产数据里 → 这套 schema 没有校验器;② dataType:"lemma" 的 43 个值其实是外键,这就是「信息框可横着比、可反查」的机制;③ text 型 value=null → 纯文本槽不可筛。
代价 字段定义表 +1 列 + 单位白名单;判据:值必须是 {n, 单位}、单位在白名单内、文本槽不许混数字。
判断 装,这是百度整套里我们最该抄的一件,成本全在数据层,页面一行不用改。

词-03 卡类型白名单 建议加词条管理

一张卡属于哪一类(疾病/药物/症状/检查/解剖/量表)是必填字段,并由它决定字段白名单:多余字段报错、缺必填报错。

出处 百度 card.type 12 种取值逐条必带。判读:百度靠 card.type 把字段表钉住,靠 template_id 想做而没做成——22 条里只 3 条有那个键。
代价 建卡位时多定一次枚举;历史卡要全库补一遍(一次性迁移)。据此做两层字段表(全站通用 + 卡类型专有),而不是一个万能卡。
判断 装。并且「是否遗传」这类字段必须是白名单枚举——百度的 enum 值写成「可能与遗传有关」=自由文本冒充枚举,那是它的失误,不是它的设计。

词-04 空值整行 建议加词条管理

字段没值就整行不渲染,页面上不出现空值行、也不出现「待完善」占位。

Wilson 病
就诊科室神经内科
起病方式(空)
监测项目(空)
复核2026-09-28

出处 百度 264/264 字段都带非空 data,没有空数组、没有空串值;同科叶子下字段数从 4 到 10 不等 → 「填不满就别显示」是它的默认行为。反面:同一套系统在历史页用的是另一套表达——缺 lemmaId 时文案印成「共被编辑次」(数字为空),说明「空」必须有第二套设计,不能只处理一种。
代价 0 字节,但它得随 词-01 一起做——没有信息框就没有空值行可管。
判断 装,并把禁令写进构建期判据。

词-06 目录序号 建议加词条管理

把一级/二级序号印到页面上(06 / 06-2),让「第 6-2 段写错了」成为一句可核对的反馈。

03治疗

二级节印成 03-2急性期。

出处 百度 22 条模板的 catalog[].index,二级形如 "6-1"。抽屉里已经这么印了,正文的标题还没印。
代价 抽屉每胶囊约 +6 B × 约 405 组 = 约 +1.6 KB raw / +0.4 KB gzip;0 新字形(0-9、-、· 都在子集里)。
判断 装。这张清单里唯一直接改善「读者能向我们指认位置」的一条——你报「6-2 写错了」我不用猜。

词-08 别名反查 建议加词条管理

搜索认别名已经有了;缺的是反向表(正查能列出「谁指到我」)和一条页面横幅「此名另指…」。

 

出处 百度 extData.redirectFrom:[{fromLemmaId,fromTitle}];实测 118 条别名 / 22 词条 = 均值 5.4,数组最长恰好 10(六条同时到 10 → 判读为截到 10 条的显示数组,不是全量登记)。反面教训:它的别名里留着垃圾项「每组里信息项最多羊癫疯」——重定向一旦登记就长期生效,且看不到清洗痕迹。
代价 判据那一半 0 字节(V3 别名唯一性已经在拦撞名了);反向表那一半要动数据模型。
判断 装判据那一半。反向表等真有多义需求再说——现在它已被 词-10 的「不装」挡住了。

词-12 出处到字段 建议加词条管理

出处挂在单个字段值上,不只挂在段落上;页面上用句末 [1] 跳到参考资料。

前驱期症状与皮质扩散性抑制相关[3],头痛期源于三叉神经血管系统激活[3]。

LDL 目标<1.8 mmol/L[1]

出处 百度 带 ref 角标的卡值 112/366 = 30.6%;reference[] 17 个键,没有一条有明文 url;绑定靠 uuid 与正文节点、DOM 三方 join。但逐句引用它基本不做:实测 246 段只有 1 段带角标。
代价 字段表 +1 列、构建期 +双向点名判据(这条我们已经有 47 处欠账);每个卡值多一个 <sup>。数字与方括号已在子集里,字形风险为零。
判断 装字段级那一半。逐句角标更硬但写作成本高——我倾向只给数字句用,别给散文加角标,那是散文不是数据。这条合并了原来的两张卡,因为它们是同一件事的两面。

观-04 上松下紧 建议加外观

标题属于它下面的内容:上方留 24、下方只留 8。上下等距会把标题推给上一节。

紧(对)

这一段和标题是一组。

松(错)

标题被推离了自己的正文。

出处 苹果文字页实测 h2 上 44 / 下 16,比 2.75:1(苹果-文字页规格.md:89-90)。
代价 0 新令牌、0 字节——--gap-3 与 --gap-1 都已存在,改的是引用。
判断 装,而且先给你看一条假账:展示台原来写「v3 已装」,global.css 的注释也写着「实测 h2 上 24 / 下 8」,但代码是 margin-block-start: var(--gap-1); margin-block-end: var(--gap-1)——8/8 等距,注释在撒谎,没任何门禁抓到。所以这条从没做过。医学词条是「标题 + 一长段」的重复结构,标题贴上文会让每屏第一行都读进错节。

观-05 键值密排 建议加外观

把「名:话」那种键值行收到组内 8px、组间 16px,靠 观-03 的线补层级,而不是靠空。

用药
阿司匹林100 mg qd
氯吡格雷75 mg qd
阿托伐他汀40 mg qn
用药(收到 8px)
阿司匹林100 mg qd
氯吡格雷75 mg qd
阿托伐他汀40 mg qn

出处 苹果规格页参数行距实测 6.8px = 0.4em = 0.27 行;我们 dt/dd 实测 36.25px = 2.27em,比它松 5.3 倍(苹果-文字页规格.md:18,87)。
代价 0 新令牌、0 字节;每屏正文反而多装 1–2 行。
判断 装。要收的是键值区,不是正文区——正文 p+p 16px 已经和苹果法律页 17px 同档,再收就是挤了。

观-07 小字两档 建议加外观

次要文字从一档拆成两档:14/20(版本说明、免责、题注)与 12/16(出处串、修订日期)。

正文 16/25:突发一侧肢体无力。

说明档 14/20:本条由 AI 起草、人工逐条校对。

结构档 12/16:出处串 · 修订日期 · 字母条计数

出处 苹果的小字系实测就是两档;iOS 底栏那行 10pt 我们已经单独立了 --t-tab。
代价 +2 枚字号 +2 枚行高,0 新字形,约 +110 B 源码 / +45 B gzip。前置条件是 治-04 先把档位收窄,不然加一档等于给 V7 多开一个合法的洞。
判断 装,出处串最该降——15px 时它跟正文抢层级,而引用是结构不是内容层。

观-09 标题加行 建议加外观

撤字距的同时给标题补行高,--lh-tight 1.15 → 1.22。

出处 撤负字距后汉字行间视觉贴合度下降,苹果中文站的标题行高实测比英文宽一档。
代价 1 行;28×1.22≈34.2、40×1.22=48.8,两行 hero 时多约 5px。
判断 装,但必须与 观-06 同批,否则一个收紧一个放松,净收益相互抵消到看不出。现状实测 --lh-tight: 1.15,还没改。

观-11 安全区垫 建议加外观

刘海与 home indicator 让位:底部用叠加 calc(栏高 + env(…)),左右用下限保护 max(22px, env(…-left))。

这块模拟全面屏:上面那块黑是刘海,下面那条是 home indicator。底栏靠叠加 calc(栏高 + env(…)) 让位,正文左右靠下限保护。百度的做法是硬抬 bottom:.56rem,横屏就顶到了。

出处 苹果 · 苹果-代码蒸馏.md:393-405(页脚两种写法各管一头)。反面:百度手机版 env(safe-area-inset-*) 用了 0 次,靠 bottom:.56rem 硬抬经验值——横屏和有圆角的机器上就会顶到。
代价 +2 枚令牌、4 处选择器;0 字形、离线包 0 B。
判断 装剩下那一半:底栏已经做了上下叠加(实测 global.css:178/546-547),左右两个下限还欠着。这是真机可点性问题,不是美观问题。

互-09 选项语义壳 建议加交互

每组选项外面套 <fieldset>、题目写进 <legend>。

出处 苹果商店选配页实测原件(buy16-ux-fieldset-sample.html 已存档案)。
代价 每组 HTML 约 +3 行,0 CSS、0 字形。
判断 装。我们已经有 radio,但没有 group 语义——读屏现在念得出「自动睁眼 4 分」,念不出「这是 3 个选项里的第 2 个」。

互-11 整行按压 建议加交互

手指按住一行时整行变灰(iOS 的选中反馈),不是整页透明度打折。

按我试试›
按住整行变灰›

出处 iOS 列表的标准 highlighted 态;百度条目行的按压色实测 #c6c6c8 一档。
代价 2 行 CSS(:active),0 脚本。
判断 装。我们正文里可点的行有三个族(节条项、条目行、选项行),现在按下去没有任何回应,手指会以为是卡了。

互-13 次要节折叠 建议加交互

长卷的解法:把「流行病学/病因机制/预后」这类次要节默认折成一行,要看再就地展开。

05 · 病因与发病机制
06 · 预后

出处 苹果页脚与商店的折叠组 + 我们自己的实测:一屏只装 27 行正文,卒中那张卡现在 35.4 屏。
代价 用 <details> 几乎零 JS;关脚本时整族摊开(这条必须和 治-01 同批,否则降级分支就是坏分支)。
判断 装,这是我认为新改版最该做的一件——它直接回答「一张卡 35 屏怎么办」,而且不动内容。

互-14 放大不截字 建议加交互

固定高度与触摸底线改成随字号走的 em 下限:--target: max(44px, 2.75em)。系统字号调大时控件跟着长高,不截字。

出处 苹果 -webkit-text-size-adjust:none + 非标准事件 resize:text-zoom + CSS 里 11 处乘缩放因子(48px 吸顶在 1.3× 时自动变 62px)。它敢 none 是因为它接了因子。
代价 1 个令牌改值 + 2 行;0 字节资源、0 字形、0 行 JS。
判断 装。text-size-adjust 保持 100%,不许改成 none——我们不接因子,接了才是自残。

治-04 间距档收窄 建议加内容治理

合法间距档只从 --gap-*/--pad-*/--*-h/--r-*/--target 取,字号档只从 --t-* 取。

出处 实测:check.mjs:180-183 的 档 收的是 :root 里所有 : …px 声明,于是 --t-hero:40px、--nav-h:46px、--bar-h:50px 全成了合法的 padding 值——24 个 px 声明进了同一只 Set,判据比它的设计意图松得多。同类失控:苹果 937 个自定义属性,报告自评「规模已失控,9 个只读不定义」。
代价 3 行。改完必须重跑全绿并核对「报错条数不许变少」:判据收窄会让原本合法的写法变红,那是要看的,不是要消掉的。
判断 装。它是 观-07(加一档小字)的前置条件——不先收窄,加一档等于再开一个洞。

治-05 层级令牌 建议加内容治理

产物 CSS 里所有 z-index: 必须引用 var(--z-*),出现裸数字即红。

出处 实测:现状是 9/5/4/6 四个裸数字——skip(9) 压在底栏(6) 之上是巧合不是设计;而间距判据从不查 z-index,这一族完全没有判据。苹果账:9996/9997/9998/9999 四个连号专留四条层。百度账:变量阶梯 1/100/1000/1100/2000/10001。
代价 5 行(4 枚令牌 + 4 处引用);0 字节资源、0 字形。
判断 装。苹果的「急停开关」(一行覆盖全子树禁过渡)明确不装:我们全站只有 2 处会「JS 改布局」,那是给不存在的问题写代码。

治-06 缺字段就红 建议加内容治理

信息框字段表由骨架规定,哪张卡缺哪个字段,构建时就报,不留到「以后补」。

Wilson 病 缺:起病方式监测项目复核人

出处 百度的字段表靠 card.type 钉住(见 词-03),而它的 schema 连 minitue 拼错都没拦住——这正是「有表没判据」的下场。
代价 一条判据(约 15 行)+ 先把字段表定下来。
判断 装,且必须和 词-01 同批。只开框不判缺,一年以后那张框会一半是空的。

治-09 来源审定 建议加内容治理

权威不是措辞而是数据结构:卡上留「谁审的 / 什么时候」两枚字段,医学类卡默认不挂任何商业位。

出处 百度来源白名单的真实形态不是 URL 域名表,而是组织名 + 数字组织 id(实测 211/257/265)+ 逐条关广告 + 审核工单号;医药类走另一条审核分支:疾病类取 390、六味地黄丸取 2、协和医院取 413。
代价 字段表 +2 列;判据:最近核对日期 ≤ 构建日,超期(如 >24 个月)在页面上显式降级标注,不许只写在小字里。
判断 装。称号制不装:百度那 7 种团队徽标要 215 个团队 / 106,856 人的评审池才养得起,我们没有。

治-10 版本留痕 建议加内容治理

修订记录是匿名可查的一页表(日期 / 贡献者 / 版本号),且「发布时间 / 数据行时间 / 元数据时间」三个戳分开存、只给人看该看的那一个。

出处 百度 /p/history 直出「共被编辑 467 次」+ 日期表;跨 8 条词条 200 个版本实测审核时延中位 0.05–9.78 h、p90 3.8–177.4 h(医学检查最快、药物最慢);quality 200/200 全 0、modifyReason 200/200 全空 → 优质只能人工授予。
代价 0 新字段(现有修订表加一列「审定人」,与 治-09 共用)。明确不抄两件:uip(把编辑者公网 IP 留在匿名元数据里,5/22 条实测——合规上绝不能抄)、hide_history(官方可整条隐藏历史)。
判断 装(留痕 + 游标两件)。versionId 判读为站点级递增号,可以当「最后变更游标」用。

线上已经有的 —— 不用你操心了 25

词-05 派生目录 已在线上词条管理

页内目录不另写一份:一级节从正文的 ## 切,二级节从「- 名:」那种加粗引导项派生,锚点两边同一套算法算。

出处 百度逐字对撞实测「完全相等 = true」(index|level|title|uuid 四字段从正文继承)。同一条判读里另一个事实:骨架固定与目录派生同时成立——一级节名由模板规定,不是作者挑的;二级才是派生的。
代价 0(现状)。
判断 已装,保持。「派生」与「骨架约定」是两件事,别混——混了就会出现「作者自己加一节」那种漂移。

已在线上,不用勾

词-07 语义锚点 已在线上词条管理

槽 id 用稳定语义名(#treat、#diagnose)而不是序号 id,跨页恒定。

出处 反面对照:百度的页内锚点是序号 id 1..12,节序一变外部深链就漂。
代价 0(现状)。但判据有缺口:产物门禁只比 URL 差集,片段 #锚点 从没被比过。改槽 id 就是改全站深链,现在零拦截。要配的是锚点回归表(基线随 git 走、不进离线清单,离线包 0 B)。
判断 已装,保持;那条缺口记成新的一条待办。

已在线上,不用勾

词-11 版本脚注 已在线上词条管理

每条末尾印「本条修订 N 次 · 复核于某日 · 下次到期」。权威感来自可核对的日期,不来自措辞。

本条修订记录 4 次 · 最近 2026-09-28 · 下次复核 2029-09-28
正文由 AI 起草、人工逐条校对,以正式指南与说明书为准。

出处 百度三个时间戳(versionCreateTime / updateTime / extData.updateTime)互不相等,页面只给人看其中一个。
代价 已装,而且是git 现取、零手抄——手抄的日期一定会漂。
判断 装(已在)。和 治-09/治-10 是同一条链上的三件事。

已在线上,不用勾

观-01 分组底色 已在线上外观

页面底色比卡片深一档,卡片自己不带边框——iOS 设置页就是这么分层,不靠阴影。

急性期
溶栓时间窗4.5 h
取栓时间窗24 h
二级预防
抗血小板阿司匹林
LDL 目标<1.8

出处 iOS secondarySystemGroupedBackground #F2F2F7(深色 #1C1C1E)/分隔线 #C6C6C8;档案 参考源码档案/ios/原文/官方色板值.md。
代价 约 6 行 CSS,0 脚本,0 字形。
判断 装:我们原来的「白灰交替」和它同源,但分组底色能顺带把「这是一组」说清楚。

已在线上,不用勾

观-03 缩进发丝线 已在线上外观

标题下面一条 1px 线,不通栏——左边缩进、右边也缩进,像苹果文章页。

临床表现

突发一侧肢体无力、口角歪斜、言语不清,数秒至数分钟内达高峰。

出处 苹果 Newsroom 文章页实测 6 条:宽 341.25px、左 24.38px,与正文同宽(苹果-文字页规格.md:123)。通栏线只留给吸顶栏与页面主体的分界。
代价 2 条规则,0 字形,0 新资源。
判断 装。但这条我们已经吃过一次亏:第一版选择器写成 section[id] > h2,产物结构是 section > div.块 > h2,一条都没命中而 CSS 不报错。是真机量出来的,不是看出来的。

已在线上,不用勾

观-06 面板收距 已在线上外观

面板上下内距 40px → 24px,块间距交给底色加一条线。

出处 苹果文字页相邻正文块实测 24.16px = 1.42 倍字号(苹果-文字页规格.md:87)。
代价 0 字节,一个令牌改值(22 处引用不动)。副作用:内嵌卡会跟着缩,要目测。
判断 已装,保持。与 观-03/观-04/观-05 同批做才有净效果——单独做任何一条只会「变挤」不会「变好」。

已在线上,不用勾

观-08 中文零字距 已在线上外观

拉丁字母靠负字距显紧凑,汉字本来就填满方框,收紧只会互相挤。苹果中文站把负字距全部归零。

癫痫持续状态
上:负字距 −0.022em(挤)
癫痫持续状态
下:normal(对)

出处 苹果 :lang(zh) 负字距归零 434 处;同一篇文章 EN→CN 只撤字距、字号 17 与行高 25 都不动(苹果-文字页规格.md:5)。
代价 1 条规则,0 字节。
判断 已装。这是两站唯一口径完全一致的结论。

已在线上,不用勾

观-10 替文箭头 已在线上外观

装饰字符别用文本字:CSS 里的 content 全部写成空串,箭头用边框画。

边框画的三角:0 字节,不占字体›文本字符 ›:不在子集里,会掉字形

出处 苹果的 content:"\f8ff" 是 PUA 码位 + 空串替代文本;我们的做法是 .chev 那类边框三角。
代价 三条路——(a) › 换成已在子集的 → 并给替代文本:0 字节;(b) 把 › 加进子集:约 +332 B/字 且要联网重裁;(c) 边框画:0 字节。
判断 已装,走的是 (c)。这一条是 治-03 的根因:产物 CSS 里那个 content:"›" 不在子集的 2,240 个码点里,而旧 V12 只扫 HTML 不扫 CSS,所以它上线时没人知道。不装判据,下一次重写还会漏。

已在线上,不用勾

观-12 点按无灰 已在线上外观

-webkit-tap-highlight-color: rgba(0,0,0,0),只关安卓 Chrome 那块灰,不动我们自己的 :focus-visible 环。

出处 苹果移动组件全带(苹果-代码蒸馏.md:786,1312,rgba(0,0,0,0) 与 #0000 共 150 次)。
代价 +1 条规则 ≈ +70 B 源码 / +30 B gzip。
判断 已装。风险仅一条:加它时不许顺手删 :focus-visible——灰块是系统的,焦点环是我们的,去掉后者读屏就看不见光标了。

已在线上,不用勾

观-13 系统蓝 已在线上外观

链接与强调色用 iOS 系统蓝,但要压暗到对比度过 4.5:1——原色对白底只有 4.02。

这蓝 4.02:1
iOS 原色,不及格
这蓝 5.58:1
压暗后,及格

出处 UIKit 实际值 systemBlue #007AFF/深色 #0A84FF。HIG 公布的是另一个数(统一蓝 #0088FF)——档案里两个都记了,我们抄 UIKit。
代价 0 行(改令牌)。
判断 装,且必须配对比度判据。v3 的 V23 就是为这个补的,它上线第一次跑就报出 4.02 和 3.60 两处不及格。

已在线上,不用勾

观-14 黑底重点块 已在线上外观

最重要的那一块整幅翻黑,不靠边框不靠图标——夜班时它比一条橙边可靠。

红旗

意识水平下降 + 瞳孔不等大 → 先按脑疝处理,再查病因。

出处 苹果 tile 语言:深色块 = 这一屏最重要。它甚至不做深色模式,那身黑是设计决策不是跟随系统。
代价 已装。
判断 装,但只给红旗与「今晚医嘱」用。多了就不醒目——黑底一旦成为常规底色,它就不再是警示。

已在线上,不用勾

互-01 双层吸顶 已在线上交互

第一层是「我在哪条词条」,第二层是节目录。两层的 top 不各写各的,下层靠令牌接上层高度。

‹ 疾病偏头痛
速查诊断治疗预后

在下面滚动,看两层怎么各自钉住。

↓

↓

↓

出处 苹果 .ac-ln-background{padding-top:var(--r-globalnav-height,0)};它的 top: 账里没有一处用重公式。百度 topbar+topCatalog 41+41。
代价 已装(Shell.astro +3 行)。反面记账:苹果吸顶只占屏 5.7%,我们 136px 占 16.1%,但不建议合并成一层——那两层买的是「永远知道在哪节 + 一键开目录」。
判断 装,这是长词条最值的一件。

已在线上,不用勾

互-02 节条吸附 已在线上交互

节目录横向滑时,松手把最近的项「吸」到位,不会停在两个词中间。

‹ 疾病偏头痛
速查诊断治疗预后用药随访陷阱

在灰条里左右拖一下试试。

出处 苹果原生 scroll-snap(它用的是 mandatory + 居中 padding,对象是产品画廊;纵向一律不 snap)。零 JS。
代价 4 条声明 ≈ +140 B 源码 / +45 B gzip。snap 不是 transition,动效门禁管不到它也不该管。
判断 已装,用的是 proximity——长目录用 mandatory 会把人弹得抓不住。

已在线上,不用勾

互-03 当前节亮 已在线上交互

滚动时节条里有且仅有一项高亮,含首屏与末屏兜底——触底时强制点亮最后一节。

01020304
01 · 速查

向下滚,看上面那行号怎么走。

02 · 诊断

蓝的那一个就是当前节。

03 · 治疗

触底时末节必须点亮。

04 · 陷阱

这条是苹果自己都没做好的。

出处 苹果 scroll-spy 实测在 y=3600/5000 读到空(报告原话:这类通病要么补首段兜底,要么接受),而且它用 class 不用 aria-current。百度的「当前节」根本不是 IO,是 React 状态,节条项全是无 href 的 div。
代价 已装(+3 行,每页约 +120 B)。口径纪律:触底判据必须与真机门禁里那条同一个数,别再发明第三个。
判断 装。我们的节条是 <a href="#id">,这一半本来比百度强——不能为了学高亮把链接换成 div。

已在线上,不用勾

互-04 底栏收放 已在线上交互

往下读时底栏整条滑出屏幕,多出 50px 给正文;往上一抬就回来。状态只由一个属性驱动。

在这块里往下滚——底栏会收起来,正文多出 50px。

↓

↓

↓

↓

↑ 往回滚它就出来

疾病症状药物方法首页

出处 百度源码定位到 lemma-109800fb25df55fc.js 字符 387116-387520 + fc09764dc1496f54.css @200340。逐帧实测到位 291 / 292 / 306 / 289ms,曲线拟合 ease 误差 0.96/1.45px、ease-in-out 误差 8.9/8.7px;累计阈值 >12px;scrollY≤40 强制显现。反面:苹果全站没有「下滑隐藏」。
代价 2 行 CSS + 2 行 JS。will-change 不装:只有一个元素在动,而离线包要在手机上一路开着整本库,常驻合成层是拿内存换 300ms 不掉帧。
判断 已装,时长对齐全站那颗 300ms。这条是你点名要挖的那件,挖到了。

已在线上,不用勾

互-05 抽屉目录 已在线上交互

从下面升起一张面板:竖虚线时间轴 + 两级目录(子节做成两列胶囊)。用原生 <dialog>,遮罩、Esc、焦点陷阱、滚动锁全部交给平台。

点右下角开抽屉,点灰幕或某一项关。

目录关闭
  1. 02 · 诊断
    • 诊断要点
    • 鉴别顺序
  2. 03 · 治疗
    • 急性期
    • 预防
  3. 04 · 陷阱

出处 百度抽屉实测 96 项、每项 47px、两级胶囊。反面账要一起记:苹果一次点击要 <html> 加 1 旗标 + 1 内联变量、html/body 双 overflow、4 个 ARIA 靠 setTimeout 增删、手写焦点圈闭、三处补关——6 处代码换我们 1 行 showModal()。
代价 已装(原生)。不许改的三件:不要 position:fixed body,不要 touch-action:none,不要把手风琴的 aria-expanded 写到服务端。
判断 装。「整屏二级抽屉」记为不装:苹果那套容量 234 个链接,我们一屏节数不到 12。

已在线上,不用勾

互-06 遮罩点关 已在线上交互

抽屉打开时点上面那片灰就关。现在关它只有「关闭」钮和 Esc 两条路。

配合「互-05 抽屉目录」一起看:那块灰幕就是它的关闭热区。苹果的满屏抽屉反而关不掉,因为它把抽屉铺满压在幕布上。

出处 苹果源码 curtain.addEventListener("click", _onFlyoutCurtainClick)。两条反面必须一起记:苹果手机版实测点幕布关不掉(抽屉铺满 844 压在幕布上,命中的是抽屉);百度遮罩 rgba(0,0,0,.6) 在,但没记录它能点。
代价 +1 行 JS。风险:将来给 dialog 加了内距,e.target === 目录 会把「点内距」误当「点遮罩」,所以必须配判据(真机门禁 B10 就是它)。
判断 已装。

已在线上,不用勾

互-07 脱流交换 已在线上交互

展开的面板不折叠高度:收起态 position:absolute 脱流(不占位、不推挤),展开态回 static,visibility 瞬时切换。

出处 苹果页脚手风琴逐帧证实:容器位移在第 0 帧就跳完,只有列表本身过渡 transform 300ms ease。它没有 max-height、没有 grid 0fr、JS 从不量高度。
代价 0(这就是现状)。
判断 已装,保持。凡「靠 JS 量高度才成立」的效果一律不引入——那类东西在关 JS 时必然坏一半。

已在线上,不用勾

互-08 手风琴选项 已在线上交互

算量表选「这一项几分」:点题目就地展开成一排卡片,安卓原生抽屉完全不参与。

出处 苹果商店选项的真相是 fieldset+legend 里藏着 <input type=radio>:用 opacity:0 铺满整张卡(不是 display:none,display:none 会让读屏和键盘全丢),<label> 画外观。选中态只改边框 1px→2px、padding 各减 1px 防跳动,不加勾、不加底色、不做过渡。
代价 已装(radio + 卡片)。还欠两件:外层没有 fieldset/legend(读屏听不出「这是一组、共几项」);选中态用的是底色不是边框。
判断 装剩下两半。顺带绕开安卓原生 <select> 的系统弹窗与不可控样式——这条是你点名的。

已在线上,不用勾

互-10 选完自收 已在线上交互

闭合为「点一行 → 原地展开 → 选一个 → 自动收回」,并把答案回显在题目行,同时打开下一题、滚到眼前。

在「互-08 手风琴选项」的舞台上选一个分数:题目行会把答案回显出来、这一组自动收回、下一组自己打开并滚到眼前。那就是这一条。

出处 苹果 B4 实测:价格随选项变的那条链路就是这么闭的;我们的落点在 Calc.astro:252-267。
代价 已装(约 +3 行,只落在有计算器的 5 张方法卡)。
判断 已装。这条是「算量表不慌」的关键——它让手不用在屏幕上找下一个空。

已在线上,不用勾

治-01 关 JS 摊开 已在线上内容治理

关掉脚本时,折叠的内容整族摊开,同时不再报告折叠状态——aria-expanded 由脚本挂,服务端不写。

出处 苹果服务端 HTML 里 aria-expanded 0 次,JS 按断点 setAttribute/removeAttribute。报告原话:「永远展开的东西不该报告展开状态」。实测苹果产品页关 JS 可见文本 59,721 > 开 JS 52,072(内容那一半对),但顶栏 11 个分区链接全丢(导航那一半废)。反面:百度整页 <a> 数量 = 0。
代价 已装。一个坑要记:<noscript> 里那段样式被 Astro 注入的 <link> 盖过一次,靠把选择器抬到两级才赢回来。
判断 已装,保持。div 化那条路(百度的)明确不装:我们是「导航即内容」的站,把链接换成 div 会一次作废三条判据。

已在线上,不用勾

治-02 减动降级 已在线上内容治理

prefers-reduced-motion 不是「装饰动画关掉」,而是交互过渡也写 transition:none,并把依赖动画的功能整块降级成静态。

出处 苹果页脚 CSS/JS 两处该查询均为 0;同页 A/B 实测:过渡基本没被砍,keyframes 才真被砍。百度全 5 份 CSS 0 命中,没有任何降级。
代价 0 字节(现状)。
判断 已装,保持。不许出现「苹果没做所以我们省掉」这类理由——同族还有 scroll-margin、safe-area、will-change 三项,百度全 0,那是它的欠账。

已在线上,不用勾

治-03 字形门禁 已在线上内容治理

扫描面从「每个 .html 的可见文本」扩到「每个 CSS 里的 content:"…" 字面量」,逐字符对撞 charset.txt。

出处 实测漏洞(本地产物重算):dist/_astro/load.*.css 含 content:"›",而 › 不在子集的 2,240 个码点里;同一条码点在 HTML 里出现 0 次,所以旧判据根本看不见它。
代价 约 +6 行。背景数字要一起记住:331.6 B/字(742,792 ÷ 2,240),且字体在 gzip 后的离线包里占 58.0%。
判断 已装(它是 观-10 的根因判据)。这一条解释了为什么 词-09 拼音那么贵。

已在线上,不用勾

治-07 死控件扫描 已在线上内容治理

凡是「看着能点、点了什么都不发生」的东西,构建期就拦。

已拦:404 页的搜索框没有脚本抽屉把手不可点底栏空格子

出处 两个真实反面:苹果关掉 JS 后顶栏 11 个链接全丢;百度底栏四项全是无 href 无 role 的 div。我们自己的两次:四支计算器集体停摆(容器改名后 closest('.card') 永远返回 null),首页搜索整体死掉(模板里中文变量名编出来是空标识符,SyntaxError)。
代价 已装(V21 扫「样式表里有但从没命中的类」)。
判断 装。这条今晚已经替我抓出三次,而三次全是「静态全绿、行为坏掉」。

已在线上,不用勾

治-08 真机行为门禁 已在线上内容治理

第三层门禁:起真 Chrome,把每个控件真点一遍,量的是结果不是我的意图。

B1 应有数对撞 · 4 支计算器全在跑
B2 radio 走真手风琴路径 · 通过
B4 关 JS · 选项整族摊开且不再报折叠态
B5 目录抽屉真开真跳 · 28 页
B6 底栏收放 · 总高不变 + 减动降级
B7 34 页逐页开过 · 零抛错
B9 纵向节奏 7 项 · 这条会抓到 观-04

出处 起因是硬的:v1 那 43 条渲染断言在迁 v3 时一条都没带过来,于是「全绿但坏掉」的 bug 直接过了三道门。苹果手风琴、百度底栏的实现也是靠真逐帧才量准的(291/292/306/289ms)。
代价 已装,B1–B11 十一支:应有数对撞、radio 走真路径、关 JS、抽屉真开真跳 28 页、底栏收放、34 页逐页开过零抛错、手风琴机制、纵向节奏、遮罩关、搜索位置。
判断 保持。新改版第一件要做的就是把它指向新站;顺带它自己也得长出一条:量 h2 的上下距(就是 观-04 那条假账的成因)。

已在线上,不用勾

明确不做的 —— 记下来防我手痒 2

词-10 同名义项 不做词条管理

一个名字指好几个东西时,顶部给一条「其他 12 个同名词条」切换。

其他 3 个同名词条
疾病药物检查人物

出处 百度主键是「义项」不是「标题」,实测全站义项/标题比 1.103 ≈ 9.4% 记录抢名(黄河 211 项、红楼梦 142 项)。它的样本 59.1% 多义不可外推——那是专挑知名词测的。
代价 真要做要动实体主键(一层义项表 + 消歧页),不是改 UI。不做则 0 代价。
判断 不装:我们条目位重名实测为 0,四栏本身就是命名空间,真撞名了有 V3 别名唯一性拦。装它是为不存在的问题做界面。等第一个真撞名再立项。

已定不做,不用勾

互-15 网格推出 不做交互

候选方案:grid-template-rows: 0fr → 1fr 过渡,让下面整排行被平滑推下去而不是跳一下。

下面是 0fr 过渡:整块被平滑推走
第一行被推下去了第二行第三行

出处 苹果实测确认它没做这件事(容器第 0 帧就位)。0fr 方案兼容性 Chrome 107+、inert 102+,iOS Safari 16 以下跳变但功能不受影响。
代价 CSS 约 45 行、内联 JS 约 18 行/页;最贵的不是行数:为它放宽动效门禁,判据形状就得从「白名单属性名」改成「白名单:不产生位移的属性名」——那是开口子。
判断 不装,保留 互-07 的瞬时路。真觉得「跳」得难受,再单独立项讨论。

已定不做,不用勾

新旧编号对照(老截图查这张表)

新名字原档案原展台
词-01信息框—词-01
词-02字段有型词-06—
词-03卡类型白名单词-09—
词-04空值整行词-07—
词-05派生目录词-01—
词-06目录序号词-02—
词-07语义锚点词-03—
词-08别名反查词-05—
词-09题头读法—词-02
词-10同名义项词-04 义项分流词-03
词-11版本脚注—词-04
词-12出处到字段词-08 字段出处 + 展台 词-05 出处角标词-05
词-13检索台首页—词-06
观-01分组底色—观-01
观-02整屏面板观-06 的面板内距那一半观-07
观-03缩进发丝线观-03观-02
观-04上松下紧观-04 标题偏置观-03
观-05键值密排观-05—
观-06面板收距观-06—
观-07小字两档观-07—
观-08中文零字距观-08 中文撤距观-04
观-09标题加行观-09—
观-10替文箭头观-10—
观-11安全区垫观-01—
观-12点按无灰观-02—
观-13系统蓝—观-05
观-14黑底重点块—观-08
观-15填充图标—观-06
互-01双层吸顶互-01互-01
互-02节条吸附互-10互-02
互-03当前节亮互-11—
互-04底栏收放互-02互-03
互-05抽屉目录互-08 原生抽屉互-04
互-06遮罩点关互-09互-06
互-07脱流交换互-04—
互-08手风琴选项互-05 卡片选项 + 互-07 瞬时选态互-05
互-09选项语义壳互-05—
互-10选完自收互-06—
互-11整行按压—互-07
互-12大标题收进栏—互-08
互-13次要节折叠—互-09
互-14放大不截字互-12—
互-15网格推出互-03—
治-01关 JS 摊开治-01—
治-02减动降级治-02—
治-03字形门禁治-03—
治-04间距档收窄治-04—
治-05层级令牌治-05—
治-06缺字段就红—治-01
治-07死控件扫描—治-02
治-08真机行为门禁——(本轮新增)
治-09来源审定治-06—
治-10版本留痕治-07—
你勾了 0 项:勾完把这张截图发我,或者直接说编号。