很多模板一打开就是几百 KB 的框架包袱,改个配色要和 webpack 搏斗。今天拆解我们上架的这套单页模板,讲清楚三件事:它的布局怎么组织的、动画是怎么写出来的、为什么改起来这么快。

一、技术选型:原生三件套,零依赖
先看硬指标:
| 项目 | 数据 |
| 技术栈 | 纯 HTML + CSS + 原生 JS,无框架、无构建工具、无 CDN 依赖 |
| 文件结构 | 6 个文件:index.html / style.css / main.js / i18n.js / anti-debug.js / logo.png |
| 代码体量 | HTML 26KB + CSS 27KB + JS 37KB,整站不到 100KB |
| 外部请求 | 0 个(字体、图标、脚本全部本地/内联) |
这意味着:
- 解压即用:丢进任意静态空间、宝塔、GitHub Pages、Nginx 都能直接跑,不需要
npm install。
- 无泄露风险:没有 source map,核心逻辑经过混淆压缩,配合
anti-debug.js的反调试(屏蔽 F12 / Ctrl+Shift+I/J/C、窗口尺寸探测、debugger 侦测循环),有效提高被白嫖源码的门槛。
- 主题化靠 CSS 变量:全站颜色、圆角、动效参数收敛在
--bg--text--card-bg--radius--beam-size--beam-duration等变量上,改整套视觉只动一处。
二、布局结构:四段式单页,语义清晰
页面由 4 个 <section> 纵向堆叠,锚点导航直达:
几个布局细节:
- 两套背景系统:
.dot-bg(点阵渐晕,用于首屏和产品区)与.line-bg(细线网格,用于案例区),纯 CSS 实现,用背景类切换区块气质,不动结构。
- 响应式三档断点:
1024px / 768px两组媒体查询,桌面三栏 → 平板两栏 → 手机单栏;首屏在768px以下切换移动端专属布局(matchMedia('(pointer: fine)')同时判断是否精细指针,触屏设备直接走简化交互)。
- 玻璃态与渐变:5 处
backdrop-filter: blur()卡片、14 处渐变,配合暗色底(#111)做出层次,没有一张位图背景。
三、动效实现:这套路子最值得讲
模板的动效分五层,全部可溯源到具体 API:
1. 首屏:弹簧物理 + 遮罩显影(核心亮点)
首屏不是简单的 CSS hover,而是一套 Spring1D 物理模拟(自定义 Spring1D 类,可配 stiffness / damping / mass):
- 鼠标位置作为目标值,弹簧每帧积分推进,驱动大标题的
rotateX / rotateY3D 倾斜——所以标题的跟随有惯性、有回弹,不是生硬地粘着鼠标。
- 标题采用双层文字 + 圆形遮罩显影:底层是普通标题,上层同位置叠一份高亮标题,用
-webkit-mask-image: radial-gradient(circle ...)开一个跟随光标的圆形「探照灯」,移过去的地方显出高亮字。
- 8 秒无操作自动休眠(
HERO_IDLE_MS = 8000):徽章切换到 sleeping 态,点阵呼吸动画(@keyframes hero-dot-pulse)接管;一动鼠标就 springAwake 唤醒。首屏是「活的」。
- 布局变化用
ResizeObserver监听,字体加载完(document.fonts.ready)重新测量,遮罩坐标永远对得准。
2. 边框流光(Border Beam)
卡片边缘一圈沿边框跑的光线,实现相当讲究:
配合 :nth-child 把每张卡的 --beam-delay 错开(0s / 1.2s / 2.4s),一排卡片的流光依次轮转,不会整齐划一地闪。
3. 卡片 3D 悬停
案例卡监听 mousemove,按指针在卡内的相对坐标算出 ±8° 的 rotateX/rotateY,同时按角度偏移动态写 box-shadow——倾斜越狠影子越「离地」,立体感是投影给的,不是渐变给的。mouseleave 归零复位。
4. 滚动叙事
- 入场动画:
IntersectionObserver(threshold 0.1)统一给元素加 reveal 类,触发一次即unobserve,不来回闪。
- 导航胶囊:滚动监听当前 section,底部小胶囊(nav indicator)用
translateX + width过渡滑到激活项;scrollY > 24时导航栏加scrolled态上底色。桌面/移动两套导航链接共用同一套指示器逻辑。
5. 细节动效
- 边框流光卡片参数化:
--beam-size / --beam-duration / --beam-delay三个变量,想提速、变大、错峰,改变量即可。
- 复制 + Toast:联系卡一键复制,
navigator.clipboard.writeText+ 2.2 秒自动消失的 Toast,文案走 i18n。
- 全站 19 处
transition、2 组@keyframes,没有一处setTimeout链式动画——能用 CSS 的绝不用 JS,主线程很闲。
四、内置四国语言,卖全球
i18n.js 内置 中 / 英 / 日 / 韩 四语字典,95 个 data-i18n 键位覆盖全站文案。切换语言时同步更新 <html lang>,SEO 友好。对接只需两步:HTML 标 data-i18n="key",字典里加一行。
五、二次开发友好,换品牌半小时搞定
我们上架前做过一次完整换品牌实测:品牌名、域名、联系方式、结构化数据(JSON-LD)、meta/OG 全量替换,5 个文本文件零残留,3 个 JS 语法校验全过——全程不到半小时。 没有散落在几十个组件里的硬编码,没有需要重编译的样式变量,这就是原生模板的可维护性。
适合场景:产品官网、工具站落地页、开发者作品集、SaaS 介绍页。买去改改字、换张 logo 就能上线。
模板获取:最骚源码 zuisao.com,Telegram:t.me/zuisao,QQ:11887338。

评论(0)