我的个人主页:从想法到实现
一个简洁、优雅且充满互动感的个人主页设计与实现记录。
前言
一直以来,我都想要一个能够真正代表自己的个人主页——不仅仅是信息的堆砌,而是一个有温度、有互动、有设计感的数字空间。在经历过几次迭代后,现在的这个版本终于让我满意了。这篇文章将记录它的设计理念、技术实现以及一些有趣的细节。 现在的个人主页有两个版本,一个是HomePage版本,一个是Me版本。 HomePage版本的个人主页在 https://sylv.top 上,Me版本在 https://www.sylv.top 上。 HomePage版本更侧重于一个导航页,而Me版本更侧重于一个详细的个人信息展示页。
设计思路
整体风格
我追求的是简洁而不简单的风格。整体采用深色主题为主,搭配明亮的蓝色作为点缀,营造出一种科技感与人文气息并存的氛围。同时支持浅色主题切换,满足不同场景下的阅读需求。
页面结构
整个页面分为四个主要部分:
- Hero 区域 — 第一印象,包含头像、自我介绍和动态一言
- About 区域 — Bento 风格的信息卡片展示
- Timeline 区域 — 个人成长时间线
- Projects 区域 — 项目作品列表
核心功能实现
1. 鼠标跟随揭示效果
Hero 区域最引人注目的效果就是鼠标跟随的”聚光灯”揭示效果。当鼠标在页面上移动时,会揭示出一个英文版本的自我介绍层。
实现原理是使用 CSS 的 clip-path 属性:
heroSection.addEventListener('mousemove', (e) => { const rect = heroSection.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; revealLayer.style.transition = 'none'; revealLayer.style.clipPath = `circle(150px at ${x}px ${y}px)`;});这个效果给页面增添了一份探索的乐趣,仿佛在黑暗中用手电筒照亮隐藏的惊喜。
2. Bento 网格布局
About 区域采用了当下流行的 Bento 风格布局——将信息组织在大小不一的卡片中,既有秩序感又不失灵动。
布局结构分为上下两行:
- 上行:左侧是个人信息卡(头像、社交链接、标签),右侧是数据统计和互动卡片
- 下行:三个特色卡片并排展示——Bug Collector、技术栈、Code Poet
每张卡片都有微妙的悬停效果:
- 3D 倾斜跟随鼠标移动
- 边框高亮发光
- 阴影加深
.bento-card:hover { box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15), 0 0 60px rgba(88, 166, 255, 0.06); border-color: var(--accent-color);}3. 滚动动画系统
页面中的几乎所有元素都配备了精心设计的滚动显现动画:
- 淡入上浮:卡片和文字从下方浮现
- 左右滑入:项目列表交替从左右两侧进入
- 模糊清晰:元素从模糊状态逐渐变得清晰
- 视差滚动:Hero 区域内容随滚动产生视差效果
这些动画通过 IntersectionObserver 实现,只在元素进入视口时触发,既保证了性能,又增添了浏览时的仪式感。
const revealObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); } });}, { threshold: 0.12 });4. 时间线设计
Timeline 区域记录了我从早期接触技术到现在的成长历程。设计要点包括:
- 左侧竖线:贯穿整个时间线的渐变线条
- 节点标记:每个年份对应一个圆点,当前年份高亮显示
- 月份标签:使用蓝色标签区分不同时间段
- 内容层级:清晰的标题-内容结构
时间线的底部还有一句格言:“一条时间线,装不下那些深夜的崩溃和天亮后的不甘”——这是对成长过程最真实的注解。
5. 趣味交互细节
点击头像放彩带
点击页面中的头像或”Click Me”卡片,会触发彩带爆炸效果,并弹出随机弹幕消息:
confetti({ particleCount: 150, spread: 360, startVelocity: 30, origin: { x, y }});程序员语录轮播
Bug Collector 卡片中的终端窗口会循环展示经典的程序员语录:
“It works on my machine” “It was working yesterday” “Must be a compiler bug” …
打字机效果的一言
Hero 区域的一言(Hitokoto)采用打字机效果逐字显示,配合光标闪烁,有一种正在书写的感觉。
6. 主题切换
支持深色/浅色主题切换,切换按钮位于导航栏右侧。主题偏好会保存到 localStorage,下次访问时自动应用。
const savedTheme = localStorage.getItem('theme');if (savedTheme === 'light') { html.setAttribute('data-theme', 'light');}技术栈
| 技术 | 用途 |
|---|---|
| HTML5 | 页面结构 |
| CSS3 | 样式与动画 |
| Vanilla JavaScript | 交互逻辑 |
| Remix Icon | 图标库 |
| Devicon | 技术栈图标 |
| Canvas Confetti | 彩带效果 |
| SakuraPlus | 樱花飘落效果 |
项目结构
.├── index.html # 主页面├── css/│ └── style.css # 样式文件├── js/│ ├── main.js # 主逻辑│ ├── confetti.browser.min.js # 彩带库│ └── sakuraPlus.js # 樱花效果├── profile.webp # 头像├── favicon.ico # 网站图标└── sw.js # Service Worker一些感悟
做个人主页的过程,其实也是重新认识自己的过程。整理时间线时,那些看似零散的经历串联成了一条清晰的成长轨迹;选择展示的项目时,也在思考自己真正热爱的是什么。
技术层面,这个项目让我深刻体会到:好的用户体验往往来自于细节的积累。一个流畅的动画、一个有趣的交互、一句恰到好处的文案,这些看似微小的点汇聚在一起,才能构建出一个让人印象深刻的作品。
结语
这个主页还会继续迭代。未来可能会加入更多互动元素,比如访客留言、实时数据展示等。但无论如何变化,它的核心始终不变——这是一个属于我自己的数字空间,记录着过去,也展望着未来。
如果你也想搭建一个属于自己的个人主页,希望这篇文章能给你一些灵感。记住,最重要的不是技术有多复杂,而是它能否真实地表达你自己。
最后一次修改于 2026/05/17 11:39:00