1533 字
4 分钟
New Me Web
2026/05/17 11:39:00

我的个人主页:从想法到实现#

一个简洁、优雅且充满互动感的个人主页设计与实现记录。

前言#

一直以来,我都想要一个能够真正代表自己的个人主页——不仅仅是信息的堆砌,而是一个有温度、有互动、有设计感的数字空间。在经历过几次迭代后,现在的这个版本终于让我满意了。这篇文章将记录它的设计理念、技术实现以及一些有趣的细节。 现在的个人主页有两个版本,一个是HomePage版本,一个是Me版本。 HomePage版本的个人主页在 https://sylv.top 上,Me版本在 https://www.sylv.top 上。 HomePage版本更侧重于一个导航页,而Me版本更侧重于一个详细的个人信息展示页。

设计思路#

整体风格#

我追求的是简洁而不简单的风格。整体采用深色主题为主,搭配明亮的蓝色作为点缀,营造出一种科技感与人文气息并存的氛围。同时支持浅色主题切换,满足不同场景下的阅读需求。

页面结构#

整个页面分为四个主要部分:

  1. Hero 区域 — 第一印象,包含头像、自我介绍和动态一言
  2. About 区域 — Bento 风格的信息卡片展示
  3. Timeline 区域 — 个人成长时间线
  4. 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

一些感悟#

做个人主页的过程,其实也是重新认识自己的过程。整理时间线时,那些看似零散的经历串联成了一条清晰的成长轨迹;选择展示的项目时,也在思考自己真正热爱的是什么。

技术层面,这个项目让我深刻体会到:好的用户体验往往来自于细节的积累。一个流畅的动画、一个有趣的交互、一句恰到好处的文案,这些看似微小的点汇聚在一起,才能构建出一个让人印象深刻的作品。

结语#

这个主页还会继续迭代。未来可能会加入更多互动元素,比如访客留言、实时数据展示等。但无论如何变化,它的核心始终不变——这是一个属于我自己的数字空间,记录着过去,也展望着未来。

如果你也想搭建一个属于自己的个人主页,希望这篇文章能给你一些灵感。记住,最重要的不是技术有多复杂,而是它能否真实地表达你自己。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

New Me Web
https://blog.sylv.top/posts/20260517-new-me-web/
作者
Sylvy
创建于
2026/05/17 11:39:00
许可协议
CC BY-NC-SA 4.0
修改历史

最后一次修改于 2026/05/17 11:39:00

1 次修改