模板特点
- 响应式设计: 适配桌面、平板和手机等不同屏幕尺寸。
- 技术栈: HTML5, CSS3, jQuery (使用CDN引入,无需下载)。
- 模块化结构: 清晰的
header,section,footer结构,易于理解和修改。 - 丰富的交互效果:
- 平滑滚动: 点击导航栏链接平滑滚动到对应板块。
- 导航栏高亮: 滚动时自动高亮当前所在的页面板块。
- 返回顶部按钮: 滚动一定距离后显示,点击平滑返回顶部。
- 主题切换: 提供亮色/暗色两种主题模式。
- 动态加载: 模拟作品集的异步加载效果。
- 滚动动画: 当板块进入视口时,内容淡入显示。
- 注释清晰: 代码中包含了详细的注释,方便您学习和修改。
如何使用
- 创建文件: 创建三个文件:
index.html,style.css,script.js。 - 复制代码: 将下面提供的代码分别粘贴到对应的文件中。
- 预览: 用浏览器打开
index.html文件即可看到效果。 - 自定义: 修改
style.css中的颜色、字体等样式,修改index.html中的文本和图片链接,修改script.js中的交互逻辑。
HTML 代码 (index.html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">张三 - 个人主页</title>
<!-- 引入 jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- 引入 Font Awesome 图标库 (可选,用于显示图标) -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
<!-- 引入自定义样式 -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 导航栏 -->
<header class="navbar">
<div class="container">
<a href="#home" class="logo">ZS</a>
<ul class="nav-links">
<li><a href="#home" class="nav-link active">首页</a></li>
<li><a href="#about" class="nav-link">关于我</a></li>
<li><a href="#skills" class="nav-link">技能</a></li>
<li><a href="#portfolio" class="nav-link">作品集</a></li>
<li><a href="#contact" class="nav-link">联系我</a></li>
</ul>
<!-- 主题切换按钮 -->
<button id="theme-toggle" class="theme-toggle">
<i class="fas fa-moon"></i>
</button>
<!-- 移动端菜单按钮 -->
<div class="mobile-menu-btn">
<i class="fas fa-bars"></i>
</div>
</div>
</header>
<main>
<!-- 首页部分 -->
<section id="home" class="hero">
<div class="container">
<h1 class="hero-title">你好,我是 <span class="highlight">张三</span></h1>
<p class="hero-subtitle">一名热爱编程与设计的大学生</p>
<a href="#about" class="cta-button">了解更多</a>
</div>
</section>
<!-- 关于我部分 -->
<section id="about" class="about">
<div class="container">
<h2 class="section-title">关于我</h2>
<div class="about-content">
<div class="about-text">
<p>我是一名来自XX大学计算机科学与技术专业的本科生,对前端开发和用户体验设计抱有极大的热情。</p>
<p>我善于学习新技术,喜欢用代码创造美好的事物,在课余时间,我喜欢参与开源项目,并不断挑战自己,提升解决问题的能力。</p>
</div>
<div class="about-image">
<img src="https://via.placeholder.com/300x300" alt="张三的照片">
</div>
</div>
</div>
</section>
<!-- 技能部分 -->
<section id="skills" class="skills">
<div class="container">
<h2 class="section-title">我的技能</h2>
<div class="skills-grid">
<div class="skill-card">
<i class="fab fa-html5"></i>
<h3>HTML5</h3>
<p>语义化标签,可访问性</p>
</div>
<div class="skill-card">
<i class="fab fa-css3-alt"></i>
<h3>CSS3</h3>
<p>Flexbox, Grid, 动画效果</p>
</div>
<div class="skill-card">
<i class="fab fa-js-square"></i>
<h3>JavaScript</h3>
<p>ES6+, jQuery, 异步编程</p>
</div>
<div class="skill-card">
<i class="fab fa-react"></i>
<h3>React</h3>
<p>组件化开发, Hooks</p>
</div>
</div>
</div>
</section>
<!-- 作品集部分 -->
<section id="portfolio" class="portfolio">
<div class="container">
<h2 class="section-title">作品集</h2>
<div class="portfolio-grid" id="portfolio-grid">
<!-- 作品将通过 jQuery 动态加载 -->
<div class="portfolio-item loading">
<div class="skeleton"></div>
</div>
<div class="portfolio-item loading">
<div class="skeleton"></div>
</div>
<div class="portfolio-item loading">
<div class="skeleton"></div>
</div>
</div>
<button id="load-more-btn" class="load-more-btn">加载更多</button>
</div>
</section>
<!-- 联系我部分 -->
<section id="contact" class="contact">
<div class="container">
<h2 class="section-title">联系我</h2>
<p class="contact-intro">有项目想合作?或者只是想打个招呼?随时欢迎!</p>
<div class="contact-links">
<a href="mailto:your.email@example.com" class="contact-link">
<i class="fas fa-envelope"></i> your.email@example.com
</a>
<a href="https://github.com/yourusername" class="contact-link" target="_blank">
<i class="fab fa-github"></i> GitHub
</a>
<a href="https://linkedin.com/in/yourusername" class="contact-link" target="_blank">
<i class="fab fa-linkedin"></i> LinkedIn
</a>
</div>
</div>
</section>
</main>
<!-- 页脚 -->
<footer>
<div class="container">
<p>© 2025 张三. All rights reserved.</p>
</div>
</footer>
<!-- 返回顶部按钮 -->
<a href="#" id="back-to-top" class="back-to-top">
<i class="fas fa-arrow-up"></i>
</a>
<!-- 引入自定义脚本 -->
<script src="script.js"></script>
</body>
</html>
CSS 代码 (style.css)
/* --- 全局样式和变量 --- */
:root {
--primary-color: #007bff;
--secondary-color: #343a40;
--text-color: #333;
--bg-color: #ffffff;
--section-bg: #f8f9fa;
--card-bg: #ffffff;
--shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
/* 暗色主题 */
body.dark-theme {
--text-color: #f4f4f4;
--bg-color: #1a1a1a;
--section-bg: #2d2d2d;
--card-bg: #3a3a3a;
--shadow: 0 4px 15px rgba(0, 0, 0, 0.5);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth; /* 平滑滚动 */
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: var(--text-color);
background-color: var(--bg-color);
transition: background-color 0.3s, color 0.3s;
}
.container {
max-width: 1100px;
margin: 0 auto;
padding: 0 20px;
}
h1, h2, h3 {
margin-bottom: 1rem;
line-height: 1.2;
}
h2.section-title {
text-align: center;
font-size: 2.5rem;
margin-bottom: 3rem;
position: relative;
padding-bottom: 1rem;
}
h2.section-title::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 60px;
height: 4px;
background-color: var(--primary-color);
}
/* --- 导航栏 --- */
.navbar {
position: fixed;
top: 0;
width: 100%;
background-color: var(--card-bg);
box-shadow: var(--shadow);
z-index: 1000;
transition: background-color 0.3s;
}
.navbar .container {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 20px;
}
.logo {
font-size: 1.5rem;
font-weight: bold;
color: var(--primary-color);
text-decoration: none;
}
.nav-links {
display: flex;
list-style: none;
}
.nav-links li {
margin-left: 2rem;
}
.nav-link {
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: color 0.3s;
position: relative;
}
.nav-link:hover, .nav-link.active {
color: var(--primary-color);
}
.nav-link.active::after {
content: '';
position: absolute;
bottom: -5px;
left: 0;
width: 100%;
height: 2px;
background-color: var(--primary-color);
}
/* --- 主要内容区块 --- */
section {
padding: 80px 0;
opacity: 0; /* 用于滚动动画 */
transform: translateY(30px);
transition: opacity 0.6s ease-out, transform 0.6s ease-out;
}
section.visible {
opacity: 1;
transform: translateY(0);
}
#home {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
color: #fff;
background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://images.unsplash.com/photo-1557682257-2f9c37a3a5f5?ixlib=rb-4.0.3') no-repeat center center/cover;
}
.hero-title {
font-size: 3.5rem;
margin-bottom: 1rem;
}
.highlight {
color: var(--primary-color);
}
.hero-subtitle {
font-size: 1.2rem;
margin-bottom: 2rem;
}
.cta-button {
display: inline-block;
padding: 12px 30px;
background-color: var(--primary-color);
color: #fff;
border-radius: 50px;
text-decoration: none;
font-weight: bold;
transition: transform 0.3s, box-shadow 0.3s;
}
.cta-button:hover {
transform: translateY(-3px);
box-shadow: 0 5px 15px rgba(0, 123, 255, 0.4);
}
/* --- 关于我 --- */
.about {
background-color: var(--section-bg);
}
.about-content {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
}
.about-text {
flex: 1;
padding-right: 2rem;
}
.about-image img {
max-width: 300px;
border-radius: 10px;
box-shadow: var(--shadow);
}
/* --- 技能 --- */
.skills-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
}
.skill-card {
background-color: var(--card-bg);
padding: 2rem;
text-align: center;
border-radius: 10px;
box-shadow: var(--shadow);
transition: transform 0.3s;
}
.skill-card:hover {
transform: translateY(-10px);
}
.skill-card i {
font-size: 3rem;
color: var(--primary-color);
margin-bottom: 1rem;
}
/* --- 作品集 --- */
#portfolio-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.portfolio-item {
background-color: var(--card-bg);
border-radius: 10px;
overflow: hidden;
box-shadow: var(--shadow);
transition: transform 0.3s;
}
.portfolio-item:hover {
transform: scale(1.03);
}
.portfolio-item img {
width: 100%;
height: 200px;
object-fit: cover;
}
.portfolio-item-content {
padding: 1.5rem;
}
.load-more-btn {
display: block;
margin: 2rem auto 0;
padding: 10px 25px;
background-color: var(--primary-color);
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s;
}
.load-more-btn:hover {
background-color: #0056b3;
}
/* 加载骨架屏 */
.skeleton {
width: 100%;
height: 250px;
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
background-size: 200% 100%;
animation: loading 1.5s infinite;
}
@keyframes loading {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
/* --- 联系我 --- */
.contact {
background-color: var(--section-bg);
text-align: center;
}
.contact-intro {
max-width: 600px;
margin: 0 auto 2rem;
}
.contact-links {
display: flex;
justify-content: center;
gap: 2rem;
flex-wrap: wrap;
}
.contact-link {
display: flex;
align-items: center;
gap: 0.5rem;
color: var(--text-color);
text-decoration: none;
font-size: 1.1rem;
transition: color 0.3s;
}
.contact-link:hover {
color: var(--primary-color);
}
/* --- 页脚 --- */
footer {
background-color: var(--secondary-color);
color: #fff;
text-align: center;
padding: 1.5rem 0;
}
/* --- 返回顶部按钮 --- */
.back-to-top {
position: fixed;
bottom: 20px;
right: 20px;
background-color: var(--primary-color);
color: #fff;
width: 50px;
height: 50px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s, visibility 0.3s;
}
.back-to-top.visible {
opacity: 1;
visibility: visible;
}
/* --- 主题切换按钮 --- */
.theme-toggle {
background: none;
border: none;
color: var(--text-color);
font-size: 1.2rem;
cursor: pointer;
}
/* --- 移动端响应式设计 --- */
@media (max-width: 768px) {
.nav-links {
display: none; /* 默认隐藏,通过JS控制 */
position: absolute;
top: 100%;
left: 0;
width: 100%;
background-color: var(--card-bg);
flex-direction: column;
text-align: center;
padding: 1rem 0;
box-shadow: var(--shadow);
}
.nav-links.active {
display: flex;
}
.mobile-menu-btn {
display: block;
cursor: pointer;
}
.hero-title {
font-size: 2.5rem;
}
.about-content {
flex-direction: column;
}
.about-text {
padding-right: 0;
margin-bottom: 2rem;
}
.about-image img {
max-width: 100%;
}
}
jQuery 代码 (script.js)
$(document).ready(function() {
// --- 平滑滚动 ---
$('.nav-link, .cta-button').on('click', function(e) {
// 如果是移动端菜单,点击后关闭菜单
if ($('.nav-links').hasClass('active')) {
$('.nav-links').removeClass('active');
}
e.preventDefault();
const target = $(this).attr('href');
$('html, body').animate({
scrollTop: $(target).offset().top - 70 // 减去导航栏高度
}, 800);
});
// --- 导航栏高亮当前板块 ---
$(window).scroll(function() {
let scrollPosition = $(window).scrollTop();
// 返回顶部按钮显示/隐藏
if (scrollPosition > 500) {
$('#back-to-top').addClass('visible');
} else {
$('#back-to-top').removeClass('visible');
}
// 导航栏高亮
$('.section').each(function() {
const target = $(this);
const targetTop = target.offset().top - 100;
const targetBottom = targetTop + target.outerHeight();
const id = target.attr('id');
if (scrollPosition >= targetTop && scrollPosition < targetBottom) {
$('.nav-link').removeClass('active');
$(`.nav-link[href="#${id}"]`).addClass('active');
}
});
});
// --- 滚动动画 ---
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -100px 0px'
};
const observer = new IntersectionObserver(function(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
$(entry.target).addClass('visible');
}
});
}, observerOptions);
$('.section').each(function() {
observer.observe(this[0] || this);
});
// --- 主题切换 ---
$('#theme-toggle').on('click', function() {
$('body').toggleClass('dark-theme');
const icon = $(this).find('i');
if ($('body').hasClass('dark-theme')) {
icon.removeClass('fa-moon').addClass('fa-sun');
} else {
icon.removeClass('fa-sun').addClass('fa-moon');
}
});
// --- 移动端菜单切换 ---
$('.mobile-menu-btn').on('click', function() {
$('.nav-links').toggleClass('active');
});
// --- 作品集动态加载 ---
const portfolioItems = [
{ title: '项目一:在线商城', description: '使用 React 和 Node.js 构建的电商网站。', image: 'https://via.placeholder.com/400x300' },
{ title: '项目二:任务管理应用', description: '基于 Vue.js 的个人任务管理工具。', image: 'https://via.placeholder.com/400x300' },
{ title: '项目三:个人博客系统', description: '使用 WordPress 搭建的博客。', image: 'https://via.placeholder.com/400x300' },
{ title: '项目四:天气预报 App', description: '调用第三方 API 的移动端天气应用。', image: 'https://via.placeholder.com/400x300' },
{ title: '项目五:数据可视化看板', description: '使用 D3.js 展示销售数据。', image: 'https://via.placeholder.com/400x300' },
{ title: '项目六:小游戏:贪吃蛇', description: '使用原生 JavaScript 开发的网页小游戏。', image: 'https://via.placeholder.com/400x300' }
];
let currentIndex = 0;
const itemsPerLoad = 3;
function loadMoreItems() {
const $grid = $('#portfolio-grid');
const endIndex = Math.min(currentIndex + itemsPerLoad, portfolioItems.length);
for (let i = currentIndex; i < endIndex; i++) {
const item = portfolioItems[i];
const $item = $(`
<div class="portfolio-item">
<img src="${item.image}" alt="${item.title}">
<div class="portfolio-item-content">
<h3>${item.title}</h3>
<p>${item.description}</p>
</div>
</div>
`);
$grid.append($item);
}
currentIndex = endIndex;
if (currentIndex >= portfolioItems.length) {
$('#load-more-btn').hide();
}
}
// 初始加载
loadMoreItems();
// 点击“加载更多”按钮
$('#load-more-btn').on('click', function() {
loadMoreItems();
});
// --- 返回顶部 ---
$('#back-to-top').on('click', function(e) {
e.preventDefault();
$('html, body').animate({ scrollTop: 0 }, 800);
});
});
总结与扩展建议
这个模板为您提供了一个功能齐全、设计现代的个人网站起点,您可以根据自己的需求进行扩展:

(图片来源网络,侵删)
- : 替换所有占位符文本、图片和链接。
- 添加更多板块: 如“博客”、“经历”、“证书”等。
- 集成后端: 如果需要提交表单或存储数据,可以集成 Node.js, Python Flask/Django 等后端技术。
- 使用前端框架: 如果您想构建更复杂的应用,可以考虑使用 Vue.js 或 React 来重构,以获得更好的组件化开发体验。
- 部署: 将代码上传到 GitHub Pages, Netlify, Vercel 等平台,即可免费获得一个公开的网站。
希望这个模板对您有帮助!祝您学业有成,编程愉快!

(图片来源网络,侵删)
