立意:既是字母 O 也是汉字「一」,对应站名 ONE / 一个博客。 - favicon.svg 重画:横杠用 fill-rule=evenodd 挖成真洞而不是叠一块纸色矩形, 所以纸感 / 墨色暗端 / 后台卡片任何底色都直接透过去,不必为皮肤各出一版; SVG 内带 prefers-color-scheme,标签页深浅自动翻色 - 补 favicon-16/32.png(不认 SVG 的老浏览器)与 apple-touch-icon.png 180 (iOS 不支持 SVG 且会把透明压成黑底,故铺纸色实底)。PNG 由临时 Go 程序 按 8x8 子采样光栅化生成,生成器未入库,产物是资产 - LogoMark.vue 内联 SVG 组件:颜色跟 currentColor,尺寸由外层给 - 接入 6 处:classic 桌面左栏品牌位(原来是个排版字符 ○)、移动顶栏 brand、 时间线头像位、详情页头像位、快发盒头像位;vivid 顶栏与底部 dock 品牌标记 (右下角绿色在线点保留,它是「有人在写」的信号,不属于被替换的部分) - 顺带清理:三处只为算首字母的死代码(initial 与只服务于它的 userName)、 vivid 里一条被同特指度靠后规则完全覆盖的 .av 死规则;标记 wrapper 统一加 flex:none,否则站名一长会被压成椭圆
45 lines
2.2 KiB
HTML
45 lines
2.2 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content" />
|
||
<meta name="theme-color" content="#faf7f1" media="(prefers-color-scheme: light)" />
|
||
<meta name="theme-color" content="#1f1d1a" media="(prefers-color-scheme: dark)" />
|
||
<title>ONE · 一个博客</title>
|
||
<meta name="description" content="长文与短文,同一种节奏。" />
|
||
<!-- 方案 A「一横」:SVG 优先(内部有 prefers-color-scheme,深浅皮肤各自变色),
|
||
PNG 只给不认 SVG 的老浏览器;apple-touch-icon 必须 PNG(iOS 不支持 SVG,
|
||
且会把透明压成黑底,所以那张铺了纸色实底)。 -->
|
||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png" />
|
||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png" />
|
||
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
||
<link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml" />
|
||
<!--
|
||
UI 版本在 <html> 上以 data-ui 表达,服务端设置要等 /api/site 才知道。
|
||
这里先读本地缓存设上,避免首帧闪一下 classic 再跳到 vivid。
|
||
站点级设置(非访客偏好),缓存是安全的。值与 site.js 的 UI_KEY 保持一致。
|
||
-->
|
||
<script>
|
||
(function () {
|
||
try {
|
||
// 后台一律 classic:vivid.css 也会命中 .btn / .input 这类全局类,
|
||
// 而后台表单正在用,所以这里就要把路径也判断掉,别等 App 挂载再纠正。
|
||
var isAdmin = location.pathname.indexOf('/admin') === 0
|
||
var v = localStorage.getItem('one.ui')
|
||
document.documentElement.setAttribute(
|
||
'data-ui',
|
||
!isAdmin && v === 'vivid' ? 'vivid' : 'classic'
|
||
)
|
||
} catch (e) {
|
||
document.documentElement.setAttribute('data-ui', 'classic')
|
||
}
|
||
})()
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<div id="app"></div>
|
||
<script type="module" src="/src/main.ts"></script>
|
||
</body>
|
||
</html>
|