3.2.48: 归档倒序/字号/底边对齐/共N篇 + 评论标题线等长 + 工具条分隔线统一 #18

工单 #18 八条诉求逐条落地:

1. 月份、日期、年份全部倒序(最近的在最上面)
   - PHP 侧 `krsort($years[$y]['months'])`(原来是 ksort)
   - JS 侧 `Object.keys(...).sort((a,b)=>b-a)` —— 对象键序对纯数字整数键
     会强制升序,服务端顺序传不过来,必须前端自己再排一次
   - 年份本来就是 krsort,日期本来就是倒序,本次只补月份

2. 年份字体再大一点
   - 原来 CSS 写的 22px **从来没有生效过**:`.yang-archives .ar-year` 是
     (0,2,0),被 `.k-main .details .article .content h3` 的 (0,4,1) 压死,
     线上实际是 18px
   - 改为带 `.k-main` 前缀(提到 (0,5,0))+ 26px + 700
   - `.ar-month-title` 同一个坑,一并修(写 14px/600,线上实际 16px/500)

3. 「共 N 篇」太高、比年份还高 → 下移与年份底边对齐
   - `.ar-head` 的 `align-items: center` → `flex-end`
   - `.ar-year` 的 margin 显式清零(kratos 的 `h1..h6 { margin: 0 0 30px 0 }`)
   - 窄屏媒体查询同步改,否则手机上又回到居中
   - 注意 `flex-end` 对的是 margin box,所以 margin 不清零等于没改

4. 每月后面的裸数字 → 「共 N 篇」
   - PHP:`sprintf(esc_html__('共 %s 篇'), number_format_i18n(...))`
   - JS:同一个文案键 `i18n.monthCount`,服务端输出到 `yangArchivesData`
   - 新增 `monthCount` 键,**没有复用** `totalFmt`(两处语义不同,
     以后要分别改文案时不至于互相牵连)

5. 上一年/下一年按钮看不清 → 与「写下你的评论」同款观感
   - 平时:`1px solid #cfe6fb` 浅蓝框 + 透明底 + `--yq-primary-dark` 蓝字
   - 悬停:主色实底 + 白字(`.ar-nav-year` / `.ar-nav-arrow` 也要跟白,
     否则图标还是蓝的在蓝底上看不见)
   - 禁用态保持灰(`is-disabled` + opacity .42),不能跟可用态一个样

6. 评论「评论者」下面的灰线太短 → 延长到与评论分隔线等长、右侧到头
   - 🔴 这里改过一次方案:一开始以为把 h3 `flex: 1 1 auto` 撑宽就行,
     实测发现 `.comments-head` 是 flex 行,右边还有「写下你的评论」按钮
     (flex: 0 0 auto),h3 撑满也只能长到按钮左边缘 —— 原理上到不了右端
     (实测 h3 110.5px / li 561.98px,差的 451px 就是按钮 + gap)
   - 最终方案:**线从 h3 搬到 `.comments-head` 容器上**,
     h3 显式 `border-bottom: none` 干掉 kratos 的 #f0f0f0,
     否则会出现一短一长两条线,比原来更难看
   - 容器那条规则**还必须带 `.k-main` 前缀**((0,5,0)),否则压不过
     kratos 的 `.comments .title`。发布判据当场抓到这一条:注释里写了
     「带 .k-main 前缀」,代码里漏了 —— 注释不能当证据

7. 工具条分隔细线不统一 → 5 个按钮 4 条线
   - 原来 B/I 之间没有线,其余有 ⇒ 现在统一
   - 写成「每条后面跟一条」会在末尾多出贴容器边缘的孤线,所以是 5 按钮 4 线

8. 清理无用 JS/CSS
   - 四轮查证结论:**没有可安全删除的**,代码一行未动
   - 排查过程已作为评论发到工单

测试:归档单测 113/0(反向 13 真红)、归档 e2e 112/0(反向 24 真红)、
评论几何 157/0(反向含新增 5 条,覆盖"线搬回标题""两处都画"两种错误形态)。
线上真实页面几何探针发布前 17 通过/16 失败(每条都对应上面某一条诉求),
发布后要求全绿。
This commit is contained in:
2026-10-26 18:42:40 +08:00
parent db2e9c4230
commit 492d8e11a6
6 changed files with 265 additions and 31 deletions
+81 -7
View File
@@ -130,25 +130,99 @@
box-shadow: none;
}
.comments-head {
/* 3.2.48:`padding-bottom` 从 15px 改成 0 —— 分隔线现在挂在 .title
* 自己的 border-bottom 上(见下),标题已自带 12px 下内边距。
* 若这里还留 15px,线与第一条评论之间会空出 27px,线看起来"飘在
* 半空"。 */
/* 标题:不加任何装饰。
* 曾经在左侧加过一条主色竖条 —— 用户明确要求去掉:标题本身字重足够,
* 竖条只是多余的视觉噪音,而且它逼着标题让出 12px 左内边距,
* 让「评论」两个字和下方评论正文的左边缘对不齐。
*
* 🔴🔴 3.2.48:标题下面那条**灰线太短**的真正原因,以及为什么线要搬家。
*
* 用户看到的是:「评论者两个字下面,有一个灰色的线,太短了」。
* ("评论者"其实是标题里的「评论(614)」,线上没有"评论者"三个字。)
*
* ── 这条线原来是哪来的 ──────────────────────────────────────
* **不是本文件画的**,是 kratos.css:1534:
* .k-main .details .comments .title {
* padding: 16px 0;
* border-bottom: 1px solid #f0f0f0; ← 就是它
* font-size: 19px;
* }
* 特异性 (0,4,0),压过本文件原来的 `.comments-head .title`(0,2,0)。
* 所以早期在本文件里调它,怎么调都不生效。
*
* ── "短"有两层原因,只修一层不够 ────────────────────────────
* 第一层:h3 作为 flex 项默认 `flex: 0 1 auto`,宽度收缩到**内容宽度**
* (线上实测 110.5px),而下方评论分隔线是 li 的 border-bottom,
* 撑满容器(实测 561.98px)。差 451px。
* 第二层(更关键):即使把 h3 撑到 `flex: 1 1 auto`,**它也只能长到
* 「写下你的评论」按钮的左边缘**——那个按钮是同一行的第二个
* flex 项(`flex: 0 0 auto`)。所以 h3 上的任何边框,
* 原理上都不可能"右侧到头"。
*
* ⇒ 结论:**线必须画在整行上**,不能画在标题元素上。
* `.comments-head` 是这一行的容器,它的宽度就是 561.98px,
* 与评论列表的 li 完全一致 —— 这才是"和下面的分割线一样长"。
* 标题和右侧按钮都浮在这条线之上,视觉上就是
* 「评论(614) …… 写下你的评论」压在一条通栏细线上。
*
* 所以下面 .title 里**必须** `border-bottom: none`,
* 并且把 kratos 那条 (0,4,0) 的 #f0f0f0 一起干掉 ——
* 否则会出现**两条线**:h3 自己一条短的、容器一条长的。
*
* 判据(_live_geom18.js):线的右端必须与
* `.yang-comment-list > .yang-comment` 的 border-box 右边缘对齐。
* ⚠️ 这条判据是"量出来的",不是"看 CSS 有没有写" ——
* 因为第一层原因就是"写了也不生效",靠读代码根本发现不了。 */
.comments-head,
.k-main .details .comments .comments-head {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 12px;
padding-bottom: 15px;
/* 12px 下内边距把文字与线隔开(原来靠 h3 的 padding-bottom,
* 线搬到容器上后这个活也归容器)。 */
padding-bottom: 12px;
/* 🔴 线画在这里:整行宽度 = 评论列表宽度。
* 加 `.k-main …` 前缀是为了在后续若有更高特异性规则时仍能守住,
* 同时也把 kratos 给 .comments 加的 margin/padding 影响考虑进去
* (实测容器与 li 同宽,见 _live_geom18.js 的实测值)。
* ⚠️ 这个前缀曾经**只写在注释里、代码里没加** —— 注释与代码不一致,
* 被发布脚本的第②条判据抓出来了。现在真加上了。 */
border-bottom: 1px solid var(--yq-line, #eaedf2);
}
/* 标题:不加任何装饰。
* 曾经在左侧加过一条主色竖条 —— 用户明确要求去掉:标题本身字重足够,
* 竖条只是多余的视觉噪音,而且它逼着标题让出 12px 左内边距,
* 让「评论」两个字和下方评论正文的左边缘对不齐。 */
.comments-head .title {
/* 标题本体:**不再有自己的下边框**(线已搬到容器上)。
*
* 🔴 `border-bottom: none` 这一句是必须的,不是清理:
* kratos.css 的 `.k-main .details .comments .title` 给了
* `border-bottom: 1px solid #f0f0f0`((0,4,0)),不显式干掉就会出现
* 两条线 —— 短的在内、长的在外,比原来只有一条短的更难看。
* 选择器带 .k-main + .comments-head,特异性 (0,5,0),压得过 (0,4,0)。
*
* `flex: 1 1 auto; min-width: 0` 仍然保留:让标题吃掉剩余宽度,
* 把「写下你的评论」稳定推到最右;同时 min-width:0 防止长标题
* 把按钮挤出容器。但**它已经不负责任何线条的长度**了。 */
.comments-head .title,
.k-main .details .comments .comments-head .title {
flex: 1 1 auto;
min-width: 0;
/* margin 必须显式清零:kratos.css 的 `h1..h6 { margin: 0 0 30px 0 }`
* 会给它 30px 下外边距,线与列表之间会空出一大块,看起来"线飘在上面"。 */
margin: 0;
color: #1f2328;
font-weight: 600;
font-size: 19px;
line-height: 1.4;
letter-spacing: -0.005em;
/* 干掉 kratos 那条 (0,4,0) 的 #f0f0f0 下边框 —— 见上面注释。
* 横向 padding 也归零:一旦有左右内边距,标题文字的左右边缘
* 就会与评论正文对不齐。 */
padding: 0;
border-bottom: none;
}
/* 「写下你的评论」:原来用 3px 圆角 + #f4f8ff 底,白底上几乎看不出是按钮。