|
|
@@ -1,10 +1,10 @@
|
|
|
/**
|
|
|
- * 票 103 静态闸门:菜单再左移整页宽的 5%,状态栏整体左移、右侧留出整页宽的 10% 空白。
|
|
|
+ * 票 103 静态闸门:菜单再左移整页宽的 5%,状态栏整体左移、右侧留出整页宽的 15% 空白。
|
|
|
*
|
|
|
* 维护者 2026-11-02:
|
|
|
* 1. 菜单按钮再略微向左移动(按整体页面宽度计算),2026-11-02 二次反馈定稿 5%;
|
|
|
- * 2. 「归位 / 返回全球 / 时间」这一栏整体向左移动,右侧留出空隙,定稿 10%
|
|
|
- * (初版 25% 被维护者判定「留空太多」,压到 10%)。
|
|
|
+ * 2. 「归位 / 返回全球 / 时间」这一栏整体向左移动,右侧留出空隙,定稿 15%
|
|
|
+ * (维护者三轮反馈:25% → 10% → 定稿 15%)。
|
|
|
*
|
|
|
* 这两条会互相牵制:菜单右缘左移的同时状态栏也在左移,窄屏上会撞在一起
|
|
|
* (票 37 记录过的「归位压住预警处置」就是这个形状)。所以本闸门不只查字面量:
|
|
|
@@ -39,16 +39,16 @@ check(/position:\s*absolute/.test(meta), '状态栏须脱离 grid 居中流程
|
|
|
check(/right:\s*var\(--topbar-status-inset\)/.test(meta), '状态栏右缘须引用 --topbar-status-inset')
|
|
|
check(/top:\s*calc\(/.test(meta) && /translateY\(-50%\)/.test(meta), '绝对定位后仍须与按钮行同水平居中')
|
|
|
|
|
|
-// 10vw 与三条收敛条件都在顶栏那个变量里声明(单一来源),此处对变量本体验。
|
|
|
+// 15vw 与三条收敛条件都在顶栏那个变量里声明(单一来源),此处对变量本体验。
|
|
|
check(/--topbar-status-inset:\s*min\(/.test(topbar), '状态栏内缩须用 min() 收敛(窄屏不得压住菜单)')
|
|
|
-check(/--topbar-status-inset:\s*min\([^;]*10vw/.test(topbar), '状态栏右侧须留整页宽的 10% 空白(10vw)')
|
|
|
-check(!/--topbar-status-inset:\s*min\([^;]*25vw/.test(topbar), '状态栏留白不得仍是 25vw(维护者已压到 10%)')
|
|
|
+check(/--topbar-status-inset:\s*min\([^;]*15vw/.test(topbar), '状态栏右侧须留整页宽的 15% 空白(15vw)')
|
|
|
+check(!/--topbar-status-inset:\s*min\([^;]*25vw/.test(topbar), '状态栏留白不得仍是 25vw(定稿 15%)')
|
|
|
check(/--topbar-status-inset:\s*min\([^;]*var\(--topbar-nav-shift\)/.test(topbar), '状态栏收敛条件必须与菜单位移同源')
|
|
|
-// 约束②的常数必须与几何推导一致(324u = 12u内边距 + 300u状态栏 + 12u间距 + 186u半菜单宽)。
|
|
|
-// 写成 510u 在可行视口上恰好不改变结果(10% 留白总是最紧的那条),但它是错的常数:
|
|
|
-// 一旦 10vw 那条被调大,错误常数就会提前触发、把状态栏推出页面。所以直接锁常数。
|
|
|
-check(/--topbar-status-inset:\s*min\([^;]*calc\(50vw - 324\s*\*\s*var\(--u\) - var\(--topbar-nav-shift\)\)/.test(topbar), '「不得压菜单」的常数须为几何推导值 324u(12+300+12-186)')
|
|
|
-check(!/--topbar-status-inset:\s*min\([^;]*calc\(50vw - 510/.test(topbar), '不得用 510u 这个错常数(多算一个半菜单宽)')
|
|
|
+// 约束②的常数必须与代数推导一致:510u = 12u 内边距 + 300u 状态栏 + 186u 半菜单宽 + 12u 间距。
|
|
|
+// 写成 324u(漏算半菜单宽)会让上界偏大,窄屏挡不住重叠:
|
|
|
+// 15% 在 1152×720 会压到菜单 13px,此时必须由 510u 这条把 inset 收敛到 135.4u。
|
|
|
+check(/--topbar-status-inset:\s*min\([^;]*calc\(50vw - 510\s*\*\s*var\(--u\) - var\(--topbar-nav-shift\)\)/.test(topbar), '「不得压菜单」的常数须为代数推导值 510u(12+300+186+12)')
|
|
|
+check(!/--topbar-status-inset:\s*min\([^;]*calc\(50vw - 324/.test(topbar), '不得用 324u 这个错常数(漏算半菜单宽,窄屏挡不住重叠)')
|
|
|
check(/--topbar-status-inset:\s*min\([^;]*50vw - 180\s*\*\s*var\(--u\)/.test(topbar), '状态栏须有「不得超出页面右缘」的兜底(窄屏不被 overflow 裁掉)')
|
|
|
|
|
|
// ---- 复算:按 CSS 里的同一套公式算几何(单位全换算到 px)----
|
|
|
@@ -65,8 +65,8 @@ const navShift = (w, h) => Math.max(-0.05 * w - 32 * unit(h), 506.6 * unit(h) -
|
|
|
// 写成 510u 会让窄屏得到负值、把状态栏推到页面外。
|
|
|
const statusInset = (w, h) =>
|
|
|
Math.min(
|
|
|
- 0.10 * w - 12 * unit(h),
|
|
|
- 0.5 * w - 324 * unit(h) - navShift(w, h),
|
|
|
+ 0.15 * w - 12 * unit(h),
|
|
|
+ 0.5 * w - 510 * unit(h) - navShift(w, h),
|
|
|
0.5 * w - 180 * unit(h)
|
|
|
)
|
|
|
function geometry(w, h) {
|
|
|
@@ -100,14 +100,14 @@ check(
|
|
|
'1920×1080:菜单须恰好再左移整页宽的 5%(叠加票 102 的 -32u)'
|
|
|
)
|
|
|
check(
|
|
|
- Math.abs(target.blank - 0.10) < 0.002,
|
|
|
- `1920×1080:状态栏右缘须恰好停在 90vw,实测留白 ${(target.blank * 100).toFixed(1)}%`
|
|
|
+ Math.abs(target.blank - 0.15) < 0.002,
|
|
|
+ `1920×1080:状态栏右缘须恰好停在 85vw,实测留白 ${(target.blank * 100).toFixed(1)}%`
|
|
|
)
|
|
|
|
|
|
// 窄屏:两条要求冲突时必须收敛(宁可少移,也不许两栏重叠、不许出界)。
|
|
|
// 1152×720 是可行下限:此处菜单已被标题顶住(位移收敛到标题右缘),留白也收敛。
|
|
|
const narrow = geometry(1152, 720)
|
|
|
-check(narrow.blank >= 0.10, '1152×720:留白按收敛值执行(不小于 10%,同时不越界)')
|
|
|
+check(narrow.blank > 0 && narrow.blank < 0.15, '1152×720:15% 会压到菜单 13px,须由「不压菜单」那条约束收敛成更小的留白')
|
|
|
check(narrow.statusLeft >= narrow.navRight + GAP * narrow.u - 0.5, '1152×720:收敛后仍不得重叠')
|
|
|
check(narrow.statusRight <= 1152 + 0.5, '1152×720:收敛后仍不得出界')
|
|
|
|