<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>前端 on 我的博客</title><link>https://aswzblog.me/tags/%E5%89%8D%E7%AB%AF/</link><description>Recent content in 前端 on 我的博客</description><image><title>我的博客</title><url>https://aswzblog.me/images/og-default.svg</url><link>https://aswzblog.me/images/og-default.svg</link></image><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 02 Jun 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://aswzblog.me/tags/%E5%89%8D%E7%AB%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>我的博客是怎么变成太空舱的</title><link>https://aswzblog.me/posts/2026-06-02-space-cabin-theme/</link><pubDate>Tue, 02 Jun 2026 10:00:00 +0800</pubDate><guid>https://aswzblog.me/posts/2026-06-02-space-cabin-theme/</guid><description>从 PaperMod 默认主题到 Space Cabin HUD，聊聊我博客的视觉设计思路和实现方式。</description><content:encoded><![CDATA[<p>你可能注意到了，这个博客不太像传统的技术博客。没有白色背景，没有清新配色，取而代之的是纯黑底、金色边框、青色文字，还有一堆看起来像科幻电影里飞船仪表盘的元素。</p>
<p>这叫 <strong>Space Cabin HUD</strong> 风格，灵感来自太空舱的抬头显示器（Head-Up Display）。这篇博客聊聊它是怎么来的。</p>
<h2 id="为什么选这个风格">为什么选这个风格</h2>
<p>最初用 PaperMod 默认主题的时候，博客长这样：白底、蓝色链接、标准卡片布局。干净，但无聊。</p>
<p>我想要一个能让人一眼记住的博客。不是靠花哨的动画或复杂的布局，而是靠<strong>统一的视觉语言</strong>。太空舱 HUD 这个概念刚好满足几个条件：</p>
<ol>
<li><strong>暗色主题</strong> — 技术博客标配，护眼，省电（OLED 屏）</li>
<li><strong>信息密度高</strong> — HUD 本身就是高密度信息展示，和博客的阅读场景契合</li>
<li><strong>可扩展</strong> — 状态栏、指示灯、日志编号这些元素可以不断加新功能</li>
<li><strong>独特</strong> — 没见过第二个中文博客用这个风格</li>
</ol>
<h2 id="核心设计元素">核心设计元素</h2>
<h3 id="配色">配色</h3>
<p>只有三种颜色：</p>
<table>
	<thead>
			<tr>
					<th>颜色</th>
					<th>用途</th>
					<th>色值</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>纯黑</td>
					<td>背景</td>
					<td><code>#0a0a0a</code></td>
			</tr>
			<tr>
					<td>金色</td>
					<td>主色调、标题、边框</td>
					<td><code>#c9a84c</code></td>
			</tr>
			<tr>
					<td>青色</td>
					<td>次要色、状态指示、日期</td>
					<td><code>#38bdf8</code></td>
			</tr>
	</tbody>
</table>
<p>为什么是这三个？因为它们在纯黑背景上的对比度足够高，而且金色+青色的组合在科幻电影里很常见（想想《异形》的终端界面）。</p>
<h3 id="状态栏">状态栏</h3>
<p>页面顶部的状态栏是整个 HUD 的灵魂：</p>
<pre tabindex="0"><code>SYS NOMINAL | COMM LINK ACTIVE | PROPULSION OK
</code></pre><p>它不只是装饰——每 6 秒轮播一条真实的系统状态消息，像飞船在汇报自己的健康状况。这个功能纯 CSS 动画实现，不依赖 JavaScript。</p>
<h3 id="日志编号">日志编号</h3>
<p>每篇文章都有一个自动编号：<code>LOG-01</code>、<code>LOG-02</code>……这是用 CSS Counter 实现的，不需要在文章里手动写：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">post-entry</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">counter-increment</span><span class="p">:</span> <span class="n">post-counter</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">post-entry</span><span class="p">::</span><span class="nd">before</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">content</span><span class="p">:</span> <span class="s2">&#34;LOG-&#34;</span> <span class="nb">counter</span><span class="p">(</span><span class="n">post</span><span class="o">-</span><span class="n">counter</span><span class="p">,</span> <span class="kc">decimal-leading-zero</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="日期格式">日期格式</h3>
<p>文章日期从 <code>2026-05-26</code> 变成了 <code>T+001</code> 这种格式，模拟任务时间轴。这个用 CSS 的 <code>attr()</code> 和自定义属性实现，原始日期保留在 <code>title</code> 属性里，鼠标悬停可以看到完整日期。</p>
<h3 id="扫描线效果">扫描线效果</h3>
<p>页面上有一层淡淡的扫描线叠加，模拟 CRT 显示器的效果。纯 CSS 实现：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="nt">body</span><span class="p">::</span><span class="nd">after</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">content</span><span class="p">:</span> <span class="s2">&#34;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">position</span><span class="p">:</span> <span class="kc">fixed</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">top</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">left</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">width</span><span class="p">:</span> <span class="mi">100</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">height</span><span class="p">:</span> <span class="mi">100</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">background</span><span class="p">:</span> <span class="nb">repeating-linear-gradient</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="kc">transparent</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="kc">transparent</span> <span class="mi">2</span><span class="kt">px</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nb">rgba</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mf">0.03</span><span class="p">)</span> <span class="mi">2</span><span class="kt">px</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nb">rgba</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mf">0.03</span><span class="p">)</span> <span class="mi">4</span><span class="kt">px</span>
</span></span><span class="line"><span class="cl">  <span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">pointer-events</span><span class="p">:</span> <span class="kc">none</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">z-index</span><span class="p">:</span> <span class="mi">9999</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>加了 <code>prefers-reduced-motion</code> 媒体查询，如果用户系统开了减少动画，扫描线会自动关闭。</p>
<h2 id="技术实现">技术实现</h2>
<h3 id="布局覆盖">布局覆盖</h3>
<p>PaperMod 的模板系统允许你覆盖任意 partial。我覆盖了这些：</p>
<ul>
<li><code>header.html</code> — 完全重写，加入状态栏和自定义导航</li>
<li><code>extend_footer.html</code> — 加入 HUD 时钟的 JavaScript</li>
<li><code>extend_head.html</code> — DNS 预取、百度统计占位、自动 meta description</li>
<li><code>extend_post_content.html</code> — 相关文章卡片网格</li>
<li><code>render-image.html</code> — 自动 WebP 转换</li>
</ul>
<p>所有覆盖文件都在 <code>layouts/</code> 目录下，Hugo 构建时会优先使用它们而不是主题的默认文件。</p>
<h3 id="css-架构">CSS 架构</h3>
<p>整个自定义 CSS 有 1200+ 行，但结构很清晰：</p>
<pre tabindex="0"><code>assets/css/extended/custom.css
├── 基础变量和重置
├── HUD 状态栏
├── 文章卡片样式
├── 代码块样式（SYSLOG://DATA-STREAM）
├── 面包屑导航（终端风格）
├── 滚动条和选中高亮
├── 响应式断点
└── 无障碍支持
</code></pre><p>PaperMod 会自动加载 <code>assets/css/extended/</code> 下的所有 CSS 文件，不需要额外配置。</p>
<h3 id="图片处理">图片处理</h3>
<p>博客有一条自动化的图片流水线：写 Markdown 时直接用 PNG/JPG，Hugo 构建时自动转 WebP（质量 82%），生成 <code>&lt;picture&gt;</code> 标签做渐进式加载。这个是通过自定义 <code>render-image.html</code> 模板实现的。</p>
<h2 id="遇到的坑">遇到的坑</h2>
<ol>
<li><strong>CSS Counter 在移动端不工作</strong> — 某些安卓浏览器对 <code>counter-increment</code> 支持有问题，加了 fallback</li>
<li><strong>扫描线影响性能</strong> — 在低端手机上，<code>position: fixed</code> 的伪元素会导致重绘，加了 <code>will-change: transform</code> 优化</li>
<li><strong>金色在浅色模式下不可见</strong> — 所以直接禁用了主题切换，锁死暗色模式</li>
</ol>
<h2 id="总结">总结</h2>
<p>Space Cabin HUD 不是一个主题，是一种设计哲学：<strong>用最少的颜色和最统一的视觉语言，让整个网站看起来像一个整体</strong>。</p>
<p>如果你也想做类似的自定义，建议从 PaperMod 的 partial 覆盖开始。不用改主题源码，Hugo 的模板继承机制会帮你搞定一切。</p>
<p>唯一的风险是：你可能会花更多时间调 CSS 而不是写博客内容。</p>
]]></content:encoded></item><item><title>全新重大升级！！</title><link>https://aswzblog.me/posts/2026-05-25-ui-upgrade/</link><pubDate>Mon, 25 May 2026 21:38:00 +0800</pubDate><guid>https://aswzblog.me/posts/2026-05-25-ui-upgrade/</guid><description>前端和UI绘制，让人成就感最满的地方</description><content:encoded><![CDATA[<p>先来看看老样子</p>
<p><picture>
  <source srcset="/posts/2026-05-25-ui-upgrade/20260525-213847_hu_de07ec87ebc5bf89.webp" type="image/webp">
  <img alt="以前的界面" decoding="async" loading="lazy">
</picture></p>
<p>不得不说，面子在很多时候比里子更重要，原本的博客网站显得很廉价，现在确实是看起来高档了不少</p>
<p>在没有加入项目skill之前，它还创建了一版丑陋的UI，可惜我没有截图下来或者git push一版。大概描述一下吧，就是老样子的UI把色系改成了蓝粉色系，加上玻璃感，我说让他模仿科技大厂的UI，做的也是差强人意。最让我绷不住的是它做的一版极客UI，特别搞整个都变成屎绿色。</p>
<p>但是突然之间我醒悟了，skill的意义不就是这个吗？“AI不蠢只是你不会用”的含金量还在提高。这版UI我还是比较满意的，后续风格应该也不会大改</p>
<p><picture>
  <source srcset="/posts/2026-05-25-ui-upgrade/20260525-214525_hu_ed030d5171d8e53b.webp" type="image/webp">
  <img alt="留存一下" decoding="async" loading="lazy">
</picture></p>
<p>看看我还有哪些能增加的地方，静态部署web的终点又在哪里？</p>
<p><picture>
  <source srcset="/posts/2026-05-25-ui-upgrade/20260525-214631_hu_f22e0af3e07afaad.webp" type="image/webp">
  <img decoding="async" loading="lazy">
</picture></p>
<p>再次看看token用量，skill确实是花小钱办大事，这个token的消耗算正常吗？</p>
]]></content:encoded></item><item><title>20260525_新的改动</title><link>https://aswzblog.me/posts/2026-05-25-search-update/</link><pubDate>Mon, 25 May 2026 18:25:00 +0800</pubDate><guid>https://aswzblog.me/posts/2026-05-25-search-update/</guid><description>给博客加上搜索功能的记录</description><content:encoded><![CDATA[<p>把搜索功能加上了</p>
<p><picture>
  <source srcset="/posts/2026-05-25-search-update/pasted-image-1779704808194_hu_868a610db1792730.webp" type="image/webp">
  <img alt="能搜，但是具体的逻辑还得完善" decoding="async" loading="lazy">
</picture></p>
<p>搜索的逻辑肯定还得改，是搜索正文？还是搜索标题？还是按照时间搜索？</p>
<p>但是后台的Sveltia又出现的问题是之前的hello_world.md和my_real_first_blog显示不出来了，这点非常可恶</p>
<p>about me这个感觉做的也比较垃圾，静态博客在这点上可能也算得上的问题是不适合放很多数据，以后数据量上来了，很多内容应该是储存在服务器上会比较好</p>
]]></content:encoded></item></channel></rss>