用户样式——全局 CSS 与域名特定样式 sitecss
样式扩展体系
如果说脚本是"行为定制",那样式就是"外观定制"。uWeb 的样式扩展和脚本一样,分为全局和域名特定两层,形成一个完整的样式控制矩阵。
sitecss/:域名特定样式
sitecss/ 目录的用法和 sitejs/ 完全对称——以根域名命名的 CSS 文件自动应用到对应域名的页面上:
sitecss/
├── github.com.css # GitHub 的深色模式覆盖
├── baidu.com.css # 百度首页简化样式
├── default.css # 默认样式(兜底)
└── night.css # 夜间模式
匹配规则
- 文件名 = 根域名(如
github.com.css) - 支持两段、三段域名匹配
- 最长文件名优先匹配(和 sitejs 规则一致)
启用条件
- 样式文件已放入 sitecss/ 目录
- 长按窗口管理按钮,勾选"使用网址用户样式"
- 强制清空后台重启 uWeb
示例:GitHub 深色模式增强
/* sitecss/github.com.css */
/* 覆盖 GitHub 原生主题里的刺眼白色元素 */
:root {
--bg-color: #0d1117;
--fg-color: #c9d1d9;
}
body {
background-color: #0d1117 !important;
color: #c9d1d9 !important;
}
.comments-list .comment {
background-color: #161b22 !important;
}
/* 移除某些不必要的边框 */
.BorderGrid {
border: none !important;
}
sitecss/ 下的 .js 文件
这个是 uWeb 独有的特性:sitecss/ 目录下以根域名命名的 .js 文件,会在页面 HTML 解析前第一时间注入执行——比 sitejs/ 的脚本更早。这对于:
- 劫持 DOM API 做"防检测"
- 预处理 HTML 源码
- 在页面脚本加载前修改全局变量
特别有用。
sitecss/
├── github.com.css # 样式覆盖
└── github.com.js # HTML 解析前执行的前置脚本
default.css:兜底样式
如果访问的域名在 sitecss/ 里没有匹配的 CSS 文件,且 sitecss/ 下存在 default.css,则自动应用 default.css。这个兜底机制让你可以:
- 写一套全局样式覆盖所有没专门定制的网站
- 作为夜间模式的基础层(见下文)
用 default.css + 空文件实现精准夜间模式
这是一个很巧妙的组合用法:
- default.css 写全量夜间模式样式(
* { background-color: #111 !important; color: #eee !important; }等) - sitecss/ 下对黑色主题的网站(如
github.com.css)放空文件或浅灰色背景 - 效果:只有白色/浅色主题的网站被 default.css 切成夜间模式,原本就是深色的网站不受影响
night.css:自定义夜间模式
uWeb 内置了夜间模式实现,勾选后自动应用。如果你觉得内置的效果不够好,可以放一个 night.css 到 sitecss/ 目录下,它会替代内置实现,完全由你控制夜间模式的样式细节。
这个文件在"使用网址用户样式"开启时生效,可以写得比内置实现精确得多。
css/:全局样式目录
css/ 目录是所有网站共享的全局样式。和 default.css 类似但位置不同——default.css 在 sitecss/ 里做"域名兜底",css/ 里的样式是无条件的全局应用。
css/
├── global-font.css # 全局字体修改
├── bigger-text.css # 统一增大字号
└── remove-animations.css # 移除所有动画
可以放多个文件,按文件名顺序加载叠加。
优先级总结
uWeb 的样式应用顺序(后加载的覆盖先加载的):
- 浏览器内置默认样式
- 页面自身的
<style>和<link>样式 - css/ 目录下的全局样式
- sitecss/ 下匹配域名的 CSS 文件
- default.css(如果前面没匹配到域名特定样式)
- 页面内联 style 属性
配合 JS 屏蔽不良元素
长按底部工具栏 JS 按钮 → 执行"标记不良元素"菜单 → 点击页面任意元素 → 弹出对话框显示该元素及所有祖先的属性信息 → 自动生成 CSS 屏蔽代码。
生成的 CSS 默认用 display:none 屏蔽。如果元素显示属性里已经出现过 display,则建议改用 transform:scale(0)!important 屏蔽——某些网站脚本会反复重置 display 属性。