<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>网站 on 吾思 梦阁</title><link>https://wstek.win/categories/%E7%BD%91%E7%AB%99/</link><description>Recent content from 吾思 梦阁</description><generator>Hugo</generator><language>zh-cn</language><managingEditor>wusitech@qq.com (WuSi)</managingEditor><webMaster>wusitech@qq.com (WuSi)</webMaster><copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright><lastBuildDate>Thu, 15 Oct 2026 21:30:00 +0800</lastBuildDate><atom:link href="https://wstek.win/categories/%E7%BD%91%E7%AB%99/index.xml" rel="self" type="application/rss+xml"/><item><title>如何实现随机固定背景与站点视觉效果通过 img 层 + CSS 变量</title><link>https://wstek.win/posts/mysite-visual/</link><pubDate>Thu, 15 Oct 2026 21:30:00 +0800</pubDate><author>wusitech@qq.com (WuSi)</author><guid>https://wstek.win/posts/mysite-visual/</guid><description>
<![CDATA[<h1>如何实现随机固定背景与站点视觉效果通过 img 层 + CSS 变量</h1><p>作者：WuSi（wusitech@qq.com）</p>
        
          <p>（本文整理自本站背景与视觉效果的实现过程，留作备查）</p>
<h2 id="0xff-感谢大佬">
<a class="header-anchor" href="#0xff-%e6%84%9f%e8%b0%a2%e5%a4%a7%e4%bd%ac"></a>
0xFF 感谢大佬
</h2><p>开工之前，先感谢大佬：</p>
<ul>
<li><a href="https://d-sketon.github.io">D-SKETON</a>：主题 <a href="https://github.com/D-SKETON/hugo-theme-reimu">reimu</a> 的作者。本站的整体框架和大量视觉效果原型都来自这个主题，本文提到的许多改造，也是在他的主题基础上完成的。</li>
<li><a href="https://cialloking.github.io">CialloKing</a>：背景图池取自他的站点，页脚那些随机背景图就来自这里，图池引用链的思路也参考了他的做法。</li>
</ul>
<h2 id="0x00-想要什么效果">
<a class="header-anchor" href="#0x00-%e6%83%b3%e8%a6%81%e4%bb%80%e4%b9%88%e6%95%88%e6%9e%9c"></a>
0x00 想要什么效果
</h2><p>想法很简单：页面背景是一张随机番剧图，固定不动，内容像一张半透明的卡片浮在上面。暗色模式下文字和卡片也要能看清。</p>
<p>听起来不难，但主题自带的背景是纯色，直接加背景图会被盖住。中间改了好几轮才对。</p>
<h2 id="0x10-第一个坑主题的底色">
<a class="header-anchor" href="#0x10-%e7%ac%ac%e4%b8%80%e4%b8%aa%e5%9d%91%e4%b8%bb%e9%a2%98%e7%9a%84%e5%ba%95%e8%89%b2"></a>
0x10 第一个坑：主题的底色
</h2><p>改之前先看了下主题的 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="k">background</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="n">background</span><span class="p">);</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">#</span><span class="nn">wrap</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">absolute</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">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">background</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="n">background</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p><code>#wrap</code> 这层是<strong>绝对定位 + z-index:1</strong>，也就是内容容器本身不透明。不管把背景垫在它下面多少层，都会被挡住。</p>
<p>一开始只改了 <code>body</code> 的背景，页面上什么都看不见——因为真正挡住的不是 body，是 <code>#wrap</code>。</p>
<p>解决办法是把这两层的底色都放开：</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="o">,</span> <span class="p">#</span><span class="nn">container</span><span class="o">,</span> <span class="p">#</span><span class="nn">wrap</span> <span class="p">{</span> <span class="k">background</span><span class="p">:</span> <span class="kc">transparent</span> <span class="cp">!important</span><span class="p">;</span> <span class="p">}</span>
</span></span></code></pre></div><p>然后单独建一个固定层放背景图。</p>
<h2 id="0x20-背景层怎么搭">
<a class="header-anchor" href="#0x20-%e8%83%8c%e6%99%af%e5%b1%82%e6%80%8e%e4%b9%88%e6%90%ad"></a>
0x20 背景层怎么搭
</h2><p>结构是这样的：</p>
<pre class="mermaid">
  flowchart TB
    L1["#wusi-bg（固定背景层 z-index:-1）"]
    L2["占位图 img（33KB，先到）"]
    L3["大图 img（257KB，后到，淡入覆盖）"]
    L4["#wrap（内容，z-index:1）"]
    L1 --> L2 --> L3 --> L4
</pre><p>两层图叠在一起：占位图先出来，大图加载完再淡入盖住。这样不管大图多慢，首屏都不会空着。</p>
<p>代码里用 JS 动态建层，不写死在 HTML 里：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">layer</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">&#39;div&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">layer</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">cssText</span> <span class="o">=</span> <span class="s1">&#39;position:fixed;inset:0;z-index:-1;background-size:cover;&#39;</span><span class="p">;</span>
</span></span></code></pre></div><h2 id="0x30-固定不滚动">
<a class="header-anchor" href="#0x30-%e5%9b%ba%e5%ae%9a%e4%b8%8d%e6%bb%9a%e5%8a%a8"></a>
0x30 固定不滚动
</h2><p>固定这一点靠 <code>position: fixed</code>，不是 <code>background-attachment: fixed</code>。</p>
        
        <hr><p>本文2026-10-15首发于<a href='https://wstek.win/'>吾思 梦阁</a>，最后修改于2026-10-15</p>]]></description><category>网站</category></item><item><title>如何实现评论区构建通过 CF Pages Function + GitHub 仓库</title><link>https://wstek.win/posts/mysite-comment/</link><pubDate>Thu, 15 Oct 2026 18:00:00 +0800</pubDate><author>wusitech@qq.com (WuSi)</author><guid>https://wstek.win/posts/mysite-comment/</guid><description>
<![CDATA[<h1>如何实现评论区构建通过 CF Pages Function + GitHub 仓库</h1><p>作者：WuSi（wusitech@qq.com）</p>
        
          <h2 id="0x00-背景">
<a class="header-anchor" href="#0x00-%e8%83%8c%e6%99%af"></a>
0x00 背景
</h2><p>静态博客没有后端，评论基本只有两条路：挂第三方，或者自己想办法。</p>
<p>第三方用着省事，但问题也不少：有的开始收费，有的停止维护，有的国内访问时快时慢。最主要的是数据不在自己手里，服务一关评论就没了。</p>
<p>所以这次换了个做法：<strong>评论文件放自己的仓库，写评论交给一个 Serverless 函数去提交。</strong></p>
<h2 id="0x10-整体结构">
<a class="header-anchor" href="#0x10-%e6%95%b4%e4%bd%93%e7%bb%93%e6%9e%84"></a>
0x10 整体结构
</h2><pre class="mermaid">
  flowchart LR
    A[浏览器] -->|读评论| B[静态 JSON 文件]
    A -->|写评论| C[Cloudflare Pages Function]
    C -->|服务端提交| D[GitHub 仓库]
    D -->|触发构建| E[静态站点更新]
</pre><h3 id="四个环节">
<a class="header-anchor" href="#%e5%9b%9b%e4%b8%aa%e7%8e%af%e8%8a%82"></a>
四个环节
</h3><ol>
<li>读：评论就是一个 JSON 文件，浏览器当静态资源取</li>
<li>写：表单提交到 <code>/api/comment</code>，这是 Cloudflare Pages 的 Function</li>
<li>存：函数拿 GitHub 令牌调用 Contents API，改文件并提交</li>
<li>生效：仓库变更触发站点重新构建</li>
</ol>
<p>没有数据库，没有常驻服务器。</p>
<h2 id="0x20-评论存在哪">
<a class="header-anchor" href="#0x20-%e8%af%84%e8%ae%ba%e5%ad%98%e5%9c%a8%e5%93%aa"></a>
0x20 评论存在哪
</h2><p>按页面拆文件：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">static/comments/
</span></span><span class="line"><span class="cl">├── posts/
</span></span><span class="line"><span class="cl">│   ├── stm32f4-interrupt.json
</span></span><span class="line"><span class="cl">│   └── ubuntu_install.json
</span></span><span class="line"><span class="cl">├── about.json
</span></span><span class="line"><span class="cl">└── friend.json
</span></span></code></pre></div><p>文件里是个数组，一条评论长这样：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;c_xxxxx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;test&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;body&#34;</span><span class="p">:</span> <span class="s2">&#34;test123456&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;ts&#34;</span><span class="p">:</span> <span class="mi">1792304863141</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hidden&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;author&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;replyTo&#34;</span><span class="p">:</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="两个设计">
<a class="header-anchor" href="#%e4%b8%a4%e4%b8%aa%e8%ae%be%e8%ae%a1"></a>
两个设计
</h3><p><strong>扁平存储。</strong> 不管回复多深，全部平铺在一个数组里，靠 <code>replyTo</code> 记父评论的 id。加评论就是往数组末尾追加，不用改结构。</p>
        
        <hr><p>本文2026-10-15首发于<a href='https://wstek.win/'>吾思 梦阁</a>，最后修改于2026-10-15</p>]]></description><category>网站</category></item></channel></rss>