Overview
dsh-web-bg-2
README / EN
Package documentation
Registry summary
dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.
Read the full README on GitHubLIMITATIONS
Known limitations
### 三处显示问题的成因与修法(用户反馈 → 真机命中测试定位) | 现象 | 成因(命中测试实证) | 修法 | |---|---|---| | 内容列左上出现「R 角」、像没盖住 | 官方布局文档写明「内容区仅左上角保留 16px 圆角」,面板没铺满的缺口让壁纸露出来 | 面板与其子级 `border-radius:0`,并把 `--dsh-windows-content-radius` 归零 | | 底部两处渐变黑 | `RlGAzG_card`(712×98,`r=28px` + `box-shadow`)—— 卡片圆角与投影形成的渐变带 | 面板与其子级 `border-radius:0`;卡片底色改由 `--dsh-bg-*` 承担(不透明叠加,不再漏出渐变) | | 菜单栏黑色区域与右侧窗口控制区高度不一致 | 外壳的 `titleBarOverlay` 是**透明**的,而页面顶部那条(`[data-windows-menu]` 所在的 40px)自己不画底色 → 窗口透明区直接透出桌面 | 新增窗口级 **chrome 带**:`top:0`、高度取 `--dsh-frame-top-clearance`、与面板同色、`z-index:-1`,压在页面内容之下、外壳遮罩之下 | > 注:`[data-windows-titlebar]` 是挂在 **`<html>`** 上的无值属性,不是一个可上色的「条」, > 所以不能用它做选择器去染色。 ### 底部渐变黑的真凶(paintProbe 实锤) 用户反馈"窗口底部两处渐变黑不要漏出背景"。前几轮我按"面板底色/圆角/投影"去猜,都没解决; 最后给插件加了 `paintProbe`(把窗口下半部**所有在画东西**的元素的 `background / background-image / box-shadow / mask / radius / overflow` 一次性报出来),一击命中: | 元素 | 画的东西 | |---|---| | `Dc7zOa_composerSeat`(993×128,z=7) | `linear-gradient(color(srgb 0 0 0 / 0) 0px, rgb(21, 21, 23) 36px)` ← **就是那两处渐变黑** | | `_9lTDKa_fade`(侧边栏滚动渐隐) | `linear-gradient(rgba(0,0,0,0), rgb(27,27,28))` | | `_emptyTabHost`(576×782) | 不透明 `rgb(21,21,23)`,会整块盖住壁纸 | 三处都不是"面板底色",而是官方为可读性加的修饰层(让 composer/列表浮起来),在壁纸场景下应当让位: ```css html[data-wbg2-panels] [class*=composerSeat], html[data-wbg2-panels] [class*=fade], html[data-wbg2-panels] [class*=emptyTabHost]{background-image:none!important;background-color:transparent!important} ``` 修后实测:窗口底部 200px 逐段采样,会话列 `(28,120,57)` 与侧边栏 `(29,122,57)` **同色**,无暗段。 ### 顶栏那 40px:插件无法修复(用换色对照实验定死的) | 壁纸 | 顶部 40px | 页面内容 | |---|---|---| | 绿色 | `(28,29,30)` | `(28,84,45)` | | 纯白 | `(27,27,28)` | `(161,161,162)` | **页面从绿变白,顶部 40px 纹丝不动** —— 它是外壳 `titleBarOverlay`(窗口级),不在页面里。 我为此写过一条"顶栏 chrome 带"(`z-index:-1`、高度取 `--dsh-frame-top-clearance`、与面板同色), 三次测量都毫无效果(被遮罩完全覆盖),**已按用户要求撤掉**。要改它只能改官方 `app.asar` 的主进程参数。 > 方法论教训:前几轮我用"屏幕抓取 + 逐像素扫描"判断,而窗口在屏幕上会移动、抓取有偏移, > 几次读出互相矛盾的数字并据此改错了参数。真正定死问题的两个手段是 > **①换色对照实验**(变量法)和 **②让页面自己把绘制属性报出来**(`paintProbe`/`analyzePoint`)。 ### 标题栏遮罩色改不了(机制层确认) Windows 主窗口用 Electron `titleBarOverlay { height: 40 }` 绘制遮罩;外壳框架页会从自己的 探测元素读底色、经 `windowsAppearance` IPC 调 `setTitleBarOverlay`,但主进程只接受来自 `dsh-app://app/` 主框架的调用,而 preload **没有**把 `electron`/`ipcRenderer` 暴露进页面 (实测 `exposeInMainWorld("electron")` 0 处)。插件能做的是让页面在那一段自己画上底色—— 也就是上面那条 chrome 带,这样窗口透明区不再露出桌面。 ### 最致命的一刀:**半透明底色绝不能在每一层后代上重复施加** 现象:重启后 `::before` 已中和,壁纸**仍然**完全不显示。 `occluders` 探针给出决定性数据 —— 同一坐标上的 15 层 `div` **每一层**都是 `bg=rgba(21, 21, 23, 0.38)`。半透明色叠 15 层,等效不透明度 `1 - 0.62^15 ≈ 99.9%`,壁纸被彻底盖死。 成因是我一度把「面板内所有后代」的规则从 `transparent` 改成 `background-color: var(--dsh-bg-*, inherit)`(本意是让"被排除的分组恢复原样"), 结果每一层嵌套容器都各自涂了一遍分组色。修法要分清三类: | 目标 | 规则 | |---|---| | 面板自身 | `background-color: var(--dsh-bg-<组>, inherit)`(值由 applyVisual 写) | | 真正画底色的 `surface` | `background-color: var(--dsh-bg-surface, transparent)` | | **其余纯容器** | `background-color: transparent` ← 必须是 transparent | > 半透明色只能施加在「负责画底色的那一层」上。铺到所有后代 → 指数级叠加成实底; > 一个都不铺 → 面板穿帮。必须在 `surface` 这一层收口。 ### 最隐蔽的一个:**伪元素**把壁纸整块盖住 现象:诊断里一切正常(面板变量是半透明、标记齐全、样式表已注入且内容最新、 全窗扫描**找不到任何不透明元素**、`elementsFromPoint` 前 10 个元素底色全是透明), 但截图实测每个取样点都恒定等于主题底色 —— 壁纸完全没有渲染。 根因靠 `occluders` 探针拿到(沿祖先链**逐层**读取,并额外读 `::before` / `::after`): ``` div bg=rgba(0,0,0,0) ::before=rgb(27, 27, 28) ★ ← 就是它 ``` `BynINW_frame` 自身的 `background-color` 已经被中和成透明了, **但它有一个 `::before` 伪元素在画不透明的 `rgb(27,27,28)`,且铺满整个窗口** (大概率是官方给窗口圆角/阴影做的底色)。伪元素不是元素, `[data-wbg2=canvas]` 这类选择器**永远匹配不到它**,所以之前所有规则都放它过去了。 修法: ```css html[data-wbg2-canvas] [data-wbg2=canvas]::before, html[data-wbg2-canvas] [data-wbg2=canvas]::after{ background-color:transparent!important;background-image:none!important } ``` > 不要顺手清 `content`:有些图标/分隔线是靠伪元素 `content` 画的。 ### 顶栏为什么必须由页面自己画一条 壁纸在整窗铺开之后,顶栏一度出现**"左深右亮"的分段**: 放大截图能看到一条明确的分界线,大约在 x≈150(正好是菜单项的宽度)。 实测(横向六段平均色): | 菜单区 | 文字区 | 中左 | 中右 | 窗口控制区 | 最右 | |---|---|---|---|---|---| | `(36,37,40)` | `(29,29,31)` | `(21,22,24)` | `(21,22,24)` | `(21,22,24)` | `(21,22,24)` | 成因:外壳的 `titleBarOverlay` **只在菜单那一段**叠了一层暗色,其余段不管。 页面改不了
