奶茶店网页(纯HTML和CSS)

一、项目介绍 & 核心亮点

很多刚入门前端的小伙伴,学完 HTML 标签和 CSS 基础语法后,总会遇到一个核心痛点:语法都看懂了,但不知道怎么写出一个完整的、可落地的页面,找不到适配新手的练手项目 ------ 要么需要复杂的 JavaScript 逻辑,要么结构混乱不符合规范,要么依赖本地素材,复制代码也跑不起来。

今天就给大家带来一个零门槛、纯 HTML+CSS、无 JavaScript、复制就能运行的奶茶店静态网页项目,全程保姆级讲解,代码带完整注释,非常适合新手拿来练手,写完就能直接放进简历的前端作品集里!

项目核心亮点

  1. 纯 HTML+CSS 实现,零 JS 代码,新手完全能看懂、能修改
  2. 全语义化标签编写,结构清晰,符合前端开发规范
  3. 完整的企业级页面结构:固定导航栏、全屏 Banner 宣传区、产品卡片列表、页脚信息区,覆盖官网核心模块
  4. 所有图片使用在线占位图,无需下载本地素材,彻底解决新手图片路径报错问题
  5. 自带流畅的 hover 交互效果,兼顾美观性和实用性
  6. 代码逐行带注释,可直接修改复用,适配甜品店、咖啡店、小店官网等多种场景

二、最终效果预览

最终实现的页面分为 4 个核心模块,打开浏览器即可看到完整效果:

  1. 顶部固定导航栏:带店铺 logo 和导航菜单,滚动时固定在页面顶部,hover 有颜色变化
  2. 全屏 Banner 区:带背景遮罩的宣传图,居中的宣传文案和下单按钮,适配不同屏幕宽度
  3. 热门产品区:卡片式布局的产品列表,带产品图、名称、介绍和价格,hover 时有上浮动画
  4. 底部信息区:深色背景的页脚,带店铺版权、地址和营业时间信息

三、前置知识 & 开发环境

前置知识要求(零压力门槛)

  • 了解 HTML 基础结构和常用标签的用法
  • 掌握 CSS 基础样式、盒模型的核心概念
  • 了解 Flex 布局的基础用法(完全不懂也没关系,代码里有详细讲解)

开发环境

  • 代码编辑器:推荐 VSCode(免费轻量,新手友好)
  • 浏览器:Chrome/Edge 等主流浏览器均可
  • 无需安装任何环境、无需配置后端,纯静态文件即可运行

四、核心知识点梳理

跟着这个项目敲完,你就能彻底掌握这些前端入门核心知识点,告别 "只会背语法,不会写页面" 的困境:

  1. HTML 语义化标签的场景化使用(header/section/footer等)
  2. CSS 全局默认样式重置,统一页面渲染效果
  3. Flex 弹性布局,实现水平垂直居中、列表自适应排版
  4. 固定定位、相对定位、绝对定位的组合使用
  5. CSS 伪元素、伪类的实战用法(::before/:hover
  6. 卡片布局、圆角、阴影、过渡动画的实现
  7. 网页整体结构的拆分与模块化开发思维

五、分步代码详解

我们先把页面拆分成「HTML 结构搭建」和「CSS 样式编写」两部分,逐模块讲解,让你不仅会抄代码,更懂每一行代码的作用。

5.1 HTML 结构搭建

HTML 是网页的骨架,我们用语义化标签,把页面拆分成 4 个独立模块,结构清晰,后期修改维护也很方便。

第一步:HTML 基础骨架

先写好网页的基础结构,引入 CSS 文件,设置好视口适配,这是所有网页的通用基础:

html 复制代码
<!DOCTYPE html>
<!-- 声明文档类型为HTML5 -->
<html lang="zh-CN">
<!-- 网页根标签,设置语言为中文 -->
<head>
  <!-- 头部配置区,不显示在页面上 -->
  <meta charset="UTF-8">
  <!-- 设置字符编码为UTF-8,避免中文乱码 -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!-- 视口设置,适配移动端屏幕 -->
  <title>温柔奶茶店</title>
  <!-- 网页标题,显示在浏览器标签栏 -->
  <link rel="stylesheet" href="style.css">
  <!-- 引入外部CSS样式文件,和html文件放在同一文件夹下 -->
</head>
<body>
  <!-- 网页主体内容,所有可见内容都写在这里 -->

  <!-- 后续模块代码都写在body标签内 -->

</body>
</html>

第二步:顶部导航栏模块

用语义化header标签包裹导航栏,分为左侧 logo 和右侧导航菜单两部分,结构如下:

html 复制代码
<!-- 顶部导航栏 -->
<header class="header">
  <div class="nav">
    <!-- 店铺logo -->
    <div class="logo">温柔奶茶店</div>
    <!-- 导航菜单 -->
    <ul class="menu">
      <li>首页</li>
      <li>产品</li>
      <li>门店</li>
      <li>关于我们</li>
    </ul>
  </div>
</header>

第三步:Banner 宣传区模块

section标签包裹,分为背景图、遮罩层、宣传文案和按钮,是页面的视觉焦点:

html 复制代码
<!-- Banner宣传区 -->
<section class="banner">
  <!-- 独立插入图片 -->
  <img src="images/banner.png" alt="饮品banner" class="banner-img">
  <div class="banner-text">
    <h1>每一杯,都是温柔</h1>
    <p>新鲜食材 · 现点现做 · 暖心上线</p>
    <button class="btn">立即下单</button>
  </div>
</section>

第四步:产品展示区模块

section标签包裹,分为标题和产品列表,每个产品用独立的card卡片结构,方便后期新增 / 修改产品:

html 复制代码
<!-- 产品展示区 -->
<section class="product">
  <!-- 区域标题 -->
  <div class="title">
    <h2>热门产品</h2>
  </div>

  <!-- 产品列表 -->
  <div class="product-list">
    <!-- 产品卡片1 -->
    <div class="card">
      <img src="images/goods1.png" alt="招牌珍珠奶茶">
      <h3>招牌珍珠奶茶</h3>
      <p>Q弹珍珠 + 浓郁奶香</p>
      <span class="price">¥12</span>
    </div>

    <!-- 产品卡片2 -->
    <div class="card">
      <img src="images/goods2.png" alt="芋泥波波奶">
      <h3>芋泥波波奶</h3>
      <p>手工芋泥 + 软糯波波</p>
      <span class="price">¥14</span>
    </div>

    <!-- 产品卡片3 -->
    <div class="card">
      <img src="images/goods3.png" alt="四季春茶">
      <h3>四季春茶</h3>
      <p>清爽解腻 · 四季皆宜</p>
      <span class="price">¥9</span>
    </div>
  </div>
</section>

第五步:页脚信息模块

用语义化footer标签包裹,存放店铺的版权、地址、营业时间等信息,是网页的收尾部分:

html 复制代码
<!-- 底部页脚 -->
<footer class="footer">
  <p>温柔奶茶店 © 2026 版权所有</p>
  <p>地址:XX市XX路XX号 | 营业时间:10:00-22:00</p>
</footer>

5.2 CSS 样式编写

CSS 是网页的皮肤,我们对应 HTML 的 5 个模块,逐部分编写样式,同时解决新手最容易踩的样式兼容、布局错乱问题。

第一步:全局样式重置

不同浏览器有默认的样式,我们先统一清除,避免页面出现莫名的边距、样式错乱:

css 复制代码
/* 全局默认样式清除 */
* {
  margin: 0; /* 清除所有标签的默认外边距 */
  padding: 0; /* 清除所有标签的默认内边距 */
  box-sizing: border-box; /* 盒模型设置:内边距和边框不会撑大盒子宽度,新手必加 */
}

/* 全局body样式 */
body {
  font-family: "Microsoft YaHei", sans-serif; /* 统一页面字体 */
  background-color: #fff9f9; /* 页面背景色,温柔的浅粉色,适配奶茶店风格 */
  color: #333; /* 全局默认文字颜色 */
}

/* 清除列表默认样式 */
ul {
  list-style: none;
}

/* 统一图片样式 */
img {
  width: 100%; /* 图片宽度和父盒子一致 */
  display: block; /* 清除图片底部默认的空白间隙 */
}

第二步:导航栏样式

实现导航栏固定顶部、左右布局、hover 交互效果,新手可以直接修改颜色和高度:

css 复制代码
/* 导航栏外层容器 */
.header {
  background-color: #fff; /* 导航栏白色背景 */
  box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* 底部阴影,增加层次感 */
  position: sticky; /* 粘性定位:滚动时固定在页面顶部 */
  top: 0; /* 固定在顶部0px的位置 */
  z-index: 99; /* 提高层级,确保导航栏不会被其他内容覆盖 */
}

/* 导航栏内层容器,控制宽度和居中 */
.nav {
  width: 90%; /* 宽度占页面90%,左右留白 */
  margin: 0 auto; /* 水平居中 */
  display: flex; /* Flex布局,实现左右对齐 */
  justify-content: space-between; /* 左右两端对齐 */
  align-items: center; /* 垂直居中 */
  height: 70px; /* 导航栏高度 */
}

/* logo样式 */
.logo {
  font-size: 22px;
  font-weight: bold;
  color: #ff7d94; /* 品牌主色,温柔的粉色 */
}

/* 导航菜单样式 */
.menu {
  display: flex; /* 菜单横向排列 */
  gap: 30px; /* 菜单项之间的间距 */
  font-size: 16px;
  cursor: pointer; /* 鼠标悬浮时显示手型 */
}

/* 菜单项hover效果 */
.menu li:hover {
  color: #ff7d94; /* 悬浮时变成品牌主色 */
  transition: color 0.3s; /* 颜色变化加过渡动画,更流畅 */
}

第三步:Banner 区域样式

实现全屏背景图、遮罩层、文字垂直水平居中,新手可以直接替换背景图链接:

css 复制代码
/* Banner外层容器 */
.banner {
  height: 400px; /* Banner高度 */
  display: flex; /* Flex布局,实现内容居中 */
  align-items: center; /* 垂直居中 */
  justify-content: center; /* 水平居中 */
  text-align: center; /* 文字居中 */
  color: white; /* 文字白色 */
  position: relative; /* 相对定位,作为伪元素的父级 */
  overflow: hidden; /* 隐藏图片溢出部分 */
}

/* 独立图片样式 */
.banner-img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover; /* 图片不变形、铺满容器 */
  object-position: center; /* 图片居中 */
  z-index: 0; /* 置于底层 */
}

/* 背景遮罩层,让文字更清晰 */
.banner::before {
  content: ""; /* 伪元素必须加content属性 */
  position: absolute; /* 绝对定位,覆盖整个Banner */
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0,0,0,0.3); /* 黑色半透明遮罩,透明度0.3 */
  z-index: 1;
}

/* Banner文字容器 */
.banner-text {
  position: relative; /* 相对定位,提高层级,显示在遮罩层上方 */
  z-index: 2;
}

/* 标题样式 */
.banner-text h1 {
  font-size: 40px;
  margin-bottom: 10px;
}

/* 副标题样式 */
.banner-text p {
  font-size: 18px;
  margin-bottom: 20px;
}

/* 按钮样式 */
.btn {
  padding: 10px 25px; /* 内边距,控制按钮大小 */
  background-color: #ff7d94; /* 按钮背景色,品牌主色 */
  border: none; /* 清除默认边框 */
  border-radius: 30px; /* 圆角,做成胶囊形状 */
  color: white; /* 按钮文字白色 */
  font-size: 16px;
  cursor: pointer; /* 鼠标悬浮手型 */
  transition: background-color 0.3s; /* 背景色变化过渡动画 */
}

/* 按钮hover效果 */
.btn:hover {
  background-color: #ff5c7c; /* 悬浮时颜色加深,增加交互感 */
}

第四步:产品区域样式

实现卡片自适应布局、标题下划线、卡片 hover 上浮动画,新手可以直接复制卡片新增产品:

css 复制代码
/* 产品区域外层容器 */
.product {
  width: 90%; /* 宽度和导航栏统一 */
  margin: 60px auto; /* 上下外边距60px,水平居中 */
}

/* 区域标题容器 */
.title {
  text-align: center; /* 标题居中 */
  margin-bottom: 40px; /* 标题和产品列表的间距 */
}

/* 标题样式 */
.title h2 {
  font-size: 28px;
  color: #444;
  position: relative; /* 相对定位,作为下划线伪元素的父级 */
  display: inline-block; /* 宽度和文字一致,方便下划线居中 */
}

/* 标题下划线,用伪元素实现 */
.title h2::after {
  content: "";
  width: 60%; /* 下划线宽度为文字的60% */
  height: 3px; /* 下划线高度 */
  background-color: #ff7d94; /* 下划线颜色,品牌主色 */
  position: absolute;
  bottom: -8px; /* 下划线在文字下方8px */
  left: 20%; /* 左右各留20%,实现居中 */
  border-radius: 3px; /* 下划线圆角 */
}

/* 产品列表容器 */
.product-list {
  display: flex; /* Flex布局,实现卡片横向排列 */
  flex-wrap: wrap; /* 超出屏幕宽度自动换行,适配不同屏幕 */
  gap: 20px; /* 卡片之间的间距 */
  justify-content: center; /* 卡片水平居中 */
}

/* 产品卡片样式 */
.card {
  width: 280px; /* 卡片固定宽度 */
  background-color: white; /* 卡片白色背景 */
  border-radius: 12px; /* 卡片圆角 */
  overflow: hidden; /* 隐藏超出圆角的内容 */
  box-shadow: 0 3px 10px rgba(0,0,0,0.08); /* 卡片阴影,增加立体感 */
  transition: transform 0.3s; /* 上浮动画过渡 */
}

/* 卡片hover效果 */
.card:hover {
  transform: translateY(-5px); /* 悬浮时向上移动5px,实现上浮效果 */
}

/* 卡片内图片样式 */
.card img {
  height: 180px; /* 图片固定高度 */
  object-fit: cover; /* 图片覆盖容器,不变形 */
}

/* 产品名称样式 */
.card h3 {
  font-size: 18px;
  padding: 10px 15px 5px; /* 内边距,上下左右留白 */
}

/* 产品介绍样式 */
.card p {
  font-size: 14px;
  color: #666; /* 次要文字用浅灰色,降低视觉权重 */
  padding: 0 15px 10px;
}

/* 产品价格样式 */
.price {
  display: inline-block;
  padding: 5px 15px 15px;
  color: #ff7d94; /* 价格用品牌主色,突出显示 */
  font-weight: bold;
  font-size: 16px;
}

第五步:页脚样式

实现深色背景的页脚,文字居中,和页面主体形成视觉区分:

css 复制代码
/* 页脚外层容器 */
.footer {
  background-color: #333; /* 深色背景,和页面主体区分 */
  color: white; /* 文字白色 */
  text-align: center; /* 文字居中 */
  padding: 30px 0; /* 上下内边距 */
  margin-top: 40px; /* 和产品区域的间距 */
}

/* 页脚文字样式 */
.footer p {
  margin-bottom: 8px; /* 两行文字之间的间距 */
  font-size: 14px;
}

六、完整可运行代码

代码在02里

https://github.com/SG-3604/web-learning-pages.git

相关推荐
kyriewen2 小时前
你还在给每个图片父元素加类名?CSS :has() 让选择器“逆天改命”
前端·css·面试
漫天黄叶远飞2 小时前
async/await 到底怎么工作的?
前端
ai_xiaogui2 小时前
PanelAI前端全面升级!私有化部署AI面板控制台+生态市场一键管理详解
前端·人工智能·comfyui一键部署·生态市场算力共享·ai面板控制台·panelai私有化部署·大模型前端管理
Jelena157795857922 小时前
1688.item_get_app接口:包装尺寸重量信息深度解析
开发语言·前端·python
酉鬼女又兒2 小时前
零基础快速入门前端DOM核心知识点详解与蓝桥杯Web赛道备考指南(可用于备赛蓝桥杯Web应用开发)
前端·职场和发展·蓝桥杯
daols882 小时前
vue甘特图vxe-gantt实现点击任务条弹出编辑表单
前端·vue.js·甘特图·vxe-gantt
Fairy要carry2 小时前
项目05-手搓Agent之任务通信+任务编排的实现
服务器·前端·网络
忘忧记2 小时前
pytest进阶参数化用法
前端·python·pytest
予你@。2 小时前
vue 使用html2canvas + jsPDF 将html导出为pdf (延伸问题)
vue.js·pdf·html