<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hugo on 吾思 梦阁</title><link>https://wstek.win/tags/hugo/</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/tags/hugo/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></channel></rss>