简介:这是一套面向大学生网页设计课程与期末大作业的静态网站模板合集,涵盖个人主页、个人博客等常见题材,适合刚接触前端、需要快速完成HTML作业的初学者参考与二次修改。压缩包共4261个文件,约142.4MB,其中html页面243个、css样式411个、js脚本481个,另有jpg、png、gif等图片素材及woff、ttf字体文件,并包含scss、less预编译源码与少量docx说明文档,整体采用div+css框架编写,结构规整、便于拆解学习。目前已有22943人学习下载,资源经过较多同学验证。使用者可直接挑选合适模板替换文字与图片,也能借此熟悉页面布局、样式组织与交互脚本的写法,理解导航、轮播、表单等常见模块的实现思路,从而高效完成课程作业并积累前端基础经验。
1. 从一份“能直接交作业”的静态网页说起:个人博客模板到底长什么样
如果你正在搜“网页制作 网页模板 个人网页设计 个人网页制作 期末大作业”,大概率不是想从零学 HTML,而是想找一份结构清楚、能跑起来、还能改出自己名字的静态个人网页作品。这份资源就是干这个的:一套纯静态 HTML 个人博客模板,打开index.html就能看到完整页面,不需要装 Node、不需要配数据库,浏览器双击就能预览。它适合两类人:一类是刚学完 HTML+CSS、需要一份完整作品交期末大作业的大学生;另一类是想快速搭个人主页、又不想被框架绑架的开发者。我拿到这份模板的第一反应是——它把“个人博客”拆成了首页、关于我、文章列表、文章详情四个页面,每个页面都是独立 HTML,改起来不用怕牵一发动全身。
2. 项目结构与技术选型:为什么它敢叫“简单静态HTML个人网页作品”
2.1 目录结构:一眼看清每个文件该放什么
拿到源码包后,我习惯先tree一下(Windows 下用dir /s /b),这份模板的目录层级非常浅,没有嵌套三层的assets再分css/js/img的复杂结构,而是把静态资源平铺在根目录下,对新手极其友好。常见做法是:
personal-blog/ ├── index.html # 首页:个人简介 + 最新文章卡片 ├── about.html # 关于我:技能栈、经历时间线 ├── blog.html # 文章列表页:所有文章摘要 ├── post.html # 文章详情页:单篇正文 ├── css/ │ ├── style.css # 全站主样式 │ └── responsive.css # 移动端断点样式 ├── js/ │ └── main.js # 导航高亮、返回顶部、简单交互 └── images/ ├── avatar.jpg # 头像 └── banner.jpg # 首页横幅这个结构的好处是:你交作业时老师问“CSS 在哪”,你直接指css/style.css;你想换头像,只动images/avatar.jpg一个文件。我一般会建议在根目录再加一个README.md,写清楚每个页面改哪一行,但这份模板本身没带,属于可以自己补的加分项。
2.2 技术选型:没有构建工具,反而成了优势
这份模板没有用 Vue、React,也没有用 Bootstrap 或 Tailwind,而是手写 CSS + 原生 JavaScript。为什么这样选?因为“期末大作业”场景下,老师往往要求你讲清楚每一行代码的作用,引入框架反而说不清。原生 JS 只做了三件事:导航栏当前页高亮、点击返回顶部、移动端菜单展开。代码量很小,但足够让页面“活”起来。
// js/main.js // 1. 导航高亮:根据当前 URL 判断哪个菜单项加 active 类 const currentPage = window.location.pathname.split('/').pop() || 'index.html'; document.querySelectorAll('.nav-link').forEach(link => { if (link.getAttribute('href') === currentPage) { link.classList.add('active'); // 给当前页菜单加高亮样式 } }); // 2. 返回顶部:监听滚动,超过 300px 显示按钮 const backToTop = document.getElementById('backToTop'); window.addEventListener('scroll', () => { backToTop.style.display = window.scrollY > 300 ? 'block' : 'none'; }); backToTop.addEventListener('click', () => { window.scrollTo({ top: 0, behavior: 'smooth' }); // 平滑滚动 });逻辑说明:第一段用window.location.pathname拿到当前文件名,和导航链接的href比对,匹配就加active类,这样切页面时菜单高亮不会错。第二段监听scroll事件,滚动超过 300 像素才显示返回顶部按钮,点击后调用scrollTo平滑回顶。参数怎么改:300这个阈值可以按你页面长度调整,页面长就改大,页面短就改小;behavior: 'smooth'如果浏览器兼容性要求高,可以换成'auto'。
2.3 页面布局:用 Flexbox 还是 Grid?
模板里首页的文章卡片列表用的是 CSS Grid,因为卡片需要等宽排列、自动换行;导航栏和页脚用的是 Flexbox,因为需要水平分布、垂直居中。这是很标准的选型:Grid 管二维布局,Flexbox 管一维布局。如果你要改卡片列数,找到style.css里的.post-grid:
/* css/style.css */ .post-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); /* 自动填充,最小280px */ gap: 24px; /* 卡片间距 */ }auto-fill表示尽可能多地放列,minmax(280px, 1fr)表示每列最小 280 像素、最大占满剩余空间。你把280px改成320px,卡片就会变大、列数变少;改成240px,列数变多。gap控制间距,改大改小都直观。这个写法比写死grid-template-columns: repeat(3, 1fr)更灵活,因为它在小屏幕上会自动变成一列,不用额外写媒体查询。
3. 本地跑起来与页面改造:从“能看”到“像自己的作品”
3.1 三种运行方式:双击、Live Server、本地服务器
这份模板是纯静态的,运行方式极其简单。第一种,直接双击index.html,浏览器会以file://协议打开,所有页面都能看,但如果你以后想加fetch请求加载文章数据,file://协议会被浏览器拦截,这是常见坑。第二种,用 VS Code 装 Live Server 插件,右键index.html选“Open with Live Server”,它会起一个本地服务器并支持热更新,改完 CSS 保存浏览器自动刷新,写作业效率最高。第三种,如果你装了 Python,在项目根目录执行:
# Python 3 自带 http.server,端口 8000 python -m http.server 8000然后浏览器访问http://localhost:8000。这种方式最接近真实部署环境,也方便你后面用手机连同一 WiFi 预览移动端效果。我一般会推荐 Live Server,因为它零配置,但如果你要模拟线上路径,用 Python 起服务更稳。
3.2 改内容:把“张三”换成你的名字,把示例文章换成你的文章
模板里的文字都是占位内容,改起来就是全局搜索替换。以index.html为例,首页横幅区域通常长这样:
<!-- index.html 首页横幅 --> <section class="banner"> <img src="images/banner.jpg" alt="首页横幅" class="banner-img"> <div class="banner-text"> <h1>你好,我是张三</h1> <p>一名热爱前端开发的大学生</p> <a href="about.html" class="btn">了解更多</a> </div> </section>你要改的就是<h1>里的名字、<p>里的简介、<a>的跳转目标。注意alt属性别删,它是图片加载失败时的替代文字,也是无障碍访问的基本要求。文章列表页blog.html里每个卡片对应一篇文章,复制一个<article>块就能新增一篇,改href指向新的详情页,或者统一指向post.html再用 JavaScript 根据 URL 参数加载不同内容——但那是进阶做法,交作业阶段直接复制post.html改名更省事。
3.3 改样式:换配色、换字体、换圆角
模板的配色变量通常写在style.css顶部,用 CSS 自定义属性管理:
/* css/style.css 顶部变量 */ :root { --primary-color: #2c3e50; /* 主色:深蓝灰 */ --accent-color: #3498db; /* 强调色:亮蓝 */ --text-color: #333; /* 正文颜色 */ --bg-color: #f9f9f9; /* 背景色 */ --border-radius: 8px; /* 全局圆角 */ }改配色只动这几个值,全站生效。比如把--accent-color改成#e74c3c,按钮和链接高亮就变红色;把--border-radius改成0,所有卡片和按钮变直角。字体在body里设置:
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; color: var(--text-color); background-color: var(--bg-color); }这个字体栈优先用系统字体,加载快、不依赖外部字体文件。如果你想用中文字体,可以在前面加"Microsoft YaHei", "PingFang SC",但注意不同系统渲染效果有差异,交作业前最好在教室电脑上预览一遍。
4. 避坑与常见问题:我踩过的五个坑,你别再踩
4.1 图片路径大小写不一致,本地能看线上 404
现象:本地 Windows 双击打开正常,传到服务器或 GitHub Pages 后图片全裂。原因:Windows 文件系统不区分大小写,Linux 服务器区分。你写images/Avatar.jpg,实际文件是avatar.jpg,本地能找到,线上就 404。解决:统一用小写字母命名所有文件和文件夹,引用时严格一致。我一般会在改完路径后,用 VS Code 的“查找所有引用”再核对一遍。
4.2 中文乱码:忘了写<meta charset="UTF-8">
现象:页面中文显示成“锟斤拷”或问号。原因:HTML 文件保存编码和浏览器解析编码不一致。解决:每个 HTML 文件的<head>第一行必须写<meta charset="UTF-8">,并且用 VS Code 保存时确认右下角编码是 UTF-8 而不是 GBK。如果已经乱码,用 VS Code 重新以 UTF-8 保存即可,但记得先备份。
4.3 移动端没反应:少了 viewport meta 标签
现象:手机上打开页面,字小得看不清,要双指放大。原因:没有告诉浏览器按设备宽度渲染。解决:在<head>里加<meta name="viewport" content="width=device-width, initial-scale=1.0">。这行代码是移动端适配的前提,加了之后responsive.css里的媒体查询才会按预期生效。检查方法:浏览器 F12 切到手机模式,看页面是否自动缩放。
4.4 导航高亮失效:href写成了绝对路径
现象:点击菜单切换页面后,当前页没有高亮。原因:main.js里用window.location.pathname.split('/').pop()取文件名,如果你href写的是/about.html或https://xxx/about.html,取出来的可能不是about.html。解决:导航链接统一用相对路径about.html,不要以/开头。如果你必须用绝对路径,就改 JS 逻辑,用endsWith匹配。
4.5 交作业前发现控制台报错:某个 JS 文件 404
现象:F12 控制台红色报错GET file:///.../js/main.js net::ERR_FILE_NOT_FOUND。原因:<script src="js/main.js">的路径写错,或者文件被误删。解决:检查js文件夹是否存在、文件名是否拼错。如果暂时不需要 JS 交互,可以先注释掉<script>标签,但导航高亮和返回顶部会失效。我一般会在交作业前把控制台清空,确保没有红色报错再打包。
5. 二次开发与改造思路:让模板真正变成你的作品
5.1 把静态文章改成 JSON 驱动,方便批量管理
模板原本每篇文章都是一个独立 HTML,改十篇就要开十个文件。如果你想让作业看起来更“工程化”,可以把文章数据抽成posts.json,用fetch加载后动态渲染列表。常见做法是:
// js/blog.js 动态加载文章列表 fetch('data/posts.json') .then(res => res.json()) .then(posts => { const grid = document.querySelector('.post-grid'); posts.forEach(post => { const card = document.createElement('article'); card.className = 'post-card'; card.innerHTML = ` <h3>${post.title}</h3> <p>${post.summary}</p> <a href="post.html?id=${post.id}">阅读全文</a> `; grid.appendChild(card); }); }) .catch(err => console.error('文章加载失败:', err));逻辑说明:fetch请求data/posts.json,拿到数组后遍历,为每篇文章创建卡片并插入.post-grid。参数说明:post.id用于详情页通过 URL 参数读取对应文章,post.title和post.summary对应 JSON 里的字段。注意:这种方式必须用本地服务器打开(Live Server 或python -m http.server),双击file://会被 CORS 拦截。改造后,你新增文章只需改 JSON,不用复制 HTML,作业答辩时也更好讲。
5.2 加一个暗色模式切换,成本低但效果明显
暗色模式是这两年个人主页的常见需求,实现起来不难。在style.css里定义暗色变量,用body.dark覆盖:
body.dark { --bg-color: #1a1a1a; --text-color: #e0e0e0; --primary-color: #ecf0f1; }然后在页面右上角加一个按钮,JS 里切换body的dark类,并用localStorage记住用户选择:
const toggle = document.getElementById('themeToggle'); if (localStorage.getItem('theme') === 'dark') { document.body.classList.add('dark'); } toggle.addEventListener('click', () => { document.body.classList.toggle('dark'); localStorage.setItem('theme', document.body.classList.contains('dark') ? 'dark' : 'light'); });这样刷新页面后主题不会丢。注意:暗色模式下图片如果太亮会刺眼,可以给img加filter: brightness(0.8),但头像一般不加,自己权衡。
5.3 部署上线:GitHub Pages 或任意静态托管
静态模板部署最简单的方式是 GitHub Pages:新建仓库,把文件推上去,在 Settings 里开启 Pages,选main分支根目录,几分钟后就能通过https://你的用户名.github.io/仓库名/访问。如果你不想用 GitHub,国内也有静态托管服务,上传文件即可。部署前记得把index.html里的示例链接换成自己的,把images里的占位图换成真实图片。我一般会在部署后手机、平板、电脑各开一遍,确认响应式断点没翻车。
5.4 一个我常犯的错误:改完 CSS 忘了清缓存
有次我改完style.css部署上去,浏览器死活不更新,我以为代码写错了,排查半小时才发现是浏览器缓存了旧 CSS。从那以后我每次改样式都强制走一遍Ctrl+F5硬刷新,或者在style.css引用后面加版本号style.css?v=2。这个习惯帮我省了很多“玄学”调试时间。希望这份模板能帮你顺利跑起来,改出属于自己的个人网页作品。
本文还有配套的精品资源,点击获取