修窄屏装饰层压不住作用域块(手机上一直显示桌面版樱花)
@media 不提升特异性:作用域块 html[data-theme-style][data-page-scope="box"] 是 (0,2,1), 媒体查询里写的 html[data-theme-style] 只有 (0,1,1),于是「窄屏装饰层全置 none」这行 从来没生效 —— 手机上照样铺开桌面的花枝与花朵。深色作用域块是 (0,3,1),更压不住。 - 媒体查询里补三条同特异性的通配规则(作用域 0,2,1 / 深色基础 0,2,1 / 深色+作用域 0,3,1), 媒体块在文件更后,同特异性即胜出。 - 新增 TestNarrowMediaOverridesScopedDeco:外层每处非 none 的 --tb-deco,都要求窄屏里有 同属性名、属性数不少于它的声明。变异验证过(删掉深层那条立即 FAIL)。 它同时报出 shiroko 的 900px 块只覆盖浅色 —— 但深色块本就是 none,不算缺陷,故跳过。 - 窄屏改由加强版底纹承担樱花(透明度 ×1.9、格子 180px):桌面那套 0.18~0.34 的透明度 在 390px 上实测接近纯粉。顶栏与卡片之间那条 35px 带子试过放小花,question/admin 页卡片 从 y=110 起会切掉一半,最终不放装饰层。
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
- 换花色只改 `dev/theme-tools/gen_new_sakura.py` 里的一个色值,重跑即得;
|
||||
- 没有额外 HTTP 请求 —— SVG 就在 CSS 里。
|
||||
|
||||
代价是 CSS 有 51KB(服务端有 gzip,实际传输约 3.9KB)。主题 CSS 走 `StaticVersion` 缓存,一次性开销。
|
||||
代价是 CSS 有 54KB(服务端有 gzip,实际传输约 4KB)。主题 CSS 走 `StaticVersion` 缓存,一次性开销。
|
||||
|
||||
## 结构
|
||||
|
||||
@@ -46,8 +46,20 @@ python dev/theme-tools/gen_new_sakura.py
|
||||
|
||||
### 窄屏(≤640px)
|
||||
|
||||
装饰层全部置 `none`:卡片占满宽度后,留白只剩顶栏上下两条,枝条会直接糊在文字上。
|
||||
樱花改由底纹承担 —— `@media` 里把 `--tb-page-pattern-size` 从 300px 收到 200px,密度上来才看得见。
|
||||
装饰层全部置 `none`:卡片占满宽度,左右只剩 ~16px 边距,枝条放哪儿都会糊在字上。
|
||||
樱花改由底纹承担 —— `@media` 里换成**加强版 pattern**(透明度 ×1.9)并把格子收到 180px;
|
||||
桌面那套 0.18~0.34 的透明度在 390px 上实测接近一片纯粉。
|
||||
|
||||
试过在「顶栏与卡片之间」那条 35px 的带子里放两朵小樱花:box 页卡片从 y=122 起还行,
|
||||
question / admin 页卡片从 y=110 起就切掉半个,结果是黏在卡片边上的粉色碎块。手机上没有
|
||||
可靠的留白,就不放装饰层 —— 观感交给配色与底纹。
|
||||
|
||||
⚠️ **窄屏覆盖必须重新声明每个作用域选择器**:`@media` 不提升特异性。
|
||||
作用域块是 `html[data-theme-style][data-page-scope="box"]`(0,2,1),而媒体查询里常见的
|
||||
`html[data-theme-style]`(0,1,1)根本压不住它 —— 表现是「手机上装饰层没关掉,桌面版照样铺开」。
|
||||
深色作用域块更是 0,3,1,还得再补一条 `[data-theme="dark"][data-theme-style][data-page-scope]`。
|
||||
`TestNarrowMediaOverridesScopedDeco` 会在这里把关:外层每一处非 none 的 `--tb-deco`,
|
||||
媒体查询里都要求有同属性名、属性数不少于它的选择器再声明一次。
|
||||
|
||||
### 深色
|
||||
|
||||
@@ -116,11 +128,11 @@ python dev/theme-tools/gen_new_sakura.py \
|
||||
|
||||
| 版本 | CSS | gzip 后 | 额外请求 | 清晰度 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 内联 SVG(默认) | 51.2KB | **3.9KB** | 0 | 矢量,任意 DPR |
|
||||
| 位图 | 10.6KB | 2.7KB | 5 个 webp,共 48.9KB | 2 倍图 |
|
||||
| 内联 SVG(默认) | 53.8KB | **4.0KB** | 0 | 矢量,任意 DPR |
|
||||
| 位图 | 11.8KB | 2.8KB | 5 个 webp,共 48.9KB | 2 倍图 |
|
||||
|
||||
服务端挂了 gzip(`internal/route/gzip.go`),所以内联版**总传输 3.9KB**,比位图版的
|
||||
2.7 + 48.9 = 51.6KB 小一个数量级 —— 换位图省不了流量,只是把开销从 CSS 挪到图片。
|
||||
服务端挂了 gzip(`internal/route/gzip.go`),所以内联版**总传输 4.0KB**,比位图版的
|
||||
2.8 + 48.9 = 51.7KB 小一个数量级 —— 换位图省不了流量,只是把开销从 CSS 挪到图片。
|
||||
位图版唯一正当的理由是**素材要单独复用**(分享卡、海报、其它系统)。
|
||||
|
||||
⚠️ 直接连桶的 S3 endpoint(`*.r2.cloudflarestorage.com`)会 403,**只有自定义域/r2.dev 可匿名读**。
|
||||
@@ -140,7 +152,7 @@ python dev/theme-tools/gen_new_sakura.py \
|
||||
## 怎么验证
|
||||
|
||||
```bash
|
||||
go test ./internal/theme # 10 槽等长、深浅块成对、必需令牌齐全
|
||||
go test ./internal/theme # 10 槽等长、深浅块成对、必需令牌齐全、窄屏覆盖特异性
|
||||
```
|
||||
|
||||
视觉自检用项目真实页面快照:
|
||||
|
||||
Reference in New Issue
Block a user