简介:这是一份面向大学生静态网页设计期末作业的完整HTML+CSS项目,以星巴克咖啡为主题,适合网页设计初学者和需要快速完成课程作业的学生,无论用于期末展示还是学习练手都较为合适。压缩包共22个文件,包含1个HTML主页面、3个CSS样式表、15张PNG图片、2个ICO图标及1个MD说明文档,其中HTML负责页面结构,CSS负责整体风格与局部分区样式,图片与图标提供完整视觉素材,MD文档可用于查看项目说明。整个项目仅4.21MB,轻量易用,解压后即可在浏览器中直接运行展示。已有2560人学习下载,项目经过实际验证,被描述为“95分以上必过、下载即用、无需修改”,对零基础小白尤为友好。作品覆盖了导航栏、图文展示、页脚信息等静态网页常见板块,既可作为期末作业的参考模板,也可用于学习HTML/CSS的页面布局与样式编写。
1. 期末作业是静态网页,真正拉开分差的是结构规范
打开这个 zip 之前先想清楚:老师要的不是「一个好看的页面」,而是一份能讲出设计思路、能现场改参数、能扛住提问的 HTML+CSS 项目。静态网页设计期末作业最常见的三个扣分点,一是命名混乱(index2.html、新建文档.html满天飞),二是所有样式堆在一个文件里没法定位,三是交互全靠 JavaScript 但你还没学过。用 HTML+CSS 做星巴克风格网页正是把这三点全部避开的稳妥选题——品牌色明确、卡片结构重复度高、导航和商品区天然适合 Flex/Grid 布局,不需要任何框架和脚本就能做出「看起来像那么回事」的成品。这篇就按期末交付的标准,从标签结构到 CSS 拆文件,再到响应式和答辩技巧,把这条线完整走一遍。
2. HTML 骨架与文件组织:先把目录结构做成老师喜欢的样子
2.1 文件拆分:css 和 images 是期末作业的及格线
星巴克静态站通常包含首页、菜单页、门店页,但期末作业一份主页面加一个二级页面就够。常见做法是建一个干净的目录:
starbucks-homework/ ├── index.html ├── menu.html ├── css/ │ base.css /* 重置 + 公共变量 */ │ layout.css /* 导航、页头、页脚 */ │ index.css /* 首页专用模块 */ │ menu.css /* 菜单页专用模块 */ └── images/ banner.jpg coffee-01.jpg ...我一般会在作业说明文档里专门写一段「文件命名规范」,原因是css目录里如果只有一个style.css,课设答辩时老师问「菜单页和首页的样式怎么隔离」,你很难回答;拆成多个文件后,index.css只负责首页,menu.css只负责菜单页,互相不污染,这本身就是打分点。css脚本不一定叫style,更推荐叫base、layout、page这种按职责划分的命名,和js脚本放js文件夹一个道理——给维护留后路。
2.2<head>区必填的三个 meta 和一个 title
静态网页的头部是检索和兼容性的起点,也是很多同学容易抄错的地方。一个完整可用的星巴克静态页头部长这样:
<!doctype html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content="星巴克咖啡静态网页设计期末作业,展示HTML与CSS布局能力"> <meta name="keywords" content="星巴克,咖啡,HTML,期末作业,静态网页"> <title>星巴克咖啡 - 咖啡文化静态展示</title> <link rel="stylesheet" href="css/base.css"> <link rel="stylesheet" href="css/layout.css"> <link rel="stylesheet" href="css/index.css"> </head>逻辑说明:<!doctype html>声明文档类型,lang="zh-cn"告诉浏览器和检索系统这是中文页面;viewport是移动端适配的前提,没有它在@media里写断点全部失效;description和keywords不是必修,但期末作业里写了 meta name 描述可以展示你对 Web 标准的意识。链接多个css文件时注意顺序:先全局(base)、再结构(layout)、最后页面模块(index),这样 CSS 层叠时后面的选择器天然可以覆盖前面的同名属性。
2.3 正文区的语义化标签,替代满屏<div>
静态网页设计作业扣分最冤的一项,是整页只有<div>套<div>。HTML5 语义化标签在期末作业里属于成本极低、收益极高的一笔投入,结构上直接用:
<header class="site-header"><!-- 导航 --></header> <main> <section class="hero"><!-- 主视觉横幅 --></section> <section class="feature-cards"><!-- 三张推荐卡片 --></section> <section class="menu-list"><!-- 商品网格 --></section> <section class="story-text"><!-- 品牌故事 --></section> </main> <footer class="site-footer"><!-- 版权区 --></footer>参数说明:header、main、footer每个页面只能出现一次;section内部建议带一个h2标题,这样文档大纲是完整的。用语义化标签替换div之后,CSS 选择器并不会变复杂,.hero、.menu-list直接选类就行。如果老师要求必须演示「CSS 伪类选择器怎么用」,结构上给li加hover、给卡片加focus-within都是天然的挂载点。
3. CSS 层叠与选择器:星巴克绿从变量开始,优先级心里有数
3.1 用变量沉淀品牌色,hover交互别只用 color
星巴克绿若在整个站里出现十几次,写死#00704A的后果是换一个渐变场景就要全局查找替换。更合理的方式是在base.css里定义:root变量,把品牌色、文字色、边框色统一收口:
:root { --sb-green: #00704A; --sb-dark: #1E3932; --sb-light: #D4E9E2; --sb-cream: #F7F7F7; --text-main: #2A2A2A; --radius-card: 12px; --shadow-card: 0 4px 12px rgba(0,0,0,0.06); }css 变量的嵌套规则是子元素继承,所以.menu-card里想加深背景,直接写background: color-mix(in srgb, var(--sb-green) 15%, white);,不用重新取色值。这是CSS高版本特性,期末答辩现场演示浏览器正常渲染,本身就是亮点。hover事件在 CSS 里对应的是伪类,星巴克卡片常见的交互是把图片缩放和阴影加深绑在一起:
.menu-card img { transition: transform 0.35s ease, box-shadow 0.35s ease; } .menu-card:hover img { transform: scale(1.05); box-shadow: 0 8px 24px rgba(0, 112, 74, 0.25); }逻辑说明:transition写在基础状态而不是hover状态,表示进入和离开都平滑;transform: scale只触发合成层,不会引起整页重排,比修改width/height性能好得多;rgba的透明度让阴影更透气,这正是商品卡比按钮更像「品牌卡」的原因。若需要图片缩放时卡片文字不跟随,图片外套一层.card-media { overflow: hidden; border-radius: 12px 12px 0 0; }即可。
3.2 优先级与覆盖:ID、伪类和类选择器的实际权重关系
写期末作业时经常出现「我改了css为什么页面没变」,八成是选择器权重不够或来源冲突。CSS 优先级四条铁律:内联样式最高;!important只在临时调试用;ID 选择器权重高过类;后写的同权重规则覆盖先写的。
/* 权重对比示例 */ #discount-banner .price { color: var(--sb-green); } /* ID + 类 */ .coupon .price { color: var(--sb-dark) !important; } /* 不建议 */在星巴克作业里,优惠券模块可能用到「删除线」和「圆切」效果,常见的写法是把原价.price-old加text-decoration: line-through;,折扣标签用伪元素做圆弧切角。这里最容易踩的坑是:text-decoration: line-through在 Flex 容器里偶尔显示不全,原因是行盒高度被line-height压缩,给.price-old设line-height: 1.4就能复原。css 优惠券圆切常见做法是用clip-path切掉左右各 8px 的圆弧:
.coupon { --cut: 8px; clip-path: polygon(0 var(--cut), var(--cut) var(--cut), var(--cut) 0, calc(100% - var(--cut)) 0, calc(100% - var(--cut)) var(--cut), 100% var(--cut), 100% 100%, 0 100%); }参数说明:clip-path的百分比是相对元素自身宽高,配合calc能精确控制切角弧度半径;不用border-radius是因为它切不出「左右凹陷、上下平直」的票据感。注意clip-path会把hover的阴影box-shadow一并切掉,所以阴影要往内收敛,换filter: drop-shadow才能外溢。
3.3 两行省略、打点动画与文本样式细节
商品说明文案常有「两行截断」需求,直接写死高度不优雅,标准写三件套:
.card-desc { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; }这是css 两行超出省略号的通用方案,兼容 Chrome 和 Edge。行数想从 2 改成 3,只需要改-webkit-line-clamp: 3。要是想要文字加载时显示「加载中…」的打点动画,用@keyframes改content是无效的,正确写法是借助::after的steps动画做宽度状态机。静态期末作业里这个场景不多,但放在品牌故事区块的「了解更多」按钮上会显得很精致,可剪成一段小视频放答辩 PPT。
4. 布局实战:Flex 做导航、Grid 做菜单网格、媒体查询做响应式
4.1 导航栏:吸顶 + 品牌 logo 左对齐三行结构
星巴克首页导航的常见布局是logo 左、菜单居中、按钮右,用 Flex 一行写完,再给header加position: sticky吸顶:
.site-header { position: sticky; top: 0; z-index: 100; background: rgba(255,255,255,0.92); backdrop-filter: blur(8px); box-shadow: 0 2px 10px rgba(0,0,0,0.04); } .site-header .nav-inner { max-width: 1200px; margin: 0 auto; display: flex; align-items: center; justify-content: space-between; padding: 14px 24px; } .nav-links { display: flex; gap: 32px; list-style: none; } .nav-links a { text-decoration: none; color: var(--text-main); font-weight: 600; padding: 6px 0; border-bottom: 2px solid transparent; transition: border-color 0.25s; } .nav-links a:hover { border-color: var(--sb-green); color: var(--sb-green); }逻辑说明:position: sticky的生效条件是父容器高度大于自身,且top指定阈值,z-index保证它浮在 banner 之上。backdrop-filter: blur(8px)让背景半透明毛玻璃,滚动时文字穿过导航不会刺眼,这是热词里css 涟漪光圈扩散之外最出效果且容易解释的微交互之一。justify-content: space-between把 logo 和右侧按钮推到两端,nav-links使用gap而非margin,避免最后一个链接多出多余间距。
菜单页的导航可以和首页不同:如果menu.html想要高亮当前页,给当前链接加aria-current="page"属性,CSS 里用a[aria-current="page"] { color: var(--sb-green); },语义和样式一起解决。
4.2 首页 Hero:背景图固定 + 文字浮层
Hero 区块是整页第一个视觉冲击点,思路是背景图background-size: cover,内部放一个半透明遮罩 + 居中的文本:
<section class="hero"> <div class="hero-content"> <h1>每一杯咖啡,都是一段故事</h1> <p>从豆子到杯中的旅程,值得被认真对待。</p> <a class="btn btn-primary" href="menu.html">浏览菜单</a> </div> </section>.hero { min-height: 480px; background: linear-gradient(rgba(30, 57, 50, 0.55), rgba(30, 57, 50, 0.55)), url('../images/banner.jpg') center/cover no-repeat; display: flex; align-items: center; justify-content: center; text-align: center; color: #fff; } .btn-primary { display: inline-block; background: var(--sb-green); color: #fff; padding: 10px 28px; border-radius: 50px; text-decoration: none; transition: background 0.25s, transform 0.25s; } .btn-primary:hover { background: var(--sb-dark); transform: translateY(-2px); }参数说明:background缩写里前半段linear-gradient是遮罩层,后者是图片路径加定位,两者用逗号分隔;center/cover是background-position: center与background-size: cover的缩写。min-height而不是height,这样小屏文字换行时容器会自然变高,不会裁掉底部。按钮用border-radius: 50px做成胶囊,和星巴克 APP 的按钮气质一致,答辩时可以讲这是「圆角体系」。
4.3 商品卡片与菜单网格:用 Grid 排齐三列
菜单区有两种主流打法:一是grid-template-columns固定三列,二是repeat(auto-fill, minmax())自适应列数。期末作业建议用前一种,因为答辩时能清楚说出「页面宽度 768px 时切成两列」的断点意图:
.menu-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; max-width: 1200px; margin: 0 auto; padding: 40px 24px; } .menu-card { border-radius: var(--radius-card); background: #fff; box-shadow: var(--shadow-card); overflow: auto; padding: 16px; } .menu-card img { width: 100%; aspect-ratio: 1 / 1; object-fit: cover; border-radius: 10px; }参数说明:repeat(3, 1fr)表示三列均分剩余宽度;gap: 24px是行间距和列间距的合并写法;aspect-ratio: 1/1配合object-fit: cover让所有商品图严格正方形裁切,防止有的图片横构图有的竖构图导致卡片高度参差。object-fit是静态网页里最容易出彩的属性,搜索和答辩都能用「图片裁切不拉伸」一句话讲清。
每张卡片还可以在左上加一个「本季新品」标签,用绝对定位和伪类完成;标签的背景用之前提到的--sb-light浅绿色来形成对比,配合热词css伪类选择器的做法用::before写小圆点装饰。
4.4 响应式断点与「三行模式的 CSS 文件」布局观
响应式是期末作业的加分天花板,往index.css尾部挂@media查询:
@media (max-width: 900px) { .menu-grid { grid-template-columns: repeat(2, 1fr); } .hero { min-height: 360px; } } @media (max-width: 640px) { .menu-grid { grid-template-columns: 1fr; } .nav-links { display: none; } /* 简化处理:小屏隐藏导航链接 */ .hero h1 { font-size: 1.6rem; } }逻辑说明:移动优先在纯期末作业里不一定好用,因为大部分学生是「写完 PC 再补手机」,所以断点写成max-width更贴合实际流程。640px 档隐藏导航链接属于最快的降级方案,老师知道你没有学 JS 展开菜单,隐藏是可接受的;想加分可以在 640px 档把nav-links改position: fixed从顶部下拉,但那样涉及 z-index 与遮罩,超出 HTML+CSS 课设的舒适区。html 一键返回顶部算法在这里不适用,因为那是 JS 的活,但可以写一个空锚点让a href="#top"配合scroll-behavior: smooth实现纯 CSS 平滑回到顶部,这个方法在答辩时特别能讲:
html { scroll-behavior: smooth; } .back-top { position: fixed; right: 20px; bottom: 20px; width: 44px; height: 44px; background: var(--sb-green); color: #fff; border-radius: 50%; text-align: center; line-height: 44px; text-decoration: none; }CSS 的scroll-behavior: smooth放在html上,所有锚点跳转自动平滑,等于用一个属性替代了一版 JS 脚本;back-top是固定定位的悬浮按钮,指向index.html#top或直接href="#"即可。
4.5 鼠标移入事件感与背景装饰的替代实现
热词里反复出现的css 鼠标移入事件在纯 CSS 下其实就是:hover的扩展组合,但高级一点的写法是配合transition延迟触发兄弟元素:
.story-card { position: relative; overflow: hidden; } .story-card .story-detail { opacity: 0; transform: translateY(10px); transition: opacity 0.3s, transform 0.3s; } .story-card:hover .story-detail { opacity: 1; transform: translateY(0); }这个样式的价值在于:.story-detail默认透明并下移 10px,悬停时出现并复位,形成文字浮现效果。和上一节的图片缩放配合,整个页面交互层级就非常丰富:导航下划线、按钮上浮、图片放大、文字浮入——全部只用 CSS,不写一行 JS 脚本。
5. 完整页面拼装:从<!doctype html>到页脚的一体化收尾
5.1 页脚制作:三栏信息 + 版权符号
页脚是期末作业里被轻视但老师一定会看的部分。用 Flex 三栏加一条hr-style分割线,既规整又有内容:
<footer class="site-footer"> <div class="footer-inner"> <div class="footer-col"> <h3>关于星巴克</h3> <p>本页面为大学生静态网页设计期末作业,使用 HTML 与 CSS 制作。</p> </div> <div class="footer-col"> <h3>快速链接</h3> <ul> <li><a href="index.html">首页</a></li> <li><a href="menu.html">咖啡菜单</a></li> </ul> </div> <div class="footer-col"> <h3>联系与版权</h3> <p>本站仅用于课程设计展示 © 2024</p> </div> </div> </footer>.site-footer { background: var(--sb-dark); color: rgba(255,255,255,0.85); padding: 40px 0; margin-top: 60px; } .footer-inner { max-width: 1200px; margin: 0 auto; display: flex; gap: 48px; padding: 0 24px; } .footer-col { flex: 1; } .footer-col ul { list-style: none; padding: 0; } .footer-col a { color: var(--sb-light); text-decoration: none; } .footer-col a:hover { text-decoration: underline; }逻辑说明:margin-top: 60px保证页脚和主体内容区有隔离,避免内容贴边;flex: 1让三栏等宽,这是 Flex 布局里最常用的比例分配;site-footer的背景用--sb-dark深咖啡色,和绿色--sb-green形成品牌双色体系。版权符号©是 HTML 实体,不需要从输入法复制特殊字符。
5.2 整页验证与格式自查清单
写完后不要急着交 zip,按这几条过一遍:
1. 用浏览器打开 index.html,Ctrl+U 查看源代码,确认 <!doctype html> 在最顶部 2. 缩放到 75% 和 125% 各看一次,确认没有横向滚动条 3. 用 Chrome 开发者工具 F12 → 设备工具栏,切换 375px 宽度,看媒体查询是否生效 4. 检查所有图片路径:相对路径以 . 或 .. 开头,不能用 C:\ 或 file:/// 5. 确认 css 目录下每个文件都被正确引用,没有多余的空文件 6. 用 W3C 校验工具跑一遍 HTML,重点看标签闭合如果第 3 步断点没生效,八成是<meta name="viewport">没写;如果图片显示裂图,把background: url('../images/xxx.jpg')里的路径改成相对当前 css 文件的路径而不是相对 html 的路径,这是css和img标签在路径语义上最常见的差异。html 文件无法预览的问题通常出在把html文件直接双击打开但 css 路径带了href=/css/...这种根路径写法,改为相对路径href=css/xxx.css就能解决。
5.3 打包 zip 前的三步压缩检查
期末作业最终是以zip交付,包里的内容同样影响印象分。压缩前做三个动作:截图首页和菜单页的铺满界面效果放在screenshots/目录、把README.txt写清学号姓名和浏览器兼容说明、删除临时文件。收口命令没有标准答案,但在 Windows 资源管理器里直接「发送到压缩文件夹」即可;macOS 用户用系统右键压缩。重点是压完之后重新解压到另一个目录再打开一次index.html,防止压缩时目录层级多套了一层导致图片全部失效。
6. 答辩自检技巧:三件套让期末作业从「做完」到「讲清」
最后一个环节通常比写代码更拉分,把以下三个问题背熟,任何老师问「你这里是怎么做的」都能答上。
第一个问题必问「为什么用 Flex 而不是浮动」。把浮动float的经典缺陷讲出来:清除浮动需要clearfix,且float无法实现垂直居中。举代码佐证:.nav-links { display: flex; justify-content: flex-end; align-items: center; }——在菜单页右侧加按钮时,Flex 不需要调整 HTML 顺序就能改变排列方向,这在浮动布局里做不到。
第二个常问的是「你的 CSS 文件为什么拆成三份」。这是聊文件组织的好机会,直接说三点:base.css放色板变量和重置;layout.css放导航、页脚和栅格骨架;index.css放首页模块。再说「品牌颜色只要改:root里一个变量整个网站都会更新」,这句一出,变量那章的分就到手了。
第三个问题是「你项目里有伪类吗,是怎么用的」。先用:hover回答基础,再举:focus-visible讲可访问性,最后可以加一个一行代码的可访问性增强:
:focus-visible { outline: 2px solid var(--sb-green); outline-offset: 2px; }这段代码放在base.css末尾,能让键盘 Tab 聚焦时有绿色外圈,是多数学生没做但很容易示范的细节。以上三问全部答完,积极性和技术深度都到了,剩下的就是等成绩。
本文还有配套的精品资源,点击获取