feat(5f): 代码块窗条+书评纸卡(T5/T6 车道收编,视觉复核 PASS)
- T5:≥4 行块挂 .code-win 窗条(JS 数行标类+伪元素渲染:语言
标签取 shiki pre[data-language]+灰阶三点 #30363d 投影法一点化
三点,弃红黄绿;条 #161b22 恒深区亮暗同判);单行/2行裸块;
csge 文 4/18 判定边界实测准确;scoped 够不着 Content 内 pre
坑用 :global 解
- T6:书评正文圆角纸卡(亮 #f4f4f2/暗 #201d18 暖棕夜灯,零新
变量吃 T7 已入 tokens;1px hairline 四边抑制长文竖线感;标题
区外置结构未动)
- 视觉复核(glm-5.3-flash:max 像素级):T5 四项全 PASS(三点实
采样无红黄绿、条/点/体 github-dark 同族灰、与块顶圆角对齐);
T6 双态 PASS;暗态窗条未入截图框为残留观察项(恒定 CSS 推定
成立,判词 /tmp/beauty-impl/verdict.md)
- tasks.md T5 verify 落点修正(src/pages/archives,车道如实报
告);E2E ? 浮层偶发竞态 2/2 复跑绿
车道:op-artalk(自验 5/5+2/2);收编验收:窗条 4/18+data-lang+
纸卡双态 computed+视觉双卡 PASS
验证: E2E 34/34 PASS(E2E_BASE=dist 口);窗条/纸卡 computed 与
像素采样全对
Spec: 2026-10-26_blog-5f
Co-authored-by: GLM-5.3
This commit is contained in:
1 parent
814b138f89
commit
2bfe2ef3db
4 files changed
+146
-25
No files matched your search
@@ -133,6 +133,24 @@ const toc = headings.filter((h) => h.depth === 2 || h.depth === 3);
|
||||
addEventListener('scroll', paint, { passive: true });
|
||||
document.addEventListener('astro:page-load', paint);
|
||||
}
|
||||
|
||||
// 代码块窗条标记(P 卡 §6-3):纯 CSS 无法按内容行数条件挂伪元素,
|
||||
// 此处数行加类;语言标签取 shiki 的 language-* 类名写入 data-lang 供 CSS attr() 渲染
|
||||
const markCodeWins = () => {
|
||||
document.querySelectorAll('.prose-tech pre:not(.code-win)').forEach((pre) => {
|
||||
const code = pre.querySelector('code');
|
||||
if (!code) return;
|
||||
const lines = (code.textContent ?? '').split('\n').length;
|
||||
if (lines >= 4) {
|
||||
// astro shiki 语言落 pre[data-language](code 类名为空)
|
||||
const lang = pre.dataset.language ?? /language-([\w-]+)/.exec(code.className)?.[1] ?? 'text';
|
||||
pre.dataset.lang = lang;
|
||||
pre.classList.add('code-win');
|
||||
}
|
||||
});
|
||||
};
|
||||
document.addEventListener('astro:page-load', markCodeWins);
|
||||
markCodeWins();
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@@ -277,4 +295,47 @@ const toc = headings.filter((h) => h.depth === 2 || h.depth === 3);
|
||||
}
|
||||
.pn-item:hover strong { color: var(--accent); }
|
||||
#artalk-container { margin-top: var(--space-5); }
|
||||
/* ---- T5 代码块窗条(08 裁定 §6-3):≥4 行挂窗条,单行块维持现状裸块 ---- */
|
||||
.prose-tech :global(pre.code-win) {
|
||||
position: relative;
|
||||
padding-top: calc(var(--space-3) + 30px);
|
||||
}
|
||||
.prose-tech :global(pre.code-win::before) {
|
||||
content: attr(data-lang);
|
||||
position: absolute;
|
||||
inset: 0 0 auto 0;
|
||||
height: calc(var(--space-3) + 30px - 1px);
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
padding: 0 14px 8px 66px;
|
||||
background: #161b22; /* code-bg 上一档:恒深区亮暗同判(§6-3 暗色收益最大) */
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
|
||||
border-radius: 8px 8px 0 0;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 11px;
|
||||
letter-spacing: 0.04em;
|
||||
color: #6e7681;
|
||||
text-transform: lowercase;
|
||||
}
|
||||
/* 灰阶三点(§6-3 裁定弃红黄绿):terminal 页同款点色,伪元素本体一点+投影两点 */
|
||||
.prose-tech :global(pre.code-win::after) {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 14px;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 50%;
|
||||
background: #30363d;
|
||||
box-shadow: 18px 0 0 #30363d, 36px 0 0 #30363d;
|
||||
}
|
||||
|
||||
/* ---- T6 书评纸卡(08 裁定 §6-2):通栏 hairline 升圆角纸卡 ----
|
||||
--paper 三态已入 tokens(亮米白/暗暖棕夜灯),零新变量;7000px 长文
|
||||
左右边框恒为 1px hairline 防两根竖线感(§6-2 落地注意) */
|
||||
.prose-reading {
|
||||
border: 1px solid var(--paper-line);
|
||||
border-radius: 12px;
|
||||
padding: var(--space-5) clamp(20px, 4vw, 32px);
|
||||
}
|
||||
</style>
|
||||
Reference in new issue
Block a user