本文档旨在帮助协作者快速理解项目结构、掌握开发规范,便于后续的修改和维护。
Intelligent Battery 是一个纯静态网站,用于展示"智能电池管理系统"研究项目。该项目采用现代化的深色主题设计,支持中英文双语,包含丰富的交互组件。
- ✅ 纯静态 HTML/CSS/JS,无需构建工具
- ✅ 中英文双语支持(i18n)
- ✅ 响应式设计(移动端适配)
- ✅ 深色主题 + 渐变色配色
- ✅ 丰富的交互组件(卡片展开、FAQ、模态框等)
- ✅ 无障碍支持(ARIA 标签、键盘导航)
- ✅ SEO 优化(结构化数据、Meta 标签)
| 页面 | 文件名 | 功能描述 |
|---|---|---|
| 首页 | index.html |
项目介绍、核心优势、常见问题 |
| 团队介绍 | team.html |
负责人信息、核心成员、团队风采 |
| 动态与成果 | news.html |
最新进展、论文专利、项目时间线 |
| 加入我们 | recruit.html |
招聘职位、职位详情、联系方式 |
| 404 页面 | 404.html |
404 错误页面 |
IntelligentBattery/
├── index.html # 首页
├── team.html # 团队介绍页面
├── news.html # 动态与成果页面
├── recruit.html # 招聘页面
├── 404.html # 404 错误页面
├── favicon.svg # 网站图标
├── css/
│ └── style.css # 全局样式文件
├── js/
│ ├── main.js # 主要交互逻辑
│ └── i18n.js # 国际化配置
├── assets/ # 资源文件夹(预留,可存放图片)
├── CLAUDE.md # Claude Code 项目指引
└── 开发者文档.md # 本文档
- HTML5: 语义化标签、结构化数据
- CSS3: CSS 变量、Flexbox、Grid、动画
- Vanilla JavaScript: ES6+ 语法、无框架依赖
- Google Fonts: Inter 字体
- Unsplash: 占位图片(临时使用)
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- 移动端浏览器(iOS Safari, Chrome Mobile)
# 直接用浏览器打开任意 HTML 文件
open index.html # macOS
start index.html # Windows
xdg-open index.html # Linux# Python 3
python3 -m http.server 8000
# Node.js (需要安装 serve)
npx serve
# PHP
php -S localhost:8000访问 http://localhost:8000 查看网站。
- 编辑 HTML/CSS/JS 文件
- 保存文件
- 刷新浏览器即可看到效果(无需重新编译)
所有颜色和尺寸都定义在 :root 中,方便统一修改:
:root {
/* 主题色 */
--primary: #00f2ea; /* 主色调 - 青色 */
--primary-dark: #00bcb6; /* 主色调深色 */
--secondary: #2d5af5; /* 次要色 - 蓝色 */
/* 背景色 */
--bg-dark: #0b0d11; /* 深色背景 */
--bg-card: rgba(30, 35, 45, 0.6); /* 卡片背景(半透明) */
/* 文字颜色 */
--text-main: #ffffff; /* 主要文字 */
--text-muted: #a0a0a5; /* 次要文字 */
/* 渐变 */
--gradient-main: linear-gradient(135deg, #00f2ea 0%, #2d5af5 100%);
/* 布局 */
--nav-height: 70px; /* 导航栏高度 */
}<!-- 文字颜色 -->
<span class="text-primary">主要文字</span>
<span class="text-muted">次要文字</span>
<span class="text-white">白色文字</span>
<!-- 文字对齐 -->
<div class="text-center">居中对齐</div>
<!-- 边距 -->
<div class="mt-1">上边距 0.5rem</div>
<div class="mb-2">下边距 1rem</div>
<div class="mx-auto">水平居中</div>
<!-- 背景 -->
<section class="bg-transparent">透明背景</section><!-- 卡片 -->
<div class="card">基础卡片</div>
<div class="card card-transparent">透明卡片</div>
<!-- 网格布局 -->
<div class="grid-container">
<div class="card">卡片 1</div>
<div class="card">卡片 2</div>
<div class="card">卡片 3</div>
</div>/* 移动端(< 768px)*/
@media (max-width: 768px) {
/* 移动端样式 */
}主要适配:
- 导航栏变为汉堡菜单
- 内容区域边距缩小
- 字体大小调整
每个页面都遵循相同的结构:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<!-- Meta 标签 -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>页面标题</title>
<meta name="description" content="页面描述">
<!-- 结构化数据(SEO) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
...
}
</script>
<!-- 样式和字体 -->
<link rel="stylesheet" href="css/style.css">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;800&display=swap" rel="stylesheet">
</head>
<body>
<!-- 导航栏 -->
<nav class="navbar">
<div class="logo">IntelligentBattery</div>
<button class="hamburger">...</button>
<ul class="nav-links">...</ul>
<div class="lang-switcher">...</div>
</nav>
<!-- 主要内容 -->
<header class="hero">...</header>
<section>...</section>
<section>...</section>
<!-- 页脚 -->
<footer>...</footer>
<!-- 交互组件 -->
<div class="lightbox">...</div>
<div class="modal">...</div>
<button class="back-to-top">...</button>
<!-- 脚本(注意顺序:i18n.js 必须在 main.js 之前) -->
<script src="js/i18n.js"></script>
<script src="js/main.js"></script>
</body>
</html>修改导航链接需同步更新所有页面的 <nav> 部分:
<ul class="nav-links">
<li><a href="index.html" data-i18n="nav.home">首页</a></li>
<li><a href="team.html" data-i18n="nav.team">团队介绍</a></li>
<li><a href="news.html" data-i18n="nav.news">动态与成果</a></li>
<li><a href="recruit.html" data-i18n="nav.recruit">加入我们</a></li>
</ul>注意:class="active" 用于标记当前页面的导航项。
// 位置: js/main.js:7-35
// 功能:点击汉堡菜单切换导航显示// 位置: js/main.js:37-55
// 功能:滚动超过 300px 时显示返回顶部按钮// 位置: js/main.js:57-109
// 功能:点击带有 data-modal 属性的元素打开模态框
// 用法示例:
<div data-modal="job-modal-1">点击打开</div>// 位置: js/main.js:111-143
// 功能:点击带有 expand-trigger 类的元素展开/收起内容
// 用法示例:
<div class="card expand-trigger" tabindex="0" role="button">
<h3>标题</h3>
<div class="expandable-content">
<div class="expandable-wrapper">隐藏的内容</div>
</div>
</div>// 位置: js/main.js:145-194
// 功能:点击带有 clickable-image 类的图片放大显示
// 用法示例:
<img src="..." class="clickable-image" alt="...">// 位置: js/main.js:196-231
// 功能:点击问题展开答案(同时关闭其他问题)
// 用法示例:
<div class="faq-item">
<div class="faq-question">问题</div>
<div class="faq-answer">答案</div>
</div>// 位置: js/main.js:233-255
// 功能:点击时间线节点打开详细模态框
// 用法示例:
<div class="timeline-content" data-modal-target="timeline-modal-1">...</div>| 事件 | 触发条件 | 处理函数 |
|---|---|---|
DOMContentLoaded |
页面加载完成 | 初始化所有交互功能 |
scroll |
页面滚动 | 显示/隐藏返回顶部按钮 |
click |
点击元素 | 导航切换、模态框、展开内容等 |
keydown |
键盘按键 | 键盘导航支持(Enter/Space) |
languageChanged |
语言切换 | 更新交互元素的文字 |
国际化配置位于 js/i18n.js,包含完整的中文和英文翻译。
const translations = {
zh: {
nav: {
home: "首页",
team: "团队介绍",
...
},
hero: {
index_title: "Intelligent Battery",
...
},
...
},
en: {
// 对应的英文翻译
}
};<h1 data-i18n="new_section.title">新标题</h1>
<p data-i18n="new_section.description">新描述</p>const translations = {
zh: {
// ... 现有翻译
new_section: {
title: "新标题",
description: "新描述"
}
},
en: {
// ... 现有翻译
new_section: {
title: "New Title",
description: "New Description"
}
}
};语言切换按钮位于导航栏右侧,支持:
- 中文(默认)
- English
语言偏好会保存到 localStorage,下次访问自动应用。
直接修改 HTML 文件中的文字:
<h1>这里是新标题</h1>- 确保元素有
data-i18n属性 - 修改
js/i18n.js中的翻译
<!-- HTML -->
<h1 data-i18n="hero.index_title">Intelligent Battery</h1>
<!-- i18n.js -->
translations = {
zh: {
hero: {
index_title: "智能电池项目" // 修改这里
}
},
en: {
hero: {
index_title: "Intelligent Battery Project"
}
}
}修改 css/style.css 中的 CSS 变量:
:root {
/* 修改主色调为绿色 */
--primary: #00ff88;
--primary-dark: #00cc66;
/* 修改次要色调为紫色 */
--secondary: #9945ff;
}# 复制现有页面作为模板
cp index.html about.html编辑 about.html,修改 <title>、<meta> 标签和主要内容。
在所有页面的导航栏中添加新链接:
<li><a href="about.html" data-i18n="nav.about">关于我们</a></li>在 js/i18n.js 中添加:
nav: {
// ...
about: "关于我们" // 中文
}
nav: {
// ...
about: "About Us" // 英文
}在 grid-container 中添加新的 card 元素:
<div class="card expand-trigger" tabindex="0" role="button">
<div class="card-icon">
<svg viewBox="0 0 24 24">...</svg>
</div>
<h3 data-i18n="new_card.title">卡片标题</h3>
<p data-i18n="new_card.desc">卡片描述</p>
<div class="expandable-content">
<div class="expandable-wrapper">
<!-- 展开后的详细内容 -->
</div>
</div>
</div><div class="faq-item">
<div class="faq-question" tabindex="0" role="button" aria-expanded="false">
<span data-i18n="faq.q5">新问题?</span>
<span class="icon">+</span>
</div>
<div class="faq-answer">
<p class="text-muted lh-1-8" data-i18n="faq.a5">
新问题的答案...
</p>
</div>
</div>然后在 i18n.js 中添加对应的翻译。
修改 recruit.html 中的联系方式部分:
<div id="contact" class="contact-info">
<h2 data-i18n="sections.contact">联系方式</h2>
<p data-i18n="recruit.contact_desc">请将简历发送至以下邮箱</p>
<div style="font-size: 1.8rem; ...">
new-email@example.com <!-- 修改这里 -->
</div>
<p data-i18n="recruit.location">
新办公地址 <!-- 修改这里 -->
</p>
</div>同时更新页脚和所有页面的联系信息。
当前使用 Unsplash 占位图片。替换步骤:
- 将图片放到
assets/文件夹 - 修改 HTML 中的
src属性:
<!-- 替换前 -->
<img src="https://images.unsplash.com/photo-..." alt="...">
<!-- 替换后 -->
<img src="assets/team-photo.jpg" alt="团队照片">本网站可部署到任意静态托管服务:
# 1. 创建 gh-pages 分支
git checkout -b gh-pages
# 2. 推送到远程
git push origin gh-pages
# 3. 在 GitHub 仓库设置中启用 Pages,选择 gh-pages 分支访问地址:https://username.github.io/IntelligentBattery/
- 连接 Git 仓库
- 选择根目录
- 自动部署(无需配置)
直接上传所有文件到服务器的 Web 目录:
# 使用 scp 上传
scp -r ./* user@server:/var/www/html/
# 或使用 FTP 工具上传-
提交到搜索引擎
- Google Search Console
- 百度搜索资源平台
-
生成 sitemap.xml(可选)
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url><loc>https://intelligentbattery.com/</loc></url> <url><loc>https://intelligentbattery.com/team.html</loc></url> <url><loc>https://intelligentbattery.com/news.html</loc></url> <url><loc>https://intelligentbattery.com/recruit.html</loc></url> </urlset>
-
配置 robots.txt(可选)
User-agent: * Allow: / Sitemap: https://intelligentbattery.com/sitemap.xml
A: 清除浏览器缓存:
- Chrome/Edge:
Ctrl + Shift + R(Windows) 或Cmd + Shift + R(Mac) - 或使用无痕模式测试
A: 检查以下几点:
- 确保脚本加载顺序正确:
i18n.js必须在main.js之前 - 打开浏览器控制台(F12)查看是否有错误
- 确保文件路径正确(相对路径)
A:
- 确保在
<head>中有 viewport 标签:<meta name="viewport" content="width=device-width, initial-scale=1.0">
- 检查
@media (max-width: 768px)中的样式
A: 在 </head> 之前添加统计代码:
<head>
<!-- ... 其他标签 ... -->
<!-- Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
</head>A:
- 压缩图片:使用 TinyPNG、ImageOptim 等工具
- 压缩 CSS/JS:使用在线压缩工具
- 启用 gzip 压缩(服务器配置)
- 使用 CDN:将静态资源托管到 CDN
A: 修改每个 HTML 文件的 <head> 部分:
<head>
<title>新页面标题</title>
<meta name="description" content="新页面描述">
<meta name="keywords" content="关键词1, 关键词2">
</head>A:
- 在
js/main.js的DOMContentLoaded事件中添加新的事件监听器 - 保持代码风格一致
- 添加必要的无障碍支持(键盘导航、ARIA 标签)
示例:
// 在 main.js 中添加
document.addEventListener('DOMContentLoaded', () => {
// ... 现有代码 ...
// 新功能:平滑滚动到锚点
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({ behavior: 'smooth' });
}
});
});
});- 使用 4 空格缩进
- 标签和属性名小写
- 自闭合标签不需要
/ - 添加必要的
aria-标签以支持无障碍
- 使用 4 空格缩进
- 选择器使用小写
- 使用 CSS 变量而不是硬编码颜色
- 保持选择器简短高效
- 使用 4 空格缩进
- 使用 const/let,避免 var
- 函数命名使用 camelCase
- 添加必要的注释
推荐使用约定式提交:
git commit -m "feat: 添加新的招聘页面"
git commit -m "fix: 修复移动端导航问题"
git commit -m "style: 更新主题颜色"
git commit -m "docs: 更新开发者文档"
git commit -m "refactor: 重构导航栏代码"如有问题或建议,请通过以下方式联系:
- F12: 打开开发者工具
- Ctrl + Shift + C: 选择元素检查
- Ctrl + Shift + M: 切换设备模式(移动端调试)
- Elements 面板: 实时修改 HTML/CSS
- Console 面板: 查看 JavaScript 输出和错误
- Network 面板: 查看资源加载情况
- 颜色选择器: https://colorhunt.co / https://coolors.co
- 渐变生成器: https://cssgradient.io
- 占位图片: https://placeholder.com / https://source.unsplash.com
- CSS 压缩: https://cssminifier.com
- JS 压缩: https://javascript-minifier.com
- HTML 验证: https://validator.w3.org
文档版本: v1.0 最后更新: 2026-01-26 维护者: Intelligent Battery Project Team