Java Web程序设计任务教程(第2版)
上QQ阅读APP看书,第一时间看更新

1.6 Bootstrap框架的常用组件

Bootstrap常用组件包括按钮、导航、菜单和表单等。使用Bootstrap不需要编写复杂的样式代码,只需要使用Bootstrap组件就可以实现复杂的页面架构。下面将对Bootstrap常用组件进行详细讲解。

1.6.1 按钮

Bootstrap提供了多种样式的按钮,每个样式的按钮都有自己的语义用途,并附带了一些额外的功能,以便进行更多的控制。下面通过一个案例演示Bootstrap中按钮的实现方式。在chapter01文件夹中创建名称为bootstrap01的HTML文件,具体代码如文件1-17所示。

文件1-17 bootstrap01.html

1  <!DOCTYPE html>
2  <html>
3  <head>
4    <title>bootstrap01</title>
5    <link rel="stylesheet" href="bootstrap.min.css">
6  </head>
7  <body>
8   <button type="button" class="btn btn-primary">主按钮</button>
9  </body>
10 </html>

在文件1-17中,第5行代码引入bootstrap.min.css核心文件;第8行代码定义按钮结构,设置按钮的type属性值为button,表示按钮;设置按钮的类名为btn和btn-primary,表示在btn类名的基础上添加btn-primary类名,btn-primary主要用于实现主按钮的结构样式。

使用浏览器打开bootstrap01.html文件,运行结果如图1-28所示。

图1-28 文件1-17的运行结果

需要注意的是,除了btn-primary外,Bootstrap还包括btn-secondary、btn-success和btn-danger等类,分别用于实现不同的按钮样式效果。

在定义按钮时,除了提供按钮的基本样式外,Bootstrap框架还提供了一些特定的类,通过类名可以设置按钮的大小、状态等。下面分别介绍按钮状态和按钮大小的设置。

1. 设置按钮状态

在实现按钮时,如果按钮中的文本内容超出了按钮的宽度,在默认情况下按钮中的内容会自动换行排列,如果不希望按钮文本换行,可以在按钮中添加text-nowrap类。下面修改bootstrap01.html代码,设置按钮状态为禁止文本换行。修改后的代码如文件1-18所示。

文件1-18 修改后的bootstrap01.html

1  <!DOCTYPE html>
2  <html>
3  <head>
4    <style>
5    button {
6      width: 100px;
7    }
8    </style>
9    <title>bootstrap01</title>
10   <link rel="stylesheet" href="bootstrap.min.css">
11 </head>
12 <body>
13   <button type="button" class="btn btn-primary text-nowrap">
14      主按钮主按钮主按钮
15   </button>
16 </body>
17 </html>

在文件1-18中,第6行代码定义按钮的宽度为100px;第13~15行代码定义按钮内容,并且为按钮添加了text-nowrap类名,表示禁止文本换行。运行结果如图1-29所示。

2. 设置按钮大小

在Bootstrap中,除了可以直接设置按钮状态外,还可以通过类名调节按钮的大小,修改bootstrap01.html代码实现调用不同类名来调节按钮的大小。使用下面代码替换文件1-18中第13~15行代码。

<button type="button" class="btn btn-primary btn-lg">主按钮</button>
<button type="button" class="btn btn-primary btn-sm">主按钮</button>

在上述代码中,分别为按钮添加btn-lg和btn-sm类名,其中btn-lg表示大按钮,btn-sm表示小按钮。修改完成后,刷新浏览器,结果如图1-30所示。

图1-29 文件1-18的运行结果

图1-30 修改文件1-18后的运行结果

1.6.2 导航

为了更加方便地设计导航栏样式,Bootstrap提供了相应的组件。

下面通过一个案例演示导航栏的实现方式。在chapter01文件夹中创建名称为bootstrap02的HTML文件,用于设计一个导航栏,具体代码如文件1-19所示。

文件1-19 bootstrap02.html

1  <!DOCTYPE html>
2  <html>
3  <head>
4    <style>
5    button {
6      width: 100px;
7    }
8    </style>
9    <title>bootstrap02</title>
10   <link rel="stylesheet" href="bootstrap.min.css">
11 </head>
12 <body>
13   <!-- 导航 -->
14   <ul class="nav">
15    <li class="nav-item">
16      <a class="nav-link" href="#">首页</a>
17    </li>
18    <li class="nav-item">
19      <a class="nav-link" href="#">简介</a>
20    </li>
21    <li class="nav-item">
22      <a class="nav-link" href="#">详情</a>
23    </li>
24    <li class="nav-item">
25      <a class="nav-link disabled" href="#" tabindex="-1"
26         aria-disabled="true">联系电话</a>
27    </li>
28   </ul>
29 </body>
30 </html>

在文件1-19中,第10行代码引入bootstrap.min.css文件;第14行代码定义类名为nav的<ul>标签,表示导航栏的最外层盒子;第15~27行代码在nav内部定义类名为 nav-item 的<li>标签,表示导航栏中的导航列表,并在每个nav-item的内部定义类名为nav-link的<a>标签,表示导航标签中的内容。

使用浏览器打开文件1-19,运行结果如图1-31所示。示出当前页在导航层次结构中的位置。为此,Bootstrap提出面包屑导航,通过为导航层次结构自动添加分隔符,展示出当前页在导航层次结构中的位置。

图1-31 文件1-19的运行结果

1.6.3 面包屑导航

1.6.2小节实现了传统导航栏的页面结构,它不能展

下面通过一个案例演示面包屑导航的实现方式。在chapter01文件夹下创建名称为bootstrap03的HTML文件,用于设计一个面包屑导航栏,具体代码如文件1-20所示。

文件1-20 bootstrap03.html

1  <!DOCTYPE html>
2  <html>
3  <head>
4    <title>bootstrap03</title>
5    <link rel="stylesheet" href="bootstrap.min.css">
6  </head>
7  <body>
8   <!-- 面包屑导航 -->
9    <nav aria-label="breadcrumb">
10    <ol class="breadcrumb">
11      <li class="breadcrumb-item"><a href="#">首页</a></li>
12      <li class="breadcrumb-item"><a href="#">简介</a></li>
13    </ol>
14   </nav>
15 </body>
16 </html>

在文件1-20中,第5行代码引入bootstrap.min.css文件;第9~14行代码定义<nav>标签,并设置aria-label属性值为breadcrumb,表示面包屑导航。其中,第10行代码在nav标签下定义类名为breadcrumb的<ol>有序列表;第11行代码在<ol>标签下定义类名为breadcrumb-item的<li>标签表示首页链接,第12行代码在<ol>标签下定义了类名为 breadcrumb-item 的<li>标签表示简介链接。文件1-20的运行结果如图1-32所示。

图1-32 文件1-20的运行结果

1.6.4 分页

在前端页面开发的过程中,经常会使用到分页器,分页器的功能是帮助用户快速跳转到指定页码的页面。

下面通过一个案例演示分页的实现方式。在chapter01文件夹下创建名称为bootstrap04的HTML文件,用于实现分页效果,具体代码如文件1-21所示。

文件1-21 bootstrap04.html

1  <!DOCTYPE html>
2  <html>
3  <head>
4    <title>bootstrap04</title>
5    <link rel="stylesheet" href="bootstrap.min.css">
6  </head>
7  <body>
8    <nav aria-label="Page navigation example">
9     <ul class="pagination">
10      <li class="page-item">
11       <a class="page-link" href="#" aria-label="Previous">
12         <span aria-hidden="true">&laquo;</span>
13       </a>
14      </li>
15      <li class="page-item"><a class="page-link" href="#">1</a></li>
16      <li class="page-item"><a class="page-link" href="#">2</a></li>
17      <li class="page-item"><a class="page-link" href="#">3</a></li>
18      <li class="page-item"><a class="page-link" href="#">4</a></li>
19      <li class="page-item"><a class="page-link" href="#">5</a></li>
20      <li class="page-item"><a class="page-link" href="#">6</a></li>
21      <li class="page-item"><a class="page-link" href="#">7</a></li>
22      <li class="page-item">
23       <a class="page-link" href="#" aria-label="Next">
24         <span aria-hidden="true">&raquo;</span>
25       </a>
26      </li>
27    </ul>
28   </nav>
29 </body>
30 </html>

在文件1-21中,第5行代码引入bootstrap.min.css文件;第8行代码设置<nav>标签的aria-label属性值为Page navigation example,表示分页器模块;第9行代码定义类名为pagination的<ul>标签,表示分页器模块的最外层盒子;第10~26行代码在pagination内部定义多个类名为page-item的<li>标签,表示分页器列表,并且在每一列中定义类名为page-link的<a>标签,表示页码标签,在<a>标签中添加数字内容,表示页码。其中,第一个<a>标签定义aria-label的属性值为Previous,表示上一页,并且添加“<<”符号,即&laquo,用于折叠页码;在最后一个<a>标签中定义 aria-label 的属性值为 Next,表示下一页,并且添加“>>”符号,即&raquo,用于折叠页码。

使用浏览器打开文件1-21,运行结果如图1-33所示。

图1-33 文件1-21的运行结果

1.6.5 列表

在没有使用Bootstrap之前,为了实现列表页面结构,需要编写列表结构,然后根据列表结构的样式需求编写烦琐的CSS代码。为了提高开发效率,Bootstrap提供了列表组件,可以直接通过列表组件实现列表页面结构。

下面通过案例演示列表的实现方式。在chapter01文件夹下创建名称为bootstrap05的HTML文件,用于实现列表页面结构,具体代码如文件1-22所示。

文件1-22 bootstrap05.html

1  <!DOCTYPE html>
2  <html>
3  <head>
4    <title>bootstrap05</title>
5    <link rel="stylesheet" href="bootstrap.min.css">
6  </head>
7  <body>
8   <!-- 列表组 -->
9    <ul class="list-group">
10    <li class="list-group-item active">列表1</li>
11    <li class="list-group-item">列表2</li>
12    <li class="list-group-item">列表3</li>
13    <li class="list-group-item">列表4</li>
14    <li class="list-group-item">列表5</li>
15   </ul>
16 </body>
17 </html>

在文件1-22中,第5行代码引入bootstrap.min.css文件;第9行代码通过<ul>标签实现无序列表结构,并且为<ul>标签定义list-group类名,表示列表组;第10~14行代码在list-group中定义<li>标签,为每一个<li>标签添加list-group-item类名,表示列表中的每一项,并且为第一个<li>标签设置active类名,表示第一个列表处于选中状态。

使用浏览器打开文件1-22,运行结果如图1-34所示。

图1-34 文件1-22的运行结果

1.6.6 表单

在前端页面开发的过程中,除了导航、列表和按钮等页面结构外,表单也是页面结构中重要的组成部分。表单主要包括form、button和input等元素,通过在<form>标签中定义<input>和<button>等标签来实现表单页面。Bootstrap框架提供了实现表单的组件,可以很方便地设计表单样式。

下面通过一个案例演示表单页面结构的实现方式。在chapter01文件夹下创建名称为bootstrap06的HTML文件,用于实现表单,具体代码如文件1-23所示。

文件1-23 bootstrap06.html

1  <!DOCTYPE html>
2  <html>
3  <head>
4    <title>bootstrap06</title>
5    <link rel="stylesheet" href="bootstrap.min.css">
6  </head>
7  <body>
8   <!-- 表单 -->
9    <form action="#">
10    <div class="form-group">
11      <label for="User">用户名</label>
12      <input type="text" class="form-control" id="User">
13      <label for="Password">密码</label>
14      <input type="password" class="form-control" id="Password">
15      <label for="Email1">邮箱地址</label>
16      <input type="email" class="form-control" id="Email1">
17    </div>
18    <button type="submit" class="btn btn-primary">提交</button>
19   </form>
20 </body>
21 </html>

在文件1-23中,第5行代码引入bootstrap.min.css文件;第9行代码定义form表单结构;第10行代码在<form>标签中定义类名为form-group的<div>标签,表示表单组合元素;第11~16行代码在form-group中定义类名为form-control的3个<input>标签,分别代表用户名、密码和邮箱地址的输入框,在<input>标签中,设置form-control类名,form-control是一个样式类,用于统一格式,在编写代码时,可以用form-control优化样式,包括常规外观、focus选(点)中状态和尺寸大小等。此外,定义<input>标签的id值为User,并且与for属性值为User的<label>标签进行绑定。

使用浏览器打开文件1-23,运行结果如图1-35所示。

图1-35 文件1-23的运行结果

任务:蛋糕商城注册页面

【任务目标】

根据本章中所学的网页知识,实现蛋糕商城注册页面的代码编写,页面展示效果如图1-36所示。

图1-36 蛋糕商城注册页面

在图1-36中,页面主要分为3个部分,第一部分为导航内容,包括首页、商品分类、热销、新品、注册、登录、搜索和购物车;第二部分为注册内容,包括标题、注册表单、提交按钮等;第三部分为友情链接与作者署名。

【实现步骤】

1. 创建资源文件

创建文件夹chapter01,在chapter01中创建一个名称为css的文件夹,该文件夹用于存放蛋糕商城项目中的样式;再创建一个名称为fonts的文件夹,该文件夹用于存放蛋糕商城项目中的字体。

2. 创建header.html页面

在文件夹chapter01中创建名称为header的HTML文件,在该文件中编写实现代码,完成页面中制作导航栏的任务,此处只展示主要代码,如文件1-24所示。

文件1-24 header.html

1       <!--header 顶部导航栏-->
2       <div class="header">
3            <div class="container">
4                <nav class="navbar navbar-default" role="navigation">
5                     <!--navbar-header-->
6                     <div class="collapse navbar-collapse"
7                     id="bs-example-navbar-collapse-1">
8                          <ul class="nav navbar-nav">
9                             <li><a href="#" >首页</a></li>
10                             <li class="dropdown">
11                                  <a href="#" class="dropdown-toggle"
12                                data-toggle="dropdown">
13                                     商品分类<b class="caret"></b></a>
14                              <ul class="dropdown-menu multi-column columns-2">
15                                      <li>
16                                           <div class="row">
17                                               <div class="col-sm-12">
18                                                  <h4>商品分类</h4>
19                                               </div>
20                                           </div>
21                                      </li>
22                                  </ul>
23                             </li>
24                            <li><a href="#" >热销</a></li>
25                            <li><a href="#" >新品</a></li>
26                            <li><a href="#" class="active">注册</a></li>
27                            <li><a href="#" >登录</a></li>
28                         </ul>
29                    <!--/.navbar-collapse-->
30                    </div>
31                    <!--//navbar-header-->
32                </nav>
33                <div class="header-info">
34                    <div class="header-right search-box">
35                         <a href="javascript:;"><span class="glyphicon
36                      glyphicon-search" aria-hidden="true"></span></a>
37                         <div class="search">
38                             <form class="navbar-form" action="/goods_search">
39                                  <input type="text" class="form-control"
40                                name="keyword">
41                                  <button type="submit" class="btn btn-default"
42                            aria-label="Left Align">搜索</button>
43                             </form>
44                         </div>
45                    </div>
46                    <div class="header-right cart">
47                         <a href="goods_cart.jsp">
48                             <span class="glyphicon glyphicon-shopping-cart"
49                               aria-hidden="true">
50                                  <span class="card_num"></span>
51                             </span>
52                         </a>
53                    </div>
54                    <div class="clearfix"> </div>
55                </div>
56                <div class="clearfix"> </div>
57           </div>
58      </div>
59      <!--//header-->

文件1-24主要用于描述蛋糕商城的顶部导航栏,包括首页、商品分类、热销、新品、注册、登录、搜索和购物车,当用户单击“注册”时,页面将跳转到新用户注册页面。

3. 创建footer.html页面

在文件夹chapter01中创建名称为footer的HTML文件,在该文件中编写实现代码,完成页面中制作友情链接与作者署名的任务,此处只展示主要代码,如文件1-25所示。

文件1-25 footer.html

1   <!--footer 友情链接与作者署名-->
2       <div class="footer">
3            <div class="container">
4                <div class="text-center">
5                     <p>heima www.itcast.cn © All rights Reseverd</p>
6                </div>
7            </div>
8       </div>
9       <!--//footer-->

文件1-25主要用于描述友情链接与作者署名内容,一般放置在页面的底部。

4. 创建user register.html页面

在文件夹chapter01中创建名称为user_register的HTML文件,在该文件中编写实现代码,完成页面中制作注册表单的任务,此处只展示主要代码,如文件1-26所示。

文件1-26 user_register.html

1   <!DOCTYPE html>
2   <html>
3   <head>
4       <title>用户注册</title>
5       <meta name="viewport" content="width=device-width, initial-scale=1">
6    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
7       <link type="text/css" rel="stylesheet" href="css/bootstrap.css">
8       <link type="text/css" rel="stylesheet" href="css/style.css">
9   </head>
10  <body>
11      <!--header-->
12         <!--复制粘贴header.html中的内容-->
13      <!--//header-->
14      <!--account 注册表单-->
15      <div class="account">
16           <div class="container">
17                <div class="register">
18                    <form action="/user_rigister" method="post">
19                         <div class="register-top-grid">
20                            <h3>注册新用户</h3>
21                             <div class="input">
22                                 <span>用户名 <label
23                              style="color:red;">*</label></span>
24                                  <input type="text" name="username"
25                           placeholder="请输入用户名" required="required">
26                             </div>
27                             <div class="input">
28                                 <span>邮箱 <label
29                                   style="color:red;">*</label></span>
30                                  <input type="text" name="email"
31                           placeholder="请输入邮箱" required="required">
32                             </div>
33                             <div class="input">
34                                 <span>密码 <label
35                             style="color:red;">*</label></span>
36                                  <input type="password" name="password"
37                           placeholder="请输入密码" required="required">
38                             </div>
39                             <div class="input">
40                                 <span>收货人<label></label></span>
41                                  <input type="text" name="name"
42                                 placeholder="请输入收货人">
43                             </div>
44                             <div class="input">
45                                 <span>收货电话<label></label></span>
46                                  <input type="text" name="phone"
47                                placeholder="请输入收货电话">
48                             </div>
49                             <div class="input">
50                                 <span>收货地址<label></label></span>
51                                  <input type="text" name="address"
52                                placeholder="请输入收货地址">
53                             </div>
54                             <div class="clearfix"> </div>
55                         </div>
56                         <div class="register-but text-center">
57                          <input type="submit" value="提交">
58                           <div class="clearfix"> </div>
59                         </div>
60                    </form>
61                    <div class="clearfix"> </div>
62                </div>
63          </div>
64      </div>
65      <!--//account-->
66      <!--footer-->
67      <!--复制粘贴footer.html中代码-->
68      <!--//footer-->
69  </body>
70  </html>

在文件1-26中,首先在<head>标签之间导入了bootstrap.css和style.css文件,分别用于设计导航栏样式、控制页面的样式。主体body部分由3个大的<div>标签将页面分为3个部分,第一部分用于描述蛋糕商城的顶部导航栏,复制header.html中的代码到文件中的指定位置,当用户单击“注册”时,页面将跳转到新用户注册页面;第2部分是第14~65行代码,用于描述注册信息的form表单,用户填写注册信息,单击“提交”按钮就可以完成注册;第3部分用于描述友情链接与作者署名内容,复制footer.html中的代码到文件中的指定位置。

在文件1-26中的<head>标签之间导入的bootstrap.css和style.css文件,这两个文件中的内容读者能依照所学知识看懂即可,不要求读者自己写出。详细代码请参见项目配套的源代码。

至此,蛋糕商城注册页面的代码已经编写完成。使用浏览器打开文件1-26,效果如图1-36所示,表示任务运行成功。

需要注意的是,在实际项目开发过程中,网页中大部分的CSS文件都是由网页设计人员依照需求创建好的,通常这些定义好的样式不需要软件开发人员再去改动,开发者只需将后台的相应数据展示在页面中即可。只有定义好的样式不能满足需求时,才会做相应变动。由于篇幅有限,不在此做过多描述,有兴趣的读者可以深入学习CSS的相关知识。