- 语义化 HTML5 结构:使用
<header>,<nav>,<main>,<section>,<article>,<aside>,<footer>等标签。 - CSS3 样式:包括 Flexbox 布局、响应式设计(媒体查询)、过渡动画和自定义变量。
- JavaScript 交互:实现一个功能性的移动端导航菜单(汉堡菜单)。
- SEO 友好:包含
meta标签和结构化的内容。
最终效果预览
这是一个简洁、现代的单页滚动网站,包含导航、主页、服务和联系信息,在移动设备上,导航菜单会变成一个汉堡菜单图标。

文件结构
为了运行这个网站,您需要创建以下三个文件,并将它们放在同一个文件夹中:
my-website/
├── index.html
├── style.css
└── script.js
HTML 代码 (index.html)
这是网站的结构和内容,代码中包含了详细的注释,解释了每个部分的作用。
<!DOCTYPE html>
<!--
使用 lang="zh-CN" 声明语言,有助于搜索引擎理解网站内容。
-->
<html lang="zh-CN">
<head>
<!-- 字符编码声明,防止页面出现乱码 -->
<meta charset="UTF-8">
<!-- 视口设置,确保网站在移动设备上正确显示和缩放 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 页面标题,显示在浏览器标签页上,对SEO非常重要 -->我的现代HTML5网站</title>
<!-- 引入外部CSS样式表 -->
<link rel="stylesheet" href="style.css">
<!-- 引入Google Fonts,使用一个优雅的无衬线字体 -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
</head>
<body>
<!--
<header> 网站头部,通常包含Logo和主导航。
使用 data-js-header 属性供JavaScript操作,例如在滚动时添加阴影。
-->
<header class="main-header" data-js-header>
<div class="container">
<a href="#" class="logo">我的Logo</a>
<!--
<nav> 定义导航链接区域。
data-js-nav-menu 属性用于JavaScript控制移动端菜单的显示/隐藏。
-->
<nav class="main-nav" data-js-nav-menu>
<ul>
<li><a href="#home">首页</a></li>
<li><a href="#about">lt;/a></li>
<li><a href="#services">服务</a></li>
<li><a href="#contact">联系</a></li>
</ul>
</nav>
<!--
汉堡菜单按钮,仅在移动端显示。
data-js-nav-toggle 属性用于JavaScript触发菜单开关。
-->
<button class="nav-toggle" aria-label="切换导航菜单" data-js-nav-toggle>
<span class="hamburger"></span>
</button>
</div>
</header>
<main>
<!--
<section> 用于定义文档中的一个区域。
id 属性用于创建页面内的锚点链接(如 href="#home")。
-->
<section id="home" class="hero">
<div class="container">
<h1>欢迎来到我的网站</h1>
<p>这是一个使用 HTML5, CSS3 和 JavaScript 构建的现代化、响应式网站。</p>
<a href="#about" class="btn">了解更多</a>
</div>
</section>
<section id="about" class="about-section">
<div class="container">
<h2>关于我们</h2>
<p>我们是一支充满激情的团队,致力于创造卓越的数字体验,我们相信,好的设计不仅仅是美观,更是功能与美学的完美结合。</p>
</div>
</section>
<section id="services" class="services-section">
<div class="container">
<h2>我们的服务</h2>
<div class="services-grid">
<article class="service-card">
<h3>网页设计</h3>
<p>创造美观且用户友好的界面设计,提升品牌形象。</p>
</article>
<article class="service-card">
<h3>前端开发</h3>
<p>将设计稿转化为高性能、可访问的网页应用。</p>
</article>
<article class="service-card">
<h3>响应式布局</h3>
<p>确保您的网站在任何设备上都能完美展示。</p>
</article>
</div>
</div>
</section>
<section id="contact" class="contact-section">
<div class="container">
<h2>联系我们</h2>
<p>有项目想法?让我们一起聊聊吧!</p>
<p>邮箱: contact@example.com</p>
<p>电话: +86 123 4567 8900</p>
</div>
</section>
</main>
<!--
<footer> 网站页脚,通常包含版权信息、链接等。
-->
<footer class="main-footer">
<div class="container">
<p>© 2025 我的公司. 保留所有权利.</p>
</div>
</footer>
<!-- 引入外部JavaScript脚本 -->
<!-- 放在body末尾,确保DOM元素完全加载后再执行脚本 -->
<script src="script.js"></script>
</body>
</html>
CSS 代码 (style.css)
这是网站的样式表,负责布局、颜色、字体和响应式设计。
/* --- 全局样式和变量 --- */
:root {
--primary-color: #007bff;
--secondary-color: #343a40;
--text-color: #333;
--light-bg-color: #f4f4f4;
--white-color: #ffffff;
--font-family: 'Noto Sans SC', sans-serif;
--container-max-width: 1100px;
--spacing-unit: 1rem;
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth; /* 平滑滚动 */
}
body {
font-family: var(--font-family);
line-height: 1.6;
color: var(--text-color);
background-color: var(--white-color);
}
.container {
max-width: var(--container-max-width);
margin: 0 auto;
padding: 0 1.5rem;
}
h1, h2, h3 {
line-height: 1.2;
margin-bottom: 1rem;
}
a {
text-decoration: none;
color: var(--primary-color);
}
.btn {
display: inline-block;
background: var(--primary-color);
color: var(--white-color);
padding: 0.8rem 1.5rem;
border-radius: 5px;
margin-top: 1rem;
transition: background-color 0.3s ease;
}
.btn:hover {
background-color: #0056b3;
}
/* --- 头部导航 --- */
.main-header {
background: var(--white-color);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 1000;
transition: box-shadow 0.3s ease;
}
.main-header.scrolled {
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);
}
.main-header .container {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;
}
.logo {
font-size: 1.5rem;
font-weight: 700;
color: var(--secondary-color);
}
.main-nav ul {
list-style: none;
display: flex;
gap: 2rem;
}
.main-nav a {
color: var(--secondary-color);
font-weight: 500;
transition: color 0.3s ease;
}
.main-nav a:hover {
color: var(--primary-color);
}
/* --- 汉堡菜单 --- */
.nav-toggle {
display: none; /* 默认隐藏 */
background: transparent;
border: none;
cursor: pointer;
padding: 0.5rem;
}
.hamburger {
display: block;
width: 25px;
height: 3px;
background: var(--secondary-color);
position: relative;
}
.hamburger::before,
.hamburger::after {
content: '';
position: absolute;
width: 100%;
height: 3px;
background: var(--secondary-color);
transition: all 0.3s ease;
}
.hamburger::before {
top: -8px;
}
.hamburger::after {
bottom: -8px;
}
/* --- 主要内容区域 --- */
main {
margin-top: 80px; /* 为固定导航栏留出空间 */
}
/* --- Hero 区域 --- */
.hero {
background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://images.unsplash.com/photo-1557682257-2f9c37a3a5f3?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1740&q=80') no-repeat center center/cover;
color: var(--white-color);
text-align: center;
padding: 8rem 1rem;
}
.hero h1 {
font-size: 3rem;
margin-bottom: 1rem;
}
/* --- 服务、联系区域 --- */
.about-section,
.services-section,
.contact-section {
padding: 4rem 0;
}
.about-section {
background-color: var(--light-bg-color);
}
.services-section h2,
.contact-section h2 {
text-align: center;
margin-bottom: 3rem;
}
/* 使用 Flexbox 创建服务卡片网格 */
.services-grid {
display: flex;
justify-content: space-between;
gap: 2rem;
flex-wrap: wrap; /* 允许在小屏幕上换行 */
}
.service-card {
flex: 1 1 300px; /* 基础宽度300px,可伸缩,可收缩 */
background: var(--white-color);
padding: 2rem;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
text-align: center;
transition: transform 0.3s ease;
}
.service-card:hover {
transform: translateY(-10px);
}
/* --- 页脚 --- */
.main-footer {
background: var(--secondary-color);
color: var(--white-color);
text-align: center;
padding: 1.5rem 0;
}
/* --- 响应式设计 --- */
@media (max-width: 768px) {
.nav-toggle {
display: block; /* 在小屏幕上显示汉堡菜单 */
}
.main-nav {
position: absolute;
top: 100%;
left: 0;
width: 100%;
background: var(--white-color);
flex-direction: column;
align-items: center;
padding: 1rem 0;
transform: translateY(-150%);
transition: transform 0.3s ease-in-out;
box-shadow: 0 5px 5px rgba(0,0,0,0.1);
}
/* JavaScript 添加 'is-open' 类时,菜单滑下 */
.main-nav.is-open {
transform: translateY(0);
}
.main-nav ul {
flex-direction: column;
gap: 1rem;
}
.hero h1 {
font-size: 2rem;
}
}
JavaScript 代码 (script.js)
这是网站的交互脚本,主要负责:

- 切换移动端导航菜单的显示状态。
- 当页面滚动时,为导航栏添加阴影效果。
// 等待整个HTML文档加载完毕后执行代码
document.addEventListener('DOMContentLoaded', () => {
// --- 1. 移动端导航菜单切换逻辑 ---
const navToggle = document.querySelector('[data-js-nav-toggle]');
const navMenu = document.querySelector('[data-js-nav-menu]');
// 检查元素是否存在,避免在非移动端或其他页面报错
if (navToggle && navMenu) {
navToggle.addEventListener('click', () => {
// 切换 'is-open' 类,通过CSS控制菜单的显示和隐藏
navMenu.classList.toggle('is-open');
// 可选:改变汉堡菜单图标为 'X'
const hamburger = navToggle.querySelector('.hamburger');
if (navMenu.classList.contains('is-open')) {
hamburger.style.background = 'transparent';
hamburger::before {
transform: rotate(45deg);
top: 0;
}
hamburger::after {
transform: rotate(-45deg);
bottom: 0;
}
} else {
// 恢复汉堡菜单图标
hamburger.style.background = ''; // 恢复原始样式
// 在实际项目中,这里可能需要更复杂的CSS来重置动画
}
});
}
// --- 2. 滚动时为导航栏添加阴影 ---
const header = document.querySelector('[data-js-header]');
if (header) {
window.addEventListener('scroll', () => {
// 当页面滚动超过50像素时,为header添加 'scrolled' 类
if (window.scrollY > 50) {
header.classList.add('scrolled');
} else {
header.classList.remove('scrolled');
}
});
}
});
如何使用
- 创建文件:按照上面的文件结构,创建
index.html,style.css, 和script.js三个文件。 - 复制代码:将对应的代码分别粘贴到这三个文件中。
- 打开网站:用浏览器(如 Chrome, Firefox, Edge)打开
index.html文件,即可看到网站效果。
您可以根据自己的需求修改颜色、文本、图片链接和样式,这是一个非常好的起点!

