copyparty 换主题实操:3 条命令 + 一份变量表,把轻量文件服务器的界面改成自己的
【免费下载链接】copypartyPortable file server with accelerated resumable uploads, dedup, WebDAV, SFTP, FTP, TFTP, zeroconf, media indexer, thumbnails++ all in one file项目地址: https://gitcode.com/GitHub_Trending/co/copyparty
打开 copyparty 默认的文件浏览器,想换个配色,翻遍页面却找不到任何入口——其实它压根没藏起来:copyparty 主题定制靠的就是启动参数加一个 CSS 文件,全程不碰代码。下面从换主题的机制讲起,覆盖内置主题切换、CSS 变量体系、从 0 到 1 造一个蓝屏风格界面,以及图标插件的配合和部署检查清单。
主题机制:根类名 + 变量覆盖,一句话讲清
copyparty 的页面在生成时,会把一个类名写到<html>根元素上,这个类名来自--theme参数或浏览器里保存的上次选择。所有 CSS 文件再拿这个类名当选择器,批量覆盖颜色变量。内置的 10 套主题就是这样来的:不同类名配不同变量值,并不存在单独的"主题包"。
示意一下这条链路:
--fg→ 正文文字颜色--bg-u2→ 列表、面板的底色--a→ 链接和高亮色--font-main→ 字体族
界面配色全部由变量驱动,你在某个类名下把这些变量覆盖一遍,copyparty 深色主题还是浅色主题就切换完成了。变量的完整定义见 ui.css。
3 条命令跑通第一个主题
先跑通,再回头解释为什么有效。第一条只换内置主题,编号 0 到 9:
copyparty --theme=4 /path/to/your/files第二条加载你自己的样式表:把写好的 CSS 放进 webroot 下的.themes文件夹,用--css-browser指向它,文件浏览器页面会连同默认样式一起引用:
copyparty --css-browser=/.themes/bsod.css /path/to/your/files第三条是最完整的写法:--themes=10告诉设置面板里列多少套主题,--theme=9让浏览器默认落在你的自定义主题上,--css-browser负责把样式真正注入页面:
copyparty --themes=10 --theme=9 --css-browser=/.themes/bsod.css /path/to/your/files回头看机制:--theme决定根元素拿到哪个类名,--css-browser决定额外加载哪个样式表,两者一个管"选中谁",一个管"长什么样"。
变量字典:定制前只需要认识这 11 个
做 copyparty CSS 定制,核心不是背一百个变量,而是认出该动哪几个。基本集都定义在 ui.css 开头:
| 变量 | 作用 |
|---|---|
--font-main/--font-serif/--font-mono | 正文 / 衬线 / 等宽字体族 |
--fg | 正文基础文字色 |
--fg-max | 强调文字色,标题和重要内容用它 |
--fg-weak | 弱化文字色,次级信息 |
--bg | 页面背景主色 |
--bg-u2/--bg-u5 | 深浅不一的背景层,列表、面板、输入框各取不同层 |
--a/--a-hil | 链接色 / 悬停高亮色 |
--btn-bg/--btn-fg | 按钮底色与文字色 |
--txt-sh | 文本阴影 |
浅色与深色主题的切换只是换了根类名,变量机制完全一样,不再重复。
从 0 到 1 造一个蓝屏主题
仓库里带了一份现成的 bsod.css 可以参考,但这里按你自己的思路走一遍。
选色。蓝屏风格其实就一个蓝底加白字,需要定三个蓝:底蓝铺满背景,亮一点的蓝做按钮和面板,再亮一档做高亮和滚动条。
写变量覆盖。用html.ey当选择器——这个类名只要和内置的 10 套不撞就行:
html.ey { --fg: #fff; /* 白字 */ --fg-max: #fff; --bg: #2067b2; /* 蓝屏底蓝 */ --bg-u2: var(--bg); --bg-u5: #3d7bbc; /* 面板用亮蓝 */ --a: #fff; /* 链接也保持白 */ }想要"蓝屏"而不只是"蓝色",再给背景贴一张图,并微调顶部操作栏的阴影和圆角:
html.ey { background: url('bsod.png') top 5em right 4.5em no-repeat fixed var(--bg); } html.ey #ops { text-shadow: 1px 1px 0 rgba(0,0,0,.5); border-radius: .3em; }放文件、启动验证。CSS 和背景图一起放进 webroot 下的.themes文件夹,然后:
copyparty --themes=10 --theme=9 --css-browser=/.themes/bsod.css /path/to/your/files浏览器打开看一眼,哪块颜色不对就回到变量表补一条,改完刷新即可。
图标插件:给文件类型加标识的独立一层
仓库的 contrib/plugins/ 里有个 browser-icons.css 插件,按扩展名给文件加图标。比如给视频文件在缩略图中央压一个半透明播放键:
#ggrid>a[href$=".mp4"i]:before { content: '▶'; opacity: .8; background: rgba(0,0,0,.7); }图标插件管"每类文件长什么样",主题管"整体什么颜色",两者正交,随便叠加互不干扰。
部署检查清单:4 步核对一遍
- 目录:webroot 下建
.themes/,你的 CSS 和它引用的图片都放里面,CSS 里用相对路径引用同目录图片。 - 参数:
--themes、--theme、--css-browser三个一起给,只给--css-browser也能生效,只是设置面板里看不到自定义编号。 - 预览:改完 CSS 直接刷新页面即可,服务端每次给样式链接带时间戳参数,不会被浏览器缓存卡住。
- 回退:把
--theme改回 0,或者在浏览器设置面板里把主题编号选回 0,就恢复默认外观。
两个进阶场景:品牌色与高对比度
公司 NAS 上的界面想带上司认出来的颜色,覆盖一组变量就够:
html.brand { --fg: #333; --bg-u2: #f5f5f5; --bg: #fff; --a: #0066cc; /* 公司主色 */ --btn-bg: #0066cc; }给看不清默认灰底的用户,高对比度主题的思路是纯黑底、纯白字、亮黄强调:
html.hc { --fg: #fff; --fg-max: #fff; --bg: #000; --bg-u2: #000; --a: #ff0; --btn-fg: #000; }这类主题落地前建议实测:文字与背景对比度至少 4.5:1,字号别小于 16px,高对比不等于把字调小。
从三条命令到一份变量覆盖,copyparty 自定义界面这件事没有别的机关了——三个启动参数,改完 CSS 刷新就能看到结果。仓库里 contrib/themes/ 放着现成主题可以抄,更多机制细节在 docs/ 里。现在的问题只剩一个:你的界面准备换成什么风格?
【免费下载链接】copypartyPortable file server with accelerated resumable uploads, dedup, WebDAV, SFTP, FTP, TFTP, zeroconf, media indexer, thumbnails++ all in one file项目地址: https://gitcode.com/GitHub_Trending/co/copyparty
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考