- 基础版:一个简单的、结构清晰的个人信息页面。
- 美化版:添加 CSS 样式,让页面看起来更专业、更美观。
- 交互版:添加一点 JavaScript,增加简单的交互效果。
- 响应式版:确保页面在不同设备(手机、平板、电脑)上都能良好显示。
第1步:基础版 HTML 结构
这是页面的骨架,包含了所有必要的信息模块。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">张三 - 个人信息</title>
</head>
<body>
<header>
<h1>张三</h1>
<p>前端开发工程师</p>
</header>
<main>
<section class="profile">
<img src="https://via.placeholder.com/150" alt="张三的头像">
<h2>关于我</h2>
<p>你好!我是一名充满热情的前端开发工程师,专注于创建用户友好、性能卓越的 Web 应用,我热爱学习新技术,并享受将复杂问题转化为简洁解决方案的过程。</p>
</section>
<section class="skills">
<h2>技能</h2>
<ul>
<li>HTML5 / CSS3</li>
<li>JavaScript (ES6+)</li>
<li>React / Vue.js</li>
<li>Node.js</li>
<li>Git / GitHub</li>
</ul>
</section>
<section class="experience">
<h2>工作经历</h2>
<article>
<h3>高级前端开发工程师 - 某科技有限公司</h3>
<time>2025年3月 - 至今</time>
<p>负责公司核心产品的前端架构设计与开发,优化用户体验,提升页面性能。</p>
</article>
<article>
<h3>前端开发工程师 - ABC初创公司</h3>
<time>2025年7月 - 2025年2月</time>
<p>参与多个 Web 应用的开发,与后端团队紧密合作,完成产品功能迭代。</p>
</article>
</section>
<section class="contact">
<h2>联系方式</h2>
<p>📧 邮箱: zhangsan@example.com</p>
<p>🔗 GitHub: <a href="https://github.com/zhangsan" target="_blank">github.com/zhangsan</a></p>
<p>📱 微信: zhangsan_wechat</p>
</section>
</main>
<footer>
<p>© 2025 张三. All rights reserved.</p>
</footer>
</body>
</html>
代码解释:
<!DOCTYPE html>:声明文档类型。<html lang="zh-CN">>:根元素,lang属性有助于搜索引擎和屏幕阅读器。<head>:包含页面的元数据,如标题、字符编码、视口设置等。<body>:页面的可见内容。<header>:页面或区块的页眉,通常包含标题和简介。<main>:页面的主要内容,一个页面中只能有一个<main><section>:文档中的独立区块,如“关于我”、“技能”等。<h1>到<h6>标签,<h1>是最重要的页面标题。<p>:段落标签。<img>:图片标签,src是图片地址,alt是替代文本,对SEO和无障碍访问很重要。<ul>和<li>:无序列表和列表项。<article>:代表一个独立的、完整的内容块,如一篇工作经历。<time>:表示时间或日期,机器可读。<a>:超链接,href是目标地址,target="_blank"会在新标签页打开链接。<footer>:页面或区块的页脚,通常包含版权信息。
第2步:美化版 - 添加 CSS 样式
我们为上面的 HTML 添加 CSS 样式,让它变得美观,你可以将 CSS 代码放在 <head> 标签内的 <style> 标签里,或者单独创建一个 style.css 文件并在 <head> 中引入。
<!-- 在 <head> 中添加 <style> 标签 -->
<style>
/* 全局样式和变量 */
:root {
--primary-color: #007bff;
--secondary-color: #6c757d;
--background-color: #f4f4f9;
--text-color: #333;
--box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.6;
margin: 0;
background-color: var(--background-color);
color: var(--text-color);
}
/* 容器布局 */
.container {
max-width: 900px;
margin: 20px auto;
padding: 20px;
background-color: #fff;
border-radius: 8px;
box-shadow: var(--box-shadow);
}
/* 头部样式 */
header {
text-align: center;
padding: 40px 0;
border-bottom: 1px solid #eee;
}
header h1 {
font-size: 2.5em;
margin: 0;
color: var(--primary-color);
}
header p {
font-size: 1.2em;
color: var(--secondary-color);
margin-top: 10px;
}
/* 主要内容区域 */
main {
padding: 20px 0;
}
/* 通用区块样式 */
section {
margin-bottom: 40px;
}
section h2 {
color: var(--primary-color);
border-bottom: 2px solid var(--primary-color);
padding-bottom: 10px;
margin-bottom: 20px;
}
/* 个人简介和头像 */
.profile {
text-align: center;
}
.profile img {
width: 150px;
height: 150px;
border-radius: 50%; /* 圆形头像 */
object-fit: cover; /* 保证图片不变形 */
margin-bottom: 20px;
border: 5px solid #fff;
box-shadow: var(--box-shadow);
}
/* 技能列表 */
.skills ul {
list-style-type: none; /* 去掉默认列表点 */
padding: 0;
display: flex; /* 使用 Flexbox 布局 */
flex-wrap: wrap;
gap: 10px; /* 项目之间的间距 */
}
.skills li {
background-color: var(--primary-color);
color: white;
padding: 8px 15px;
border-radius: 20px; /* 胶囊形状 */
font-size: 0.9em;
}
/* 工作经历 */
.experience article {
margin-bottom: 25px;
padding-bottom: 25px;
border-bottom: 1px dashed #ddd;
}
.experience article:last-child {
border-bottom: none;
}
.experience h3 {
margin: 0 0 5px 0;
}
.experience time {
color: var(--secondary-color);
font-size: 0.9em;
}
/* 联系方式 */
.contact p {
margin: 10px 0;
}
.contact a {
color: var(--primary-color);
text-decoration: none;
}
.contact a:hover {
text-decoration: underline;
}
/* 页脚 */
footer {
text-align: center;
margin-top: 40px;
padding: 20px;
border-top: 1px solid #eee;
color: var(--secondary-color);
font-size: 0.9em;
}
</style>
CSS 设计思路:
- CSS 变量 (
root):定义了颜色、阴影等,方便全局统一修改。 - 容器 (
.container)居中并限制最大宽度,使其在大屏幕上更美观。 - 布局:使用
Flexbox实现技能列表的水平排列和居中对齐,非常灵活。 - 色彩与字体:选择了现代、易读的字体和配色方案。
- 细节:如圆形头像 (
border-radius: 50%)、胶囊形状的技能标签、悬停效果 (hover),都提升了用户体验。
第3步:交互版 - 添加 JavaScript
我们给页面增加一个简单的“暗色/亮色”主题切换功能。
<!-- 在 <body> 标签的最后添加 <script> 标签 -->
<script>
// 获取 body 元素
const body = document.body;
// 获取切换按钮
const themeToggleBtn = document.createElement('button');
themeToggleBtn.textContent = '切换主题';
themeToggleBtn.style.cssText = `
position: fixed;
top: 20px;
right: 20px;
padding: 10px 15px;
background-color: var(--primary-color);
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
z-index: 1000;
`;
document.body.appendChild(themeToggleBtn);
// 暗色主题的 CSS 变量
const darkTheme = {
'--primary-color': #ff6b6b,
'--secondary-color': #feca57,
'--background-color': #2c2c54,
'--text-color': #ffffff,
'--box-shadow': '0 4px 8px rgba(255,255,255,0.1)'
};
// 点击按钮时切换主题
themeToggleBtn.addEventListener('click', () => {
if (body.style.backgroundColor === 'rgb(44, 44, 84)') {
// 如果当前是暗色,则切换回亮色
Object.keys(darkTheme).forEach(key => {
body.style.setProperty(key, getComputedStyle(document.documentElement).getPropertyValue(key));
});
themeToggleBtn.textContent = '切换主题';
} else {
// 如果当前是亮色,则切换为暗色
Object.keys(darkTheme).forEach(key => {
body.style.setProperty(key, darkTheme[key]);
});
themeToggleBtn.textContent = '切换亮色';
}
});
</script>
JavaScript 功能解释:
- 创建按钮:我们用
document.createElement动态创建了一个按钮,并设置了它的样式和文字。 - 添加事件监听:使用
addEventListener('click', ...)为按钮添加点击事件。 - 切换逻辑:点击时,检查当前背景色,如果是亮色,就把暗色主题的 CSS 变量应用到
body上;反之亦然,通过直接修改body.style来实现即时切换。
第4步:响应式版 - 适配移动设备
响应式设计是现代网页的必备技能,我们使用 媒体查询 (Media Queries) 来为小屏幕(如手机)调整布局。
/* 在 <style> 标签的最后添加以下代码 */
/* 当屏幕宽度小于 768px 时(平板和手机) */
@media (max-width: 768px) {
.container {
margin: 10px;
padding: 15px;
}
header h1 {
font-size: 2em;
}
.skills ul {
flex-direction: column; /* 技能列表改为垂直排列 */
gap: 8px;
}
.skills li {
text-align: center;
}
/* 调整主题按钮位置 */
themeToggleBtn {
top: 10px;
right: 10px;
padding: 8px 12px;
font-size: 0.9em;
}
}
/* 当屏幕宽度小于 480px 时(小型手机) */
@media (max-width: 480px) {
header h1 {
font-size: 1.5em;
}
header p {
font-size: 1em;
}
section h2 {
font-size: 1.3em;
}
}
响应式设计思路:
@media (max-width: 768px):这是一个断点,表示当浏览器窗口宽度小于 768 像素时,应用里面的 CSS 规则。- 调整布局:在手机上,将水平排列的技能列表改为垂直排列,以节省空间。
- 调整字体和间距、文字和容器的尺寸,使其在小屏幕上更协调。
最终完整代码
你可以将以上所有部分组合在一起,得到一个功能完整、美观且响应式的个人信息网页。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">张三 - 个人信息</title>
<style>
/* 全局样式和变量 */
:root {
--primary-color: #007bff;
--secondary-color: #6c757d;
--background-color: #f4f4f9;
--text-color: #333;
--box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.6;
margin: 0;
background-color: var(--background-color);
color: var(--text-color);
transition: background-color 0.3s, color 0.3s;
}
/* 容器布局 */
.container {
max-width: 900px;
margin: 20px auto;
padding: 20px;
background-color: #fff;
border-radius: 8px;
box-shadow: var(--box-shadow);
transition: background-color 0.3s;
}
/* 头部样式 */
header {
text-align: center;
padding: 40px 0;
border-bottom: 1px solid #eee;
}
header h1 {
font-size: 2.5em;
margin: 0;
color: var(--primary-color);
}
header p {
font-size: 1.2em;
color: var(--secondary-color);
margin-top: 10px;
}
/* 主要内容区域 */
main {
padding: 20px 0;
}
/* 通用区块样式 */
section {
margin-bottom: 40px;
}
section h2 {
color: var(--primary-color);
border-bottom: 2px solid var(--primary-color);
padding-bottom: 10px;
margin-bottom: 20px;
}
/* 个人简介和头像 */
.profile {
text-align: center;
}
.profile img {
width: 150px;
height: 150px;
border-radius: 50%;
object-fit: cover;
margin-bottom: 20px;
border: 5px solid #fff;
box-shadow: var(--box-shadow);
}
/* 技能列表 */
.skills ul {
list-style-type: none;
padding: 0;
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.skills li {
background-color: var(--primary-color);
color: white;
padding: 8px 15px;
border-radius: 20px;
font-size: 0.9em;
}
/* 工作经历 */
.experience article {
margin-bottom: 25px;
padding-bottom: 25px;
border-bottom: 1px dashed #ddd;
}
.experience article:last-child {
border-bottom: none;
}
.experience h3 {
margin: 0 0 5px 0;
}
.experience time {
color: var(--secondary-color);
font-size: 0.9em;
}
/* 联系方式 */
.contact p {
margin: 10px 0;
}
.contact a {
color: var(--primary-color);
text-decoration: none;
}
.contact a:hover {
text-decoration: underline;
}
/* 页脚 */
footer {
text-align: center;
margin-top: 40px;
padding: 20px;
border-top: 1px solid #eee;
color: var(--secondary-color);
font-size: 0.9em;
}
/* 响应式设计 */
@media (max-width: 768px) {
.container {
margin: 10px;
padding: 15px;
}
header h1 {
font-size: 2em;
}
.skills ul {
flex-direction: column;
gap: 8px;
}
.skills li {
text-align: center;
}
}
@media (max-width: 480px) {
header h1 {
font-size: 1.5em;
}
header p {
font-size: 1em;
}
section h2 {
font-size: 1.3em;
}
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>张三</h1>
<p>前端开发工程师</p>
</header>
<main>
<section class="profile">
<img src="https://via.placeholder.com/150" alt="张三的头像">
<h2>关于我</h2>
<p>你好!我是一名充满热情的前端开发工程师,专注于创建用户友好、性能卓越的 Web 应用,我热爱学习新技术,并享受将复杂问题转化为简洁解决方案的过程。</p>
</section>
<section class="skills">
<h2>技能</h2>
<ul>
<li>HTML5 / CSS3</li>
<li>JavaScript (ES6+)</li>
<li>React / Vue.js</li>
<li>Node.js</li>
<li>Git / GitHub</li>
</ul>
</section>
<section class="experience">
<h2>工作经历</h2>
<article>
<h3>高级前端开发工程师 - 某科技有限公司</h3>
<time>2025年3月 - 至今</time>
<p>负责公司核心产品的前端架构设计与开发,优化用户体验,提升页面性能。</p>
</article>
<article>
<h3>前端开发工程师 - ABC初创公司</h3>
<time>2025年7月 - 2025年2月</time>
<p>参与多个 Web 应用的开发,与后端团队紧密合作,完成产品功能迭代。</p>
</article>
</section>
<section class="contact">
<h2>联系方式</h2>
<p>📧 邮箱: zhangsan@example.com</p>
<p>🔗 GitHub: <a href="https://github.com/zhangsan" target="_blank">github.com/zhangsan</a></p>
<p>📱 微信: zhangsan_wechat</p>
</section>
</main>
<footer>
<p>© 2025 张三. All rights reserved.</p>
</footer>
</div>
<script>
const body = document.body;
const themeToggleBtn = document.createElement('button');
themeToggleBtn.textContent = '切换主题';
themeToggleBtn.style.cssText = `
position: fixed;
top: 20px;
right: 20px;
padding: 10px 15px;
background-color: var(--primary-color);
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
z-index: 1000;
transition: background-color 0.3s;
`;
document.body.appendChild(themeToggleBtn);
const darkTheme = {
'--primary-color': '#ff6b6b',
'--secondary-color': '#feca57',
'--background-color': '#2c2c54',
'--text-color': '#ffffff',
'--box-shadow': '0 4px 8px rgba(255,255,255,0.1)'
};
themeToggleBtn.addEventListener('click', () => {
const currentBg = getComputedStyle(body).backgroundColor;
if (currentBg === 'rgb(44, 44, 84)' || currentBg === 'rgb(44, 44, 84, 1)') {
Object.keys(darkTheme).forEach(key => {
body.style.setProperty(key, getComputedStyle(document.documentElement).getPropertyValue(key));
});
themeToggleBtn.textContent = '切换主题';
} else {
Object.keys(darkTheme).forEach(key => {
body.style.setProperty(key, darkTheme[key]);
});
themeToggleBtn.textContent = '切换亮色';
}
});
</script>
</body>
</html>
如何使用和下一步
- 复制代码:将上面的完整代码复制到一个文本编辑器中(如 VS Code, Sublime Text, 或记事本)。
- 保存文件:将文件保存为
index.html。 - 打开网页:用浏览器(如 Chrome, Firefox)打开这个
index.html文件,你就能看到效果了。 - 个性化修改:将
张三、你的技能、工作经历、联系方式等信息替换成你自己的。 - 下一步学习:
- 部署上线:你可以将这个
index.html文件上传到 GitHub Pages、Netlify 或 Vercel 等免费平台,让它成为一个真正的在线网页。 - 更复杂的设计:学习使用 CSS 框架(如 Tailwind CSS, Bootstrap)可以更快地构建复杂布局。
- :学习使用 React, Vue 或 Svelte 等前端框架,让你的页面内容可以动态加载和更新。
- 动画效果:学习 CSS 动画或 GSAP 库,为页面添加更丰富的交互和视觉效果。
- 部署上线:你可以将这个
