0.背景
本文主要是实现《Java Web程序设计任务教程》第2版第一章中的任务:蛋糕商城。
技术:HTML+BootStrap
工具:vscode
1.创建项目
我们在电脑D盘下创建一个文件夹,名称就叫cake,使用VSCode打开这个文件夹,然后创建第一个文件,index.html,写下基础代码框架
可以把BootStrap下载下下来,也可以使用在线版本
简介 · Bootstrap v4 中文文档 v4.6 | Bootstrap 中文网

CDN地址:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
参考代码如下:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蛋糕商城</title> <!-- 引入Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"> </head> <body> 这是body <!-- 引入Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-7ymO4nGrkm372HoSbq1OY2DP4pEZnMiA+E0F3zPr+JQQtQ82gQ1HPY3QIVtztVua" crossorigin="anonymous"></script> </body> </html>
基础效果如下:

2.网页跳转
我们在网站中经常使用页面跳转功能,原生的HTML一般使用网页的堆叠的形式。
比如我当前创建index.html,我如果创建一个header.html,一般情况下需要把index.html里面的内容全部复制到header.html,然后再编写header.html里面的具体内容,类似于“增量开发”,这种方式比较费时费力,目前想最新的vue、angular等前端开发框架,早就可以实现“组件式”开发了。
本文为了演示,使用原始的方式进行操作。
3.创建header.html
我们在项目文件夹中创建header.html文件,参考代码如下:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蛋糕商城</title> <!-- 引入Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"> </head> <body> <!-- 导航栏 --> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <div class="container-fluid"> <a class="navbar-brand" href="#">蛋糕商城</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="header.html">首页</a> </li> <li class="nav-item"> <a class="nav-link" href="#">商品分类</a> </li> <li class="nav-item"> <a class="nav-link" href="#">热销</a> </li> <li class="nav-item"> <a class="nav-link" href="#">新品</a> </li> <li class="nav-item"> <a class="nav-link" href="register.html">注册</a> </li> <li class="nav-item"> <a class="nav-link" href="login.html">登录</a> </li> </ul> </div> </div> </nav> <!-- 引入Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
效果如下:

使用样式优化一下,加入样式、首页欢迎词、下拉框和图标
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蛋糕商城</title> <!-- 引入Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"> <!-- 引入Bootstrap ICON --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css"> <style> .navbar-custom { background-color: #000; /* 导航栏背景为黑色 */ } .navbar-custom .navbar-brand, .navbar-custom .nav-link { color: #fff; /* 字体颜色为白色 */ font-size: 18px; /* 加大字体字号 */ } .navbar-custom .nav-link:hover { color: #ccc; /* 鼠标悬停时字体颜色变浅 */ } .navbar-custom .icons { margin-left: auto; /* 将图标推到最右侧 */ } .navbar-custom .icons i { font-size: 24px; /* 图标变大 */ font-weight: bold; /* 图标加粗 */ } </style> </head> <body> <!-- 导航栏 --> <nav class="navbar navbar-expand-lg navbar-custom"> <div class="container-fluid"> <a class="navbar-brand" href="index.html">蛋糕商城</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="header.html">首页</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> 商品分类 </a> <ul class="dropdown-menu" aria-labelledby="navbarDropdown"> <li><a class="dropdown-item" href="#">生日蛋糕</a></li> <li><a class="dropdown-item" href="#">婚礼蛋糕</a></li> <li><a class="dropdown-item" href="#">儿童蛋糕</a></li> <li><a class="dropdown-item" href="#">定制蛋糕</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link" href="#">热销</a> </li> <li class="nav-item"> <a class="nav-link" href="#">新品</a> </li> <li class="nav-item"> <a class="nav-link" href="register.html">注册</a> </li> <li class="nav-item"> <a class="nav-link" href="login.html">登录</a> </li> </ul> <!-- 搜索和购物车图标 --> <div class="icons"> <a href="#" class="text-white me-3"><i class="bi bi-search"></i></a> <a href="#" class="text-white"><i class="bi bi-cart"></i></a> </div> </div> </div> </nav> <!-- 内容栏 --> <div class="container mt-4"> <h1>欢迎来到蛋糕商城</h1> <p>这里有各种美味的蛋糕,欢迎选购!</p> </div> <!-- 引入Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
效果如下:

4.创建footer
footer主要用于描述友情链接于作者署名内容,一般放在页面的底部。如果单独写一个footer.html,那么它的代码大概如下:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蛋糕商城</title> <!-- 引入Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"> <!-- 引入Bootstrap ICON --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css"> <style> footer { position: fixed; /* 固定定位 */ bottom: 0; /* 固定在页面底部 */ width: 100%; /* 宽度占满整个页面 */ background-color: rgba(0, 0, 0, 0.2); /* 页脚背景色 */ text-align: center; padding: 10px 0; } </style> </head> <body> <!-- 页脚 --> <footer> <div class="text-center p-3"> © 2023 蛋糕商城. 版权所有. </div> </footer> <!-- 引入Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
效果如下:

我们把footer这段代码整合到header中,这样就是一个比较完整的页面了。
参考代码:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蛋糕商城</title> <!-- 引入Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"> <!-- 引入Bootstrap ICON --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css"> <style> .navbar-custom { background-color: #000; /* 导航栏背景为黑色 */ } .navbar-custom .navbar-brand, .navbar-custom .nav-link { color: #fff; /* 字体颜色为白色 */ font-size: 18px; /* 加大字体字号 */ } .navbar-custom .nav-link:hover { color: #ccc; /* 鼠标悬停时字体颜色变浅 */ } .navbar-custom .icons { margin-left: auto; /* 将图标推到最右侧 */ } .navbar-custom .icons i { font-size: 24px; /* 图标变大 */ font-weight: bold; /* 图标加粗 */ } footer { position: fixed; /* 固定定位 */ bottom: 0; /* 固定在页面底部 */ width: 100%; /* 宽度占满整个页面 */ background-color: rgba(0, 0, 0, 0.2); /* 页脚背景色 */ text-align: center; padding: 10px 0; } </style> </head> <body> <!-- 导航栏 --> <nav class="navbar navbar-expand-lg navbar-custom"> <div class="container-fluid"> <a class="navbar-brand" href="index.html">蛋糕商城</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="header.html">首页</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> 商品分类 </a> <ul class="dropdown-menu" aria-labelledby="navbarDropdown"> <li><a class="dropdown-item" href="#">生日蛋糕</a></li> <li><a class="dropdown-item" href="#">婚礼蛋糕</a></li> <li><a class="dropdown-item" href="#">儿童蛋糕</a></li> <li><a class="dropdown-item" href="#">定制蛋糕</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link" href="#">热销</a> </li> <li class="nav-item"> <a class="nav-link" href="#">新品</a> </li> <li class="nav-item"> <a class="nav-link" href="register.html">注册</a> </li> <li class="nav-item"> <a class="nav-link" href="login.html">登录</a> </li> </ul> <!-- 搜索和购物车图标 --> <div class="icons"> <a href="#" class="text-white me-3"><i class="bi bi-search"></i></a> <a href="#" class="text-white"><i class="bi bi-cart"></i></a> </div> </div> </div> </nav> <!-- 内容栏 --> <div class="container mt-4"> <h1>欢迎来到蛋糕商城</h1> <p>这里有各种美味的蛋糕,欢迎选购!</p> </div> <!-- 页脚 --> <footer> <div class="text-center p-3"> © 2023 蛋糕商城. 版权所有. </div> </footer> <!-- 引入Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>

这样的话,基础骨架就搭建完了,下面开始搭建其他页面。
5.登录页面login.html
我们创建login.html文件,把header.html里面的代码全部复制过来(删掉欢迎内容),然后编写login.html的主体内容:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蛋糕商城</title> <!-- 引入Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"> <!-- 引入Bootstrap ICON --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css"> <style> .navbar-custom { background-color: #000; /* 导航栏背景为黑色 */ } .navbar-custom .navbar-brand, .navbar-custom .nav-link { color: #fff; /* 字体颜色为白色 */ font-size: 18px; /* 加大字体字号 */ } .navbar-custom .nav-link:hover { color: #ccc; /* 鼠标悬停时字体颜色变浅 */ } .navbar-custom .icons { margin-left: auto; /* 将图标推到最右侧 */ } .navbar-custom .icons i { font-size: 24px; /* 图标变大 */ font-weight: bold; /* 图标加粗 */ } footer { position: fixed; /* 固定定位 */ bottom: 0; /* 固定在页面底部 */ width: 100%; /* 宽度占满整个页面 */ background-color: rgba(0, 0, 0, 0.2); /* 页脚背景色 */ text-align: center; padding: 10px 0; } .login-container { max-width: 400px; /* 表单最大宽度 */ margin: 100px auto; /* 居中 */ padding: 20px; background-color: #fff; /* 表单背景色 */ border-radius: 8px; /* 圆角 */ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* 阴影 */ } .form-icon { font-size: 24px; /* 图标大小 */ color: #6c757d; /* 图标颜色 */ } .form-control { padding-left: 40px; /* 输入框左边距 */ } .btn-login { width: 100%; /* 按钮宽度 */ background-color: #007bff; /* 按钮背景色 */ color: #fff; /* 按钮文字颜色 */ } .btn-login:hover { background-color: #0056b3; /* 按钮悬停背景色 */ } </style> </head> <body> <!-- 导航栏 --> <nav class="navbar navbar-expand-lg navbar-custom"> <div class="container-fluid"> <a class="navbar-brand" href="index.html">蛋糕商城</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="header.html">首页</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> 商品分类 </a> <ul class="dropdown-menu" aria-labelledby="navbarDropdown"> <li><a class="dropdown-item" href="#">生日蛋糕</a></li> <li><a class="dropdown-item" href="#">婚礼蛋糕</a></li> <li><a class="dropdown-item" href="#">儿童蛋糕</a></li> <li><a class="dropdown-item" href="#">定制蛋糕</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link" href="#">热销</a> </li> <li class="nav-item"> <a class="nav-link" href="#">新品</a> </li> <li class="nav-item"> <a class="nav-link" href="register.html">注册</a> </li> <li class="nav-item"> <a class="nav-link" href="login.html">登录</a> </li> </ul> <!-- 搜索和购物车图标 --> <div class="icons"> <a href="#" class="text-white me-3"><i class="bi bi-search"></i></a> <a href="#" class="text-white"><i class="bi bi-cart"></i></a> </div> </div> </div> </nav> <!-- 登录 --> <div class="login-container"> <h2 class="text-center mb-4">登录</h2> <form> <!-- 用户名输入框 --> <div class="mb-3 position-relative"> <i class="bi bi-person-fill form-icon position-absolute start-0 top-50 translate-middle-y ms-3"></i> <input type="text" class="form-control" id="username" placeholder="用户名" required> </div> <!-- 密码输入框 --> <div class="mb-3 position-relative"> <i class="bi bi-lock-fill form-icon position-absolute start-0 top-50 translate-middle-y ms-3"></i> <input type="password" class="form-control" id="password" placeholder="密码" required> </div> <!-- 登录按钮 --> <button type="submit" class="btn btn-login">登录</button> </form> </div> <!-- 页脚 --> <footer> <div class="text-center p-3"> © 2023 蛋糕商城. 版权所有. </div> </footer> <!-- 引入Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
效果如下:

测试跳转效果:

6.登录页面register.html
我们创建register.html文件,把header.html里面的代码全部复制过来(删掉欢迎内容),然后编写register.html的主体内容:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>蛋糕商城</title> <!-- 引入Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"> <!-- 引入Bootstrap ICON --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css"> <style> .navbar-custom { background-color: #000; /* 导航栏背景为黑色 */ } .navbar-custom .navbar-brand, .navbar-custom .nav-link { color: #fff; /* 字体颜色为白色 */ font-size: 18px; /* 加大字体字号 */ } .navbar-custom .nav-link:hover { color: #ccc; /* 鼠标悬停时字体颜色变浅 */ } .navbar-custom .icons { margin-left: auto; /* 将图标推到最右侧 */ } .navbar-custom .icons i { font-size: 24px; /* 图标变大 */ font-weight: bold; /* 图标加粗 */ } footer { position: fixed; /* 固定定位 */ bottom: 0; /* 固定在页面底部 */ width: 100%; /* 宽度占满整个页面 */ background-color: rgba(0, 0, 0, 0.2); /* 页脚背景色 */ text-align: center; padding: 10px 0; } .register-container { max-width: 500px; /* 表单最大宽度 */ margin: 50px auto; /* 居中 */ padding: 20px; background-color: #fff; /* 表单背景色 */ border-radius: 8px; /* 圆角 */ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* 阴影 */ } .form-icon { font-size: 24px; /* 图标大小 */ color: #6c757d; /* 图标颜色 */ } .form-control { padding-left: 40px; /* 输入框左边距 */ } .btn-register { width: 100%; /* 按钮宽度 */ background-color: #28a745; /* 按钮背景色 */ color: #fff; /* 按钮文字颜色 */ } .btn-register:hover { background-color: #218838; /* 按钮悬停背景色 */ } </style> </head> <body> <!-- 导航栏 --> <nav class="navbar navbar-expand-lg navbar-custom"> <div class="container-fluid"> <a class="navbar-brand" href="index.html">蛋糕商城</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="header.html">首页</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> 商品分类 </a> <ul class="dropdown-menu" aria-labelledby="navbarDropdown"> <li><a class="dropdown-item" href="#">生日蛋糕</a></li> <li><a class="dropdown-item" href="#">婚礼蛋糕</a></li> <li><a class="dropdown-item" href="#">儿童蛋糕</a></li> <li><a class="dropdown-item" href="#">定制蛋糕</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link" href="#">热销</a> </li> <li class="nav-item"> <a class="nav-link" href="#">新品</a> </li> <li class="nav-item"> <a class="nav-link" href="register.html">注册</a> </li> <li class="nav-item"> <a class="nav-link" href="login.html">登录</a> </li> </ul> <!-- 搜索和购物车图标 --> <div class="icons"> <a href="#" class="text-white me-3"><i class="bi bi-search"></i></a> <a href="#" class="text-white"><i class="bi bi-cart"></i></a> </div> </div> </div> </nav> <div class="register-container"> <h2 class="text-center mb-4">注册</h2> <form action="/user_register" method="post"> <!-- 用户名输入框 --> <div class="mb-3 position-relative"> <i class="bi bi-person-fill form-icon position-absolute start-0 top-50 translate-middle-y ms-3"></i> <input type="text" class="form-control" id="username" placeholder="用户名" required> </div> <!-- 密码输入框 --> <div class="mb-3 position-relative"> <i class="bi bi-lock-fill form-icon position-absolute start-0 top-50 translate-middle-y ms-3"></i> <input type="password" class="form-control" id="password" placeholder="密码" required> </div> <!-- 邮箱输入框 --> <div class="mb-3 position-relative"> <i class="bi bi-envelope-fill form-icon position-absolute start-0 top-50 translate-middle-y ms-3"></i> <input type="email" class="form-control" id="email" placeholder="邮箱" required> </div> <!-- 收货人输入框 --> <div class="mb-3 position-relative"> <i class="bi bi-person-badge-fill form-icon position-absolute start-0 top-50 translate-middle-y ms-3"></i> <input type="text" class="form-control" id="receiver" placeholder="收货人" required> </div> <!-- 电话输入框 --> <div class="mb-3 position-relative"> <i class="bi bi-telephone-fill form-icon position-absolute start-0 top-50 translate-middle-y ms-3"></i> <input type="tel" class="form-control" id="phone" placeholder="电话" required> </div> <!-- 收货地址输入框 --> <div class="mb-3 position-relative"> <i class="bi bi-geo-alt-fill form-icon position-absolute start-0 top-50 translate-middle-y ms-3"></i> <input type="text" class="form-control" id="address" placeholder="收货地址" required> </div> <!-- 注册按钮 --> <button type="submit" class="btn btn-register">注册</button> </form> </div> <!-- 页脚 --> <footer> <div class="text-center p-3"> © 2023 蛋糕商城. 版权所有. </div> </footer> <!-- 引入Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
单页面效果如下:

跳转效果如下:
