欢迎光临万站网!
服务电话:0769-27192000
发表时间: 2026-03-10 17:13:28
作者: 万站网
浏览:
在这个低代码和建站工具泛滥的时代,回归原生代码(HTML/CSS/JS)依然是理解Web本质、获得极致性能控制和完全自定义能力的最佳途径。本文将手把手带你从零开始,仅使用原生HTML5、CSS3和少量JavaScript,搭建一个美观、适配手机/平板/桌面的响应式个人网站。
我们将构建包含固定导航栏、英雄区(Hero Section)、关于我、作品展示网格、联系表单等核心模块的完整页面,并提供部署建议。
一、准备工作:项目结构
首先,在你的电脑上创建一个文件夹(例如 my-portfolio),并在其中创建以下文件结构:
my-portfolio/
├── index.html # 主页面结构
├── style.css # 样式与响应式布局
├── script.js # 交互逻辑(移动端菜单等)
└── images/ # 存放图片资源(logo, 作品图等)
├── logo.png
├── hero-bg.jpg
└── project1.jpg
提示:为了演示方便,下文中的图片链接将使用占位图服务,你在实战时可替换为自己的本地图片。
二、HTML5:构建语义化骨架
打开 index.html,我们将使用HTML5的语义化标签(
html
预览
我拥有5年的Web开发经验,擅长使用原生技术构建高性能网站。我相信简洁的代码和最纯粹的用户体验。
HTML5
CSS3
JavaScript
响应式设计
基于原生JS开发的轻量级数据看板。
极简主义风格,支持深色模式。
高转化率的SaaS产品推广页。
© 2026 张三。All Rights Reserved. Built with Pure Code.
三、CSS3:样式与响应式核心
打开 style.css。我们将采用 Mobile First(移动优先) 的策略:先写手机端的样式,再通过 @media 查询逐步增强平板和桌面的样式。
1. 全局重置与基础变量
:root {
--primary-color: #2563eb;
--text-dark: #1f2937;
--text-light: #6b7280;
--bg-light: #f3f4f6;
--white: #ffffff;
--max-width: 1200px;
--transition: all 0.3s ease;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
line-height: 1.6;
color: var(--text-dark);
}
a { text-decoration: none; color: inherit; }
ul { list-style: none; }
img { max-width: 100%; display: block; }
/* 通用容器 */
.container {
width: 90%;
max-width: var(--max-width);
margin: 0 auto;
padding: 0 15px;
}
.section { padding: 60px 0; }
.bg-light { background-color: var(--bg-light); }
.section-title {
text-align: center;
font-size: 2rem;
margin-bottom: 40px;
position: relative;
}
.section-title::after {
content: '';
display: block;
width: 60px;
height: 4px;
background: var(--primary-color);
margin: 10px auto 0;
border-radius: 2px;
}
2. 导航栏样式(含移动端适配逻辑)
/* 导航栏基础 */
.navbar {
background: var(--white);
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
position: fixed;
top: 0;
width: 100%;
z-index: 1000;
height: 70px;
display: flex;
align-items: center;
}
.nav-container {
display: flex;
justify-content: space-between;
align-items: center;
width: 90%;
max-width: var(--max-width);
margin: 0 auto;
}
.logo {
font-size: 1.5rem;
font-weight: bold;
color: var(--primary-color);
}
.nav-links {
display: flex;
gap: 20px;
}
.nav-links a {
font-weight: 500;
transition: var(--transition);
}
.nav-links a:hover { color: var(--primary-color); }
/* 移动端汉堡菜单默认隐藏 */
.menu-toggle {
display: none;
flex-direction: column;
cursor: pointer;
gap: 5px;
background: none;
border: none;
}
.menu-toggle span {
width: 25px;
height: 3px;
background-color: var(--text-dark);
transition: var(--transition);
}
/* --- 移动端适配 (@media) --- */
@media (max-width: 768px) {
.menu-toggle { display: flex; }
.nav-links {
position: absolute;
top: 70px;
left: 0;
width: 100%;
background: var(--white);
flex-direction: column;
align-items: center;
padding: 20px 0;
gap: 20px;
/* 默认隐藏,通过JS添加类名显示 */
transform: translateY(-150%);
transition: transform 0.3s ease-in-out;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.nav-links.active {
transform: translateY(0);
}
}
3. 英雄区与按钮
.hero {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
padding-top: 70px; /* 抵消导航栏高度 */
}
.hero h1 {
font-size: 2.5rem;
margin-bottom: 15px;
}
.highlight { color: var(--primary-color); }
.btn {
display: inline-block;
background: var(--primary-color);
color: var(--white);
padding: 12px 30px;
border-radius: 5px;
font-weight: bold;
transition: var(--transition);
border: none;
cursor: pointer;
margin-top: 20px;
}
.btn:hover { background: #1d4ed8; transform: translateY(-2px); }
@media (min-width: 768px) {
.hero h1 { font-size: 3.5rem; }
}
4. 作品展示区(CSS Grid 响应式网格)
这是响应式设计的精髓。使用 grid-template-columns: repeat(auto-fit, minmax(...)) 可以自动根据屏幕宽度调整列数,无需写大量的媒体查询。
.project-grid {
display: grid;
/* 核心魔法:自动填充,最小宽度280px,最大1fr */
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 30px;
}
.project-card {
background: var(--white);
border-radius: 8px;
overflow: hidden;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
transition: var(--transition);
}
.project-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 15px rgba(0,0,0,0.1);
}
.project-card img {
width: 100%;
height: 200px;
object-fit: cover;
}
.card-info { padding: 20px; }
.card-info h3 { margin-bottom: 10px; font-size: 1.25rem; }
.card-info p { color: var(--text-light); font-size: 0.9rem; }
5. 联系表单与页脚
.contact-form {
max-width: 600px;
margin: 0 auto;
background: var(--white);
padding: 30px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.form-group { margin-bottom: 20px; }
.form-group label { display: block; margin-bottom: 8px; font-weight: 500; }
.form-group input, .form-group textarea {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-family: inherit;
}
.form-group input:focus, .form-group textarea:focus {
outline: none;
border-color: var(--primary-color);
}
.footer {
background: var(--text-dark);
color: var(--white);
text-align: center;
padding: 20px 0;
margin-top: 40px;
}
四、JavaScript:添加交互灵魂
虽然我们要尽量减少JS的使用,但移动端的导航菜单切换是必须的。打开 script.js:
javascript
编辑
document.addEventListener('DOMContentLoaded', () => {
const menuToggle = document.getElementById('mobile-menu');
const navLinks = document.querySelector('.nav-links');
const links = document.querySelectorAll('.nav-links a');
// 点击汉堡菜单切换显示
menuToggle.addEventListener('click', () => {
navLinks.classList.toggle('active');
// 简单的动画效果:切换汉堡图标样式(可选)
// 这里仅做类名切换演示
});
// 点击任意链接后,自动关闭菜单(提升移动端体验)
links.forEach(link => {
link.addEventListener('click', () => {
if (navLinks.classList.contains('active')) {
navLinks.classList.remove('active');
}
});
});
// 平滑滚动兼容处理 (旧版浏览器可能需要,现代浏览器CSS scroll-behavior: smooth即可)
// 此处为了演示纯JS控制,我们在CSS中也可以直接加 html { scroll-behavior: smooth; }
});
补充CSS:为了让锚点跳转更平滑,请在 style.css 的 html 标签中添加:
html {
scroll-behavior: smooth;
}
五、测试与调试
在浏览器中打开 index.html,进行以下测试:
桌面端:缩放浏览器窗口,观察“作品展示”区域的网格是否从3列自动变为2列、1列。
移动端模拟:
按 F12 打开开发者工具,点击“手机/平板图标”。
选择 iPhone 12/13 或 Pixel 5 等机型。
检查导航栏是否变成了“汉堡菜单”,点击是否能展开。
检查字体大小是否合适,不需要左右滑动屏幕。
六、部署建议:免费发布上线
代码写好了,如何让别人访问?以下是几种免费的纯静态网站托管方案:
方案 A:GitHub Pages (推荐开发者)
在 GitHub 创建一个新仓库(例如 my-website)。
将 index.html, style.css, script.js 和 images 文件夹上传到仓库根目录。
进入仓库 Settings -> Pages。
在 Build and deployment 下,Source 选择 Deploy from a branch,Branch 选择 main (或 master),文件夹选 / (root)。
保存后,几分钟后你就会获得一个 https://你的用户名.github.io/my-website/ 的域名。
方案 B:Vercel / Netlify (最简单,拖拽即可)
注册 Netlify 或 Vercel 账号。
将整个项目文件夹拖拽到其控制台的部署区域。
系统会自动识别 HTML 文件并部署,生成一个随机域名(可自定义)。
优势:自带 HTTPS,全球CDN加速,速度极快。
七、总结与进阶
恭喜你!你已经用纯代码搭建了一个功能完备、响应式的个人网站。
你学到了什么?
HTML5 语义化:构建清晰的结构。
CSS 变量与重置:统一风格,减少重复代码。
Flexbox 与 Grid:现代布局的核心,轻松实现响应式。
Media Queries:针对不同设备定制样式。
原生 JS 交互:不依赖库实现基础功能。
下一步可以做什么?
优化性能:压缩图片,使用 WebP 格式。
SEO 优化:添加 ,优化
深色模式:利用 CSS @media (prefers-color-scheme: dark) 添加夜间模式。
表单功能:使用 Formspree 或 EmailJS 等服务,无需后端即可让表单真正发送邮件。
纯代码建站不仅是技能的体现,更是对Web标准的尊重。现在,去修改内容,把它变成独一无二的个人名片吧!