个人网站
用 Astro 搭的纯静态个人站:柔雾粉蓝双主题、粒子星野、背景音乐播放器、贴纸系统,外加一个零依赖的本地后台。
想有个地方放自己写的东西和做的东西,顺便把「我想要一个什么样的互联网角落」这个问题认真回答一遍。于是有了这个站。
它长什么样
- 柔雾粉蓝的双主题,亮色像清晨,暗色是深夜蓝雾,首次访问默认暗色
- 全站一层粒子星野,光标经过会带一团柔光,星点还会朝光标聚过来
- 背景音乐播放器,换页音乐不断,歌单是抽屉式拉出推回的
- 首页背景可以自己在视频和图片之间换,素材从后台上传
- 页面角落的贴纸是后台摆放的,访客也可以随手拖动、存在自己浏览器里
一点「零 JS 执念」
这个站大部分交互其实没有 JavaScript:分页轮播、外观面板、返回顶部按钮、贴纸开关,全是 CSS 自己完成的(隐形 checkbox + :has() + 滚动驱动动画那一套)。JS 在全站不到十次,每一次都是想清楚了才写下的——比如音乐跨页不断、背景换源。省下来的不只是体积,还有一种「能用声明式解决就不写命令式」的洁癖上的满足。
它是和 AI 一起写出来的
说实话,这个站大多数代码是我和 AI 助手一起写的。贴纸怎么锚定、视频换源时 autoplay 的三连坑、暗色主题在页面切换瞬间被抹掉又怎么钩回来,全都有案可查。AI 负责速度和记性,我负责审美和「这个感觉不对」。
踩过的坑(挑三个印象深的)
换源三连坑。 给首页背景换视频时,暂停态下 load() 会无视用户意图自行起播;把 autoplay 属性摘干净又会断掉回落原生视频的路;换源没完成时按「继续」,play() 会被打断且不自愈。最后收进一个函数里一次治完。
被清空的运行期状态。 Astro 的视图过渡会持久化元素,但切换时会先清空 <html> 上的属性——运行期设的暗色主题就这样掉了。补了个 swap 钩子重设,顺便立下规矩:以后 html 上的运行期状态都要这样补回。
测试环境的假象。 浏览器在页面不可见时会在几毫秒内硬暂停媒体播放,一度让我以为视频背景坏了。查清是环境行为之后,「真播放效果请用户前台看」成了我们协作的固定话术。
现状
目前它还在本地和预览里生活,备案、服务器、正式上线排在日程上。文章会慢慢写,作品会一个个补进来。先做到这里,欢迎以后回来看它的变化。