下午好,这里是正在听Blur的しおりん。
今天的周记来记点什么呢?
Kotlin
最近,小织的一个朋友向我发出了一个help请求

他给出了一个Github链接,里面是一个第三方的网易云播放器,然后要我完成的是去掉这个的探索模式。
所谓探索模式,估计是那种社交板块,比如说分享音乐帖子的社区。
如果干脆的砍掉一个板块所有功能,如果它和软件某个模块的耦合性太高,那修修补补将会是一件难事。
干脆不如直接把底部菜单的ui删除了,那就眼不见心不烦了。(也是一种掩耳盗铃但是有效的方案)
于是我翻阅源码看看。
@@ -38,6 +38,17 @@
/** 悬浮胶囊底栏专用的 tabs(包含右侧设置入口,共 3 项) */
val floatingNavTabs = listOf(
BottomBarTab.Library,
BottomBarTab.Explore,
BottomBarTab.Settings,
)
+
+/**
+ * 底栏实际渲染的 tabs(纯 UI 门面,与 pager 页序解耦)。
+ *
+ * 探索入口下线:这里只保留「我的」,底栏不再出现探索按钮。
+ * 注意不要用这个列表去算 pager 页数/索引——[tabs] 与 [floatingNavTabs] 保持原样,
+ * HomePager 的 when(page) 仍是 0=我的 / 1=探索 / 2=设置,删 entry 不会错位。
+ */
+val navBarTabs = listOf(
+ BottomBarTab.Library,
+)
嗅到了比较浓的ai风格注释,估计也是vibe的第三方客户端,但不得不说,ui还是很不错的。增加一个val navBarTabs。
这里是git diff的视图。
- val targetPage = tabs.indexOfFirst { it.route == item.route }
+ val targetPage = navBarTabs.indexOfFirst { it.route == item.route }
将targetPage引入到我们新的var navBarTabs即可做到无痛转移。
- tabs.forEach { item ->
- val tabIndex = tabs.indexOf(item).coerceAtLeast(0)
- val selected = if (isHomeRoute) {
- tabs.getOrNull(homePageScroll.roundToInt())?.route == item.route
+ navBarTabs.forEach { item ->
+ val tabIndex = navBarTabs.indexOf(item).coerceAtLeast(0)
+ val selected = if (isHomeRoute) {
+ navBarTabs.getOrNull(homePageScroll.roundToInt())?.route == item.route
同样遍历也是如此。
其实第一次看Kotlin的代码,甚至没有什么基础,让ai基于需求定位分析逻辑就比较简单了。
但不得不说的一点,无用的社交板块太多并不是一件好事,点名网易云。
但是不想迁走是因为歌单里留了两三千首歌,只是将就着用了。
Monopoly
这周和往常的几周一样,工作日都要上班。
广东的天气到了十一月还是维持在25-30度上下,家乡那里已经要下雪 (或者是已经下雪了)
而这里暂时还是要穿短袖。

对于小织来说,天气热出门真是一个比较痛苦的事。
(这下就更有理由窝在家了) 。
最近都懒得去刷希奇了,对Fediverse的关注和热情度也是下降了不少。
其实说到搞博客,其实已经是一年前的想法了。
在一年前的时候,就有想法要捣鼓一个个人网站来玩玩,但是也只是有玩玩的心思。
第一版的博客现在的电脑上已经没有了,但是第二版还是有的。

它已经尘封很久了

哦,我想起来了。是第三版的博客在基于第二版的时候做了些小改动导致现在已经乱套了。

看起来比较干净但是ui不合理的地方比较多。

找到了第一版的博客截图,当时是用的一个叫Mizuki的开源主题。
不得不说,这个的风格还是很不错的,但现在更喜欢简约一些的了。
幸あれ
最近的作息是 ———— 澳大利亚袋鼠!
其实每天上班回来吃掉外卖然后洗澡,再大口吞下一枚褪黑素之后关灯躺平。
现在已经养成每天四五点钟起床的习惯了。但还是要尽量避免吃褪黑素了。
有人懂起床后迷迷糊糊的然后靠听歌唤醒的感觉吗
然后趁着离上班还有一段时间,就可以用来学一些东西。或者是写一写文档之类的。
最近在实习的时候解锁了一样新技能。
最近我们的一个项目要结尾了,公司购置了机器外壳,然后我和同事把开发板和外设组装到机器上,但是外壳要留给电源线和其他数据线的。所以需要进行一个打孔。

于是经理掏出了一个电钻。
告诉我们一些注意事项和安全措施,安全地在外壳上打了这个孔。
电钻的功率比较大,打孔的时候整个办公室都充斥着噪音…于是忍了一小会继续工作
最近给博客做了一个每个页的item加载动画。

把原来的等高线地图换做土星星环,但是歌词却是水星。
它是这样画出来的
/* ══════════════════════════════════════════════════════════════════════
星间环 · 入场动画 整合版
—— 把 stone-contour.js 与 stone-contour.css 里跟动画有关的代码,
按**实际执行顺序**拼成一份。行号标在注释里,方便回去对照。
══════════════════════════════════════════════════════════════════════ */
/* ── 0. 几何常量(js:54 / js:58)──────────────────────────────────── */
var CX = 310, CY = 200, R = 96, TILT = -18, RY = 0.27;
var RINGS = [ // 由外向内,一共七道
{ rx: 252, entry: null }, // 纯装饰环
{ rx: 230, entry: 0 }, // 入口一:个人介绍
{ rx: 208, entry: null },
{ rx: 188, entry: 1 }, // 入口二:友人新闻
{ rx: 168, entry: null },
{ rx: 148, entry: 2 }, // 入口三:友链
{ rx: 130, entry: null }
];
/* ── 1. 四个工具函数(js:80-114)──────────────────────────────────── */
function el(n, a) { // 造一个 SVG 元素
var e = document.createElementNS(NS, n);
for (var k in a) if (Object.prototype.hasOwnProperty.call(a, k)) e.setAttribute(k, a[k]);
return e;
}
function ln(n, a, cls, delay) { // 造一条"要画出来"的线
var e = el(n, a);
e.setAttribute('class', cls);
e.setAttribute('data-len', ''); // 提个记号:待会儿要量我
if (delay != null) e.style.setProperty('--d', delay + 'ms'); // 排队时间
return e;
}
function measure(root) { // 量出每条线有多长,写进 --len
[].slice.call(root.querySelectorAll('[data-len]')).forEach(function (e) {
var len = 0;
try { len = e.getTotalLength(); } catch (err) { len = 0; }
if (!len || !isFinite(len)) { e.removeAttribute('data-len'); return; }
e.style.setProperty('--len', (Math.ceil(len) + 2) + 'px'); // +2 是余量,防结尾漏一截
});
}
function arcD(rx, half) { // 算一条椭圆弧的路径
var ry = (rx * RY).toFixed(2);
return 'M' + (CX - rx) + ' ' + CY + 'A' + rx + ' ' + ry + ' 0 0 '
+ (half === 'top' ? 1 : 0) + ' ' + (CX + rx) + ' ' + CY;
}
/* ── 2. 建画布(js:143-146)───────────────────────────────────────── */
var svg = el('svg', { viewBox: '0 0 620 400', class: 'sc-svg' });
host.appendChild(svg);
var rot = el('g', { transform: 'rotate(' + TILT + ' ' + CX + ' ' + CY + ')' }); // 整体斜 18°
svg.appendChild(rot);
/* ── 3. 顺序 = 图层。先画后半 → 盖球 → 再画前半(js:148-194)────── */
RINGS.forEach(function (r, i) { // ① 环的后半(会被球盖掉)
var p = ln('path', { d: arcD(r.rx, 'top') }, 'ink' + (r.entry === null ? '-soft' : ''), 200 + i * 60);
if (r.entry !== null) p.setAttribute('data-ring', r.entry);
rot.appendChild(p);
});
(function globe() { // ② 球
var g = el('g', { class: 'globe' });
g.appendChild(el('circle', { cx: CX, cy: CY, r: R, class: 'globe-fill' })); // ← 遮挡盘,和底色同色
g.appendChild(ln('circle', { cx: CX, cy: CY, r: R }, 'ln globe-edge', 60));
/* (略:三条纬线 140 / 185 / 230ms、三条经线 275 / 320 / 365ms,
只是算出椭圆坐标,跟动画机制无关) */
rot.appendChild(g);
})();
RINGS.forEach(function (r, i) { // ③ 环的前半(压在球上)
var p = ln('path', { d: arcD(r.rx, 'bottom') }, 'ink' + (r.entry === null ? '-soft' : ''), 200 + i * 60);
if (r.entry !== null) p.setAttribute('data-ring', r.entry);
rot.appendChild(p);
});
/* ── 4. 三个按钮:点 + 中文 + 手写英文 + 命中框(js:202-244)─────── */
RINGS.forEach(function (r) {
if (r.entry === null) return;
var it = ITEMS[r.entry], pos = ANCHORS[r.entry];
var a = el('a', { class: 'entry no-veil', tabindex: '0', 'data-entry': r.entry });
a.setAttribute('href', it.href);
a.setAttributeNS(XLINK, 'xlink:href', it.href);
a.setAttribute('aria-label', it.cn + ' · ' + it.en);
var plate = el('rect', { class: 'plate', x: 0, y: 0, width: 0, height: 0 }); // 反色底面(透明)
a.appendChild(plate);
a.appendChild(el('circle', { cx: pos.dx, cy: pos.dy, r: 3, class: 'sat', 'data-dot': r.entry }));
var tCn = el('text', { x: pos.lx, y: pos.ly - 10, 'text-anchor': 'middle', class: 'lab-cn' });
tCn.textContent = it.cn;
var tEn = el('text', { x: pos.lx, y: pos.ly + 20, 'text-anchor': 'middle', class: 'lab-en' });
tEn.textContent = it.en;
a.appendChild(tCn);
a.appendChild(tEn);
var hit = el('rect', { x: pos.lx - 46, y: pos.ly - 30, width: 92, height: 58, class: 'lab-hit' });
a.appendChild(el('path', { d: arcD(r.rx, 'bottom'), class: 'ink-hit',
transform: 'rotate(' + TILT + ' ' + CX + ' ' + CY + ')' }));
a.appendChild(el('circle', { cx: pos.dx, cy: pos.dy, r: 14, class: 'sat-hit' }));
a.appendChild(hit); // 最后 = 最上层,文字命中优先
a.addEventListener('mouseenter', function () { go(r.entry); hov(r.entry); });
a.addEventListener('focus', function () { go(r.entry); hov(r.entry); });
a.addEventListener('blur', clearHov);
a.addEventListener('mouseleave', clearHov);
labs.push({ i: r.entry, a: a, hit: hit, cn: tCn, en: tEn, plate: plate });
svg.appendChild(a);
});
/* ── 5. 量长度 + 收命中框(js:253-254)────────────────────────────── */
measure(svg); // ← 所有带 data-len 的线在这里拿到真实长度
sizeHits(labs);
/* ── 6. 挂牌子,开始演(js:300-303)───────────────────────────────── */
requestAnimationFrame(function () {
requestAnimationFrame(function () {
document.documentElement.classList.add('draw'); // CSS 里所有动画都等这个类
});
});
当然这部分代码是ai完成的,对应的技术原型是采用svg绘画。
var NS = 'http://www.w3.org/2000/svg';
function el(n, a) { var e = document.createElementNS(NS, n); ... }
感觉到了前端工程师的伟大,但又有一点对前端岗位被ai冲击的悲哀。
虽说有些人工智能模型训练出来的前端风格skill固然很不错,但小织仍然觉得这一切的精髓都要基于人类的审美之上。
基于未来人工智能的再发展,很难想象以后的大模型又能创造什么新的历史…
春禾
最近又加了一个``` html直接渲染的功能。
相对于裸html代码块来说,我们直接处理了渲染。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Serelia · 顶栏</title>
<style>
@font-face {
font-family: 'MsMadi';
src: url(data:font/woff2;base64,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) format('woff2');
font-weight: 400; font-display: swap;
}
@font-face {
font-family: 'Serelia Serif SC';
src: url(data:font/woff2;base64,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) format('woff2');
font-weight: 200 900; font-display: swap;
unicode-range: U+831C,U+6D77,U+6708,U+6797,U+9593,U+97F3,U+95F4,U+73AF,U+96F2,U+908A,U+4FE1;
}
@font-face {
font-family: 'Serelia Serif SC';
src: url(data:font/woff2;base64,d09GMgABAAAAAAVoABUAAAAAC5gAAAT+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYIKGx4cQD9IVkFSLwZgP1NUQVSBECcqADQvdBEICoIMgW0LBgAwgVYBNgIkAwYEIAWIFgcgFyQYBhsDCsgeh3EssgGVyuwpg3i+P+vr3Psi9ms4QyJNZACsPrgTVtJQTvcPEd7uNaFpUhWaEmzY6H9E29o+z/18XRSOyvLiGmTAA5tYFc0qrAOjQTbQgTyg1a/EPB5NUcKf6Dt8C3VLfKrpE+xqOmLDzJ9qBKGIG7jHAQysvfsOHk37NS9SQt0TyS2m7g2XFdL+hcvCtP/hmWXUZQVAY1BfTQtlsAKgMEjgV8SNMJfW/1JA01SZspF1W6qrpjjE5G8GiYXWPUGxLAUdO5GJG4XZeVmyf+bfLFx6pLy0DAESCOBGAQL3EhAEuusOAZykSSMrnGvHAIgBpLirrqzDG66fWpdedzrQlwCSgSm8QgEBggRwIwAIYOhL7MECar0aDwwqamUqLdMaFNeAa4eafnNYP7rvTL2hrogFxhLJmG4VG/R4HWeBECuCYEcAkx1Io+bkF8wUAfzS1Ndeb8NNVkAACNgDCIC4pTGgAYWS90BtAARA/PKCuEE1vt/E3AQd4iTplfcIwb6FLQA46ljN4ABPZWpZorP2B6FvmvzV9O/udAcoQAMmjQAmgxAwMBDI6zGZ2ufXEICkn0J26nTuMsYeSEwzpxCHOF2+uMT90huDeMQL8h6IT/wgL0ACEgQ1HiROTFAbQOIlAXQIJFGSQK8ESUaQGHwAKAAMwAGMAdkAwAAAHIbh8bhcNpdrmg8vonaGs9mYj74x1VKd53RGRAbcGi5IH9WMD/Ra9vGPP8Ybjn+cz+3NbxmtrZwTc4KEEycGJxw+3fjJ//NgUWp6akVqRqpq7dzSq1Wfomv19GmrzZo4LQWHI93bSX330mH/8c/gN0RnfPdvt8SC5ccaT+d+5OPPuyUsrNVimN3hDf7SeOuZgTXbJj9rMLhyya4NQ/I+rGku5X541U9dE0oBQABBgBQKgDQAUwZLg52fQbd69aojyd2w4Wrdeo0ahgLP9aMbLvGGnjgx6JTN9INLL3Zfv/6w2hMMBp5Hb2ntSWvcqlXz6PEePXrbsz2+3axTp2aN4IMjx44fvLDn5s0nBFtS/IUV3SwWq1Upw7DZmlVVvXtnxrks3GNr2NDNsdvTkxzVXKmqqkGDzKCuVnr+PBRKdEZfsj02626jUb/5+MHD+yeOnzh8IfbwYVpanH7x+BG7FitAAMXOQFV27jRf55d2re8AXNv9xQaAa3cil6tqRG+5IrYgYEUBIGAs+f8auP4GrOqJUxD41qLvkKMpAZQqolufFnyrlHRFI4YDGF+WEoTmZTgUXtUTmqF50W9gWJiaT2ClcYokAWbGlongloFc09Hv5H2uflLixind4aFmMuDFq3rCR11v4MfNAwSobQ+C+P2NOOp7DyZ21iKekAIkEDQWiTTUGEk4qflbkqkJhio3U7lRckUUyjNKL030VCIsW3HVXjvlPuaaKSI8o1yJnJu2pBV11sbokkst3Mo760MeQs6ZmKWU2mtLHunPN2u/40UM8WCF8hWYWYXHySXb3vugdrzW7VxjsWOGPXi5MiEtNdVcc6000V8LnRSM5MpGjtmW1MKSNHdSKqxYLi/Pk2uu3P6utmPYRvrxdNLPMMP002lttZ300NswPUE7p9Ufsq6QHR0aJVlftgYrK26uhXaaVAdpqbWQHnKUy5IrpH7LmpkqdNRMRJ0TbiqM9aScrVypZhp8qgaA2GgpLBQ/8uJ/96uHHxtdPVcriPFnAQ==) format('woff2');
font-weight: 200 900; font-display: swap;
unicode-range: U+661F;
}
@font-face {
font-family: 'Serelia Serif SC';
src: url(data:font/woff2;base64,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) format('woff2');
font-weight: 200 900; font-display: swap;
unicode-range: U+8389;
}
:root {
--ink: #1a1a1a;
--paper: #ffffff;
--ink-soft: #555555;
--line: #e3e3e3;
--accent: #b7282e;
--brand: #8e3b34;
--serif: "Source Serif 4", "Serelia Serif SC", "Noto Serif SC", "Source Han Serif SC", "Songti SC", "STSong", "SimSun", Georgia, serif;
--lz-en: 'MsMadi', 'BrittanySignature', cursive;
--brand-mark-size: 34px;
}
* { box-sizing: border-box; }
/* 无背景、无内容:只有一个居中的顶栏 */
html, body { height: 100%; }
body {
margin: 0;
display: grid;
place-items: center;
background: transparent;
color: var(--ink);
font-family: var(--serif);
font-size: 18px;
line-height: 1.7;
}
.topbar {
position: relative; z-index: 50; display: flex; align-items: center; justify-content: flex-start;
width: calc(100% - 32px); max-width: 940px; margin: 0 auto; padding: 8px 24px; border-radius: 999px;
background: color-mix(in srgb, var(--paper) 62%, transparent);
-webkit-backdrop-filter: blur(18px) saturate(160%); backdrop-filter: blur(18px) saturate(160%);
border: 1px solid color-mix(in srgb, var(--line) 75%, transparent);
box-shadow: 0 8px 26px rgba(47, 43, 37, .12); isolation: isolate; overflow: hidden;
}
.topbar::before { content: ''; position: absolute; inset: 0; z-index: -1; border-radius: inherit; opacity: .05; mix-blend-mode: overlay; pointer-events: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E"); }
.topbar::after { content: ''; position: absolute; inset: 0 0 auto; height: 12px; z-index: -1; border-radius: inherit; pointer-events: none;
background: linear-gradient(to bottom, rgba(255, 255, 255, .22), transparent); }
.topbar .brand { display: flex; align-items: center; gap: 10px; text-decoration: none; color: inherit; }
.topbar .brand-mark { width: var(--brand-mark-size, 34px); height: var(--brand-mark-size, 34px); color: var(--accent); flex-shrink: 0; }
.topbar .brand-text { display: none !important; }
.topbar .brand-text { display: flex; flex-direction: row; align-items: baseline; gap: 9px; line-height: 1.15; }
.topbar .brand-cn { font-weight: 600; letter-spacing: 1px; font-size: 1.02rem; color: var(--ink); }
.topbar .brand-en { font-family: var(--lz-en, cursive); font-size: 1rem; color: var(--accent); opacity: .85; line-height: 1.25; }
.topbar .nav { display: flex; align-items: baseline; gap: 28px; margin-left: auto; }
.topbar .nav a { font-size: 1.05rem; font-weight: 600; color: var(--ink); letter-spacing: 1px; transition: color .2s; text-decoration: none; }
.topbar .nav a:hover { color: var(--accent); }
.topbar .theme-toggle { position: relative; width: 38px; height: 38px; margin-left: 20px; border-radius: 50%; display: grid; place-items: center;
background: color-mix(in srgb, var(--accent) 12%, transparent); color: var(--accent); overflow: hidden;
transition: background .3s, transform .3s; cursor: pointer; border: none; }
.topbar .theme-toggle:hover { transform: rotate(18deg); }
.topbar .theme-toggle .ic { position: absolute; width: 18px; height: 18px; transition: opacity .35s ease, transform .5s ease; }
.topbar .theme-toggle .ic-moon { opacity: 1; transform: rotate(0) scale(1); }
.topbar .theme-toggle .ic-sun { opacity: 0; transform: rotate(-90deg) scale(.5); }
.topbar .scheme-toggle { position: relative; width: 38px; height: 38px; margin-left: 10px; border-radius: 50%; display: grid; place-items: center;
background: color-mix(in srgb, var(--accent) 12%, transparent); overflow: hidden;
transition: background .3s, transform .3s; cursor: pointer; border: none; }
.topbar .scheme-toggle:hover { background: color-mix(in srgb, var(--accent) 20%, transparent); transform: rotate(18deg); }
.topbar .scheme-toggle svg { width: 22px; height: 22px; display: block; }
.topbar .scheme-toggle .sc-c { fill: #b7282e; }
.topbar .scheme-toggle .sc-q { fill: #33509b; opacity: .25; }
.nav-drawer-toggle,
.nav-drawer,
.nav-drawer-mask { display: none; }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 4px; }
::selection { background: color-mix(in srgb, var(--accent) 15%, transparent); color: inherit; }
</style>
</head>
<body>
<header class="topbar">
<a class="brand" href="#" aria-label="回到首页">
<svg class="brand-mark" viewBox="6 6 52 52" fill="none" aria-hidden="true"><g transform="translate(4.4 3.75) scale(0.07244)"><path d="M405 72.5L390.5 94L383.5 112L375 116.5L371.5 124L372.5 137L376.5 142L377 185.5L374.5 185L369.5 167L365.5 139L365.5 99L361.5 101L361.5 145L371 192.5L365.5 192L359 170.5L356.5 173L360.5 192L355 193.5L340 161.5L329 155.5L315 141.5L301 144.5L279 153.5L269.5 164L269.5 179L274.5 188L245.5 217L243.5 232L247.5 243L244 243.5L213.5 211L201.5 190L192.5 159L194.5 127L192 126.5L188.5 140L191.5 173L201.5 199L216.5 221L230.5 235L231.5 240L224 239.5L186 208.5L193 218.5L222.5 241L220 246.5L206.5 244L218.5 252L218 264.5L177 260.5L153 251.5L143 244.5L140.5 247L169 262.5L197 268.5L216 268.5L218.5 277L223.5 279L223 282.5L185 288.5L185 291.5L216 288.5L262.5 273L223.5 310L215.5 327L215.5 346L220.5 361L229 369.5L241 375.5L265 374.5L274.5 367L280.5 357L277.5 345L271 340.5L266.5 343L268.5 354L265 357.5L252 359.5L247.5 355L253.5 335L255.5 313L269 285.5L271.5 286L274.5 314L273.5 328L288.5 352L287.5 361L293 365.5L324 363.5L340 339.5L366 330.5L372.5 321L375.5 321L375.5 339L360.5 360L361.5 381L346.5 391L342.5 409L344.5 421L352 433.5L378.5 441L397.5 643L406.5 702L413 707.5L413.5 693L406.5 663L396.5 576L385.5 456L385.5 441L402.5 426L401.5 415L395 411.5L388.5 415L389.5 422L384.5 423L383.5 403L392.5 388L393.5 373L424 365.5L433 356.5L460.5 377L459.5 383L454 388.5L442.5 382L443.5 369L441 367.5L431.5 378L433.5 391L450 399.5L460 393.5L478 389.5L485.5 381L488 362.5L507 367.5L528 363.5L541.5 349L545.5 332L544.5 316L536.5 301L522 290.5L519.5 283L504 272.5L500.5 266L544 279.5L594 283.5L594 280.5L555 278.5L537 273.5L536.5 271L542.5 267L544 260.5L584 255.5L613 243.5L621.5 235L589 250.5L558 256.5L541.5 256L544 240.5L561 234.5L585.5 217L585 213.5L581 214.5L545 239.5L539.5 237L539.5 233L572 205.5L584.5 192L586 186.5L553 218.5L533 231.5L525.5 233L550.5 204L562.5 182L571.5 150L571.5 126L569 121.5L566.5 122L568.5 142L565.5 162L552.5 195L524.5 229L514 235.5L511.5 233L516.5 225L516.5 211L504.5 199L503.5 185L484 173.5L477 160.5L440 165.5L440.5 160L437 159.5L407 197.5L404.5 189L407.5 177L424.5 149L426.5 135L423.5 125L428.5 117L421 122.5L413 123.5L400 123.5L388.5 117L394.5 96L407.5 76ZM383.5 130L386.5 130L386 137.5L383.5 137ZM277.5 167L295 170.5L297.5 175L283 178.5L275.5 171ZM306.5 188L314 190.5L323.5 202L307 206.5L288.5 224L273.5 257L270 257.5L265.5 246L279.5 226L286.5 205L302 188.5ZM464.5 195L473.5 196L479 214.5L463.5 208ZM432.5 224L440 225.5L441.5 230L432 239.5L426 239.5L420.5 230ZM354.5 225L358.5 228L355 228.5ZM334.5 227L339 226.5L339.5 230L335 231.5ZM491.5 239L494.5 239L494.5 243L488 249.5L485.5 240ZM364.5 245L370.5 246L373 274.5L368.5 273L357.5 256ZM287.5 261L308 262.5L313.5 267L288 266.5ZM488.5 277L491 276.5L495.5 283L505.5 307L507.5 329L512.5 341L508 350.5L498 350.5L492.5 347L492 332.5L485 334.5L480 342.5L475.5 342L486.5 322L486.5 298L490.5 290ZM280.5 280L289.5 283L289 290.5ZM458.5 282L462.5 282L461 286.5L456.5 286ZM440.5 285L446 284.5L453 295.5L460.5 297L455 311.5L447.5 304L451 295.5L443 299.5L420.5 298L423 293.5ZM332.5 295L336.5 298L329 301.5ZM321.5 303L328 302.5L334.5 309L318 311.5ZM396.5 345L400 344.5L403.5 350L402 356.5L395.5 356ZM374.5 420L377.5 420L377 425.5L374.5 425Z" fill="currentColor" fill-rule="evenodd"/></g></svg>
<span class="brand-text">
<span class="brand-cn">茜莉娅</span>
<span class="brand-en">Serelia</span>
</span>
</a>
<nav class="nav no-veil" aria-label="主导航">
<a href="#">海上月</a><a href="#">林間音</a><a href="#">星间环</a><a href="#">雲邊信</a>
</nav>
<button class="theme-toggle" type="button" aria-label="切换明暗模式" title="切换明暗模式">
<svg class="ic ic-moon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 3a9 9 0 1 0 9 9c0-.46-.04-.92-.1-1.36a5.39 5.39 0 0 1-7.54-7.54c-.44-.06-.9-.1-1.36-.1Z"/></svg>
<svg class="ic ic-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="4.2" fill="currentColor" stroke="none"/><line x1="12" y1="2.5" x2="12" y2="5"/><line x1="12" y1="19" x2="12" y2="21.5"/><line x1="2.5" y1="12" x2="5" y2="12"/><line x1="19" y1="12" x2="21.5" y2="12"/><line x1="4.8" y1="4.8" x2="6.6" y2="6.6"/><line x1="17.4" y1="17.4" x2="19.2" y2="19.2"/><line x1="4.8" y1="19.2" x2="6.6" y2="17.4"/><line x1="17.4" y1="6.6" x2="19.2" y2="4.8"/></svg>
</button>
<button class="scheme-toggle" type="button" aria-label="切换配色主题" title="切换配色主题">
<svg viewBox="0 0 24 24" aria-hidden="true"><circle class="sc-c" cx="15.6" cy="12" r="5.4"/><circle class="sc-q" cx="8.4" cy="12" r="5.4"/></svg>
</button>
</header>
</body>
</html>可以看到顶栏菜单的原始html被搬过来了,里面是实现的html。
这里面引入了单个字的字体库,所以代码会很长。
好啦,这期没有什么其他可说的了
下期再会?