7.7.2 面板嵌套表格

如果想将表格添加到面板中,只要为表格添加.table样式即可,这样面板和表格看上去更像一个整体。表格既可放在面板的主体(.panel-body元素)内,也可直接放在面板中。

在面板主体中放置表格

下面是将表格放在面板主体(.panel-body元素)内的示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 面板嵌套表格 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<div class="container">
<!-- 面板 -->
<div class="panel panel-primary">
<!-- 面板头 -->
<div class="panel-heading">
<h1 class="panel-title">疯狂软件教育中心</h1>
</div>
<!-- 面板主体 -->
<div class="panel-body">
疯狂软件的系列教材
<!-- 在面板主体中添加表格 -->
<table class="table table-hover table-condensed table-bordered">
<thead>
<tr>
<th>ID</th>
<th>书名</th>
<th>价格</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>疯狂前端开发讲义</td>
<td>79</td>
</tr>
<tr>
<td>2</td>
<td>疯狂Android讲义</td>
<td>108</td>
</tr>
</tbody>
</table>
</div>
<!-- 面板脚注 -->
<div class="panel-footer">
<address>天河区沣宏大厦3楼</address>
</div>
</div>
</div>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

直接在面板容器下放置表格

如果直接将表格放在面板内,而不是放在.panel-body元素内,那么面板标题会和表格连接起来,没有空隙。

例如如下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 面板嵌套表格 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">
<h1 class="panel-title">疯狂软件教育中心</h1>
</div>
<table class="table table-hover table-bordered">
<thead>
<tr>
<th>ID</th>
<th>书名</th>
<th>价格</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>疯狂前端开发讲义</td>
<td>79</td>
</tr>
<tr>
<td>2</td>
<td>疯狂Android讲义</td>
<td>108</td>
</tr>
</tbody>
</table>
<div class="panel-footer">
<address>天河区沣宏大厦3楼</address>
</div>
</div>
</div>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

该代码直接将<table>元素放在面板中,这样该表格将会和面板标题连接起来。

7.7 面板

面板就是一个矩形容器,它既可是一个只提供简单边框的盒子,也可是一个包含头和尾注的容器。

7.7.1 面板的基础结构

Bootstrap为面板提供了如下样式。

面板容器的样式

下面的样式设置在面板的最外层容器(div)中.

样式 描述
.panel 所有面板都需要添加的基础样式。
.panel-default 设置默认的面板样式。
.panel-primary 设置首选项样式的面板。
.panel-success 设置表示成功的面板样式。
.panel-info 设置表示通用信息的面板样式。
.panel-warning 设置表示警告的面板样式。
.panel-danger 设置表示危险的面板样式。

面板内容的样式

下面的样式用于设置面板的内容。

样式 描述
.panel-body 设置面板主体部分。
.panel-heading 设置面板头,该面板头可作为面板标题的容器。
.panel-title 设置面板的标题面板标题要放在面板头中.面板标题一般通过为<h1><h6>的元素设置.panel-title 样式来实现,添加该样式后,<h1><h6>元素的字体大小将被.panel-heading的样式覆盖。为了给链接设置合适的颜色,务必将链接放到带有.panel-title 样式的标题标签内。
.panel-footer 设置面板尾注。

程序示例 最简单的面板

最简单的面板只是在普通的.panel元素中放置一个.panel-body元素来实现,示例代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 简单面板 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<div class="container">
<div class="panel panel-default">
<div class="panel-body">
面板主体
</div>
</div>
</div>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

程序示例 设置面板内容

下面代码示范了更完整的面板结构:面板可包含面板头(.panel-heading)、面板主体(.panel-body)和面板尾注(.panel-footer)。此外,本例还将为面板设置6种不同的样式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 面板风格 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<div class="container">
<!-- 第1行 -->
<div class="row">
<!-- 第1列,占用4列 -->
<div class="col-sm-4">
<!-- 面板 默认样式-->
<div class="panel panel-default">
<!-- 面板头 -->
<div class="panel-heading">
<h1 class="panel-title">面板标题(.default)</h1>
</div>
<!-- 面板主体 -->
<div class="panel-body">
面板主体
</div>
<!-- 面板尾注 -->
<div class="panel-footer">
<address>北京市xxxxx</address>
</div>
</div>
</div>
<!-- 第2列,占用4列 -->
<div class="col-sm-4">
<!-- 面板 首选项样式 -->
<div class="panel panel-primary">
<div class="panel-heading">
<h1 class="panel-title">面板标题(.primary)</h1>
</div>
<div class="panel-body">
面板主体
</div>
<div class="panel-footer">
<address>北京市xxxxx</address>
</div>
</div>
</div>
<!-- 第3列,占用4列 -->
<div class="col-sm-4">
<div class="panel panel-success">
<div class="panel-heading">
<h1 class="panel-title">面板标题(.success)</h1>
</div>
<div class="panel-body">
面板主体
</div>
<div class="panel-footer">
<address>北京市xxxxx</address>
</div>
</div>
</div>
</div>
<!-- 第2行 -->
<div class="row">
<div class="col-sm-4">
<div class="panel panel-info">
<div class="panel-heading">
<h1 class="panel-title">面板标题(info)</h1>
</div>
<div class="panel-body">
面板主体
</div>
<div class="panel-footer">
<address>北京市xxxxx</address>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="panel panel-warning">
<div class="panel-heading">
<h1 class="panel-title">面板标题(.warning)</h1>
</div>
<div class="panel-body">
面板主体
</div>
<div class="panel-footer">
<address>北京市xxxxx</address>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="panel panel-danger">
<div class="panel-heading">
<h1 class="panel-title">面板标题(.danger)</h1>
</div>
<div class="panel-body">
面板主体
</div>
<div class="panel-footer">
<address>北京市xxxxx</address>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

在该代码中的每个面板都包含了.panel-heading.panel-body.panel-footer 这三种元素,这三种元素分别表示了面板头、面板主体和面板脚注。其中面板头将作为面板标题的容器。

  • **不同面板样式主要控制面板头的背景色边框颜色**。
  • 而面板的脚注部分则不受面板样式的影响,脚注部分总是灰色的背景

7.6.2 徽章

徽章和标签的用法基本相同,只是它们二者的外观表现上存在区别,而且**徽章通常用于展示新的或未读的信息条目**。

样式 描述
.badge 为徽章添加的通用样式。

程序示例

例如如下代码示范了徽章的用法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 徽章 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<ul class="nav navbar-nav">
<li role="presentation"><a href="#">主页</a></li>
<li role="presentation">
<a href="#">课程体系<span class="badge">5</span></a>
</li>
<li role="presentation" class="active">
<a href="#">师资介绍
<span class="badge"></span></a>
</li>
<li role="presentation">
<a href="#">教育理念<span class="badge">20</span></a>
</li>
<li role="presentation" class="disabled">
<a href="#">退出系统</a>
</li>
</ul>
</div>
</nav>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

7.6 标签和徽章

可以将标签和徽章添加到导航链接等元素内,**作为一种附加的、额外的提示信息**。

7.6.1 标签

Bootstrap为标签提供了如下样式。

样式 描述
.label 为所有标签都添加的通用样式。
.label-default 默认标签。
.label-primary 首选项标签。
.label-success 表示成功的标签,背景色为绿色。
.label-info 表示普通信息的标签。
.label-warning 表示警告的标签,背景色为黄色。
.label-danger 表示危险的标签,背景色为红色。

如下代码示范了标签的简单用法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 标签 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<div class="container">
<h3>疯狂软件教育中心 <span class="label label-default">火爆</span></h3>
<h4>疯狂软件教育中心 <span class="label label-primary">热门</span></h4>
<h3>疯狂软件教育中心 <span class="label label-success">火爆</span></h3>
<h4>疯狂软件教育中心 <span class="label label-info">热门</span></h4>
<h3>疯狂软件教育中心 <span class="label label-warning">火爆</span></h3>
<h4>疯狂软件教育中心 <span class="label label-danger">热门</span></h4>
</div>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

标签也可用于导航、链接等元素中。
例如如下示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 标签 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<ul class="nav navbar-nav">
<li role="presentation"><a href="#">主页</a></li>
<li role="presentation">
<a href="#">课程体系<span class="label label-default"></span></a>
</li>
<li role="presentation" class="active">
<a href="#">师资介绍<span class="label label-warning"></span></a>
</li>
<li role="presentation">
<a href="#">教育理念<span class="label label-primary"></span></a>
</li>
<li role="presentation" class="disabled"><a href="#">退出系统</a></li>
</ul>
</div>
</nav>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>
</html>

7.5.15 翻页导航

对于一些更简单的分页需求,没必要使用分页组件,使用简单的翻页导航组件即可。翻页导航组件只是提供简单的”上一页“、”下一页“按钮方便用户翻页。Bootstrap 为翻页导航组件提供了如下样式。

样式 描述
.pager 该样式应用于翻页导航的<ul>元素。
.disabled 该样式应用于单个翻页按钮,表示禁用。
.previous 该样式应用于单个翻页按钮,用于将翻页按钮居左显示。
.next 该样式应用于单个翻页按钮,用于将翻页按钮居右显示。

为了让屏幕阅读器等辅助设备能准确识别翻页导航也是一个导航元素,建议将翻页导航放在<nav>元素内。

程序示例

下面代码示范了一个简单的翻页导航组件的设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 翻页导航 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<div class="container-fluid">
<nav>
<ul class="pager">
<li><a href="#">上一页</a></li>
<li class="disabled"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

设置翻页按钮在两边显示

默认情况下,翻页导航的两个按钮总是居中显示。如果希望将它们放到两边显示,则可通过.previous.next两个样式来实现。例如如下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 翻页导航 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<div class="container-fluid">
<nav>
<ul class="pager">
<li class="previous"><a href="#">上一页</a></li>
<li class="next disabled"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

7.5.14 控制分页导航的大小

Bootstrap为控制分页导航的大小提供了如下样式。

样式 描述
.pagination-lg 设置大的分页导航。
.pagination-sm 设置小的分页导航。

程序示例

下面代码示范了分页导航的大小的设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 分页导航的大小 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<div class="container-fluid">
<nav>
<!-- 大的分页导航 -->
<ul class="pagination pagination-lg">
<li><a href="#">上一页</a></li>
<li><a href="#">...</a></li>
<li><a href="#">3</a></li>
<li class="active"><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">...</a></li>
<li class="disabled"><a href="#">下一页</a></li>
</ul>
</nav>
<nav>
<!-- 常规分页导航 -->
<ul class="pagination">
<li><a href="#">上一页</a></li>
<li><a href="#">...</a></li>
<li><a href="#">3</a></li>
<li class="active"><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">...</a></li>
<li class="disabled"><a href="#">下一页</a></li>
</ul>
</nav>
<nav>
<!-- 小分页导航 -->
<ul class="pagination pagination-sm">
<li><a href="#">上一页</a></li>
<li><a href="#">...</a></li>
<li><a href="#">3</a></li>
<li class="active"><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">...</a></li>
<li class="disabled"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

7.5.13 分页导航

分页导航在Web页面中也很常用。Bootstrap为分页导航提供了如下样式。

方法 描述
.pagination 该样式应用于分页导航的<ul>元素。
.disabled 该样式应用于具体的某页对应的链接,表示禁用。
.active 该样式应用于具体的某页对应的链接,表示被激活。
为了让屏幕阅读器等辅助设备能准确识别分页导航也是一个导航元素,建议将分页导航放在<nav>元素内。

程序示例

如下代码示范了分页导航。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 分页导航 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<div class="container-fluid">
<nav>
<ul class="pagination">
<li><a href="#">上一页</a></li>
<li><a href="#">...</a></li>
<li><a href="#">3</a></li>
<li class="active"><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">...</a></li>
<li class="disabled"><a href="#">下一页</a></li>
</ul>
</nav>
</div>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

从以上代码可以看出,分页导航通常就是一个被指定了class="pagination"的无序列表。

7.5.12 响应式导航条

前面介绍的导航条都是在viewport 宽度大于768px时的显示效果,但目前我们正处于移动互联网飞速发展的时代,大量移动设备的显示屏可能达不到768px,此时导航条的显示效果会比较差。Bootstrap的响应式导航条专门用于解决该问题。

Bootstap响应式导航条特征

响应式导航条具有如下特征:

  • 当浏览器viewport宽度大于768px时,导航条将自动水平显示,所有导航组件都以水平方式排列。
  • 当浏览器viewport宽度小于768px时,导航条将会自动把所有导航组件都隐藏起来,然后在导航条右边显示一个按钮,该按钮用于打开导航条组件。

响应式导航条样式

Bootstrap为实现这种响应式导航条提供了如下几个样式。

样式 描述
.navbar-toggle 该样式应用于打开导航条的按钮。设置了该样式之后,该按钮将具有默认的颜色和反色设置。
.collapse 该样式应用于要折叠隐藏的容器,设置了该样式之后,该元素默认被折叠隐藏。
.navbar-collapse 该样式应用于要折叠隐藏的容器。设置了该样式之后,该元素以导航条的方式被折叠。
显示被折叠的导航条是通过Bootstrapcollapse插件来实现的,因此必须在页面代码中包含该插件,默认情况下,collapse插件已经包含在bootstrap.min.js文件中。

开发响应式导航条步骤

开发响应式导航条大致需要如下两步:

  1. 将所有可能需要折叠的内容使用一个<div>容器进行包裹,并为该元素添加.collapse.navbar-collapse两个样式。为了能访问该容器元素,建议为该元素指定id
  2. 在导航条的.nav-header元素中添加一个按钮,并为该按钮添加.navbar-toggle样式。
    • 为了让该按钮能触发导航条中各组件的显示,要为该按钮指定data-toggle="collapse"属性;
    • 为了让Bootstrap明白该按钮要显示哪个元素,还需要指定data-target属性,data-target属性的属性值用于指定第一步中定义的容器元素。

程序示例

下面代码实现了本节前面介绍的响应式导航条。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 导航条中的文本和链接 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<!-- navbar-toggle样式表示导航条显示按钮 -->
<!-- data-toggle="collapse"可以显示或隐藏导航条组件 -->
<!-- data-target="#fk-navbar-collapse"表示要显示或隐藏哪个导航条 -->
<!-- 1号代码 -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#fk-navbar-collapse"
aria-expanded="false">
<span class="sr-only">展开导航</span>
<!-- 下面代表导航条中的3条横线 -->
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" style="padding-top:0" href="#">
<img alt="疯狂软件" src="../fklogo.gif" style="width:52px;height:52px">
</a>
</div>
<!-- 要折叠的导航条组件,并指明id属性 -->
<!-- 2号代码 -->
<div class="collapse navbar-collapse" id="fk-navbar-collapse">
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<label for="keyword" class="sr-only">关键字</label>
<input type="text" id="keyword" class="form-control" placeholder="输入关键字">
</div>
<button type="submit" class="btn btn-default">搜索</button>
</form>
<p class="navbar-text navbar-right" style="padding-right:10px">
以游客身份<a href="#" class="navbar-link">访问</a></p>
<ul class="nav navbar-nav">
<li role="presentation"><a href="#">主页</a></li>
<li role="presentation" class="dropdown">
<!-- 将链接元素变成能激发下拉菜单的按钮 -->
<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true"
aria-expanded="true">
课程体系 <span class="caret"></span>
</a>
<!-- 使用ul添加下拉菜单 -->
<ul class="dropdown-menu">
<li><a href="#">Java基础强化营</a></li>
<li><a href="#">全栈式程序员就业营</a></li>
<li><a href="#">全栈式程序员突击营</a></li>
</ul>
</li>
<li role="presentation" class="active"><a href="#">师资介绍</a></li>
<li role="presentation"><a href="#">教育理念</a></li>
<li role="presentation" class="disabled"><a href="#">退出系统</a></li>
</ul>
</div>
</div>
</nav>
<script type="text/javascript" src="../jquery-3.1.1.js"></script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
</body>

</html>

该代码中的1号代码定义了用于打开导航组件的按钮,并为该按钮指定了class="navbar-toggle"data-toggle="collapse"data-target="#fk-navbar-collapse",这说明该按钮用于打开被折叠的导航组件idfk-navbar-collapse的元素。
2号代码定义了<div>容器,所有可能要被折叠的内容都放在该元素中,并为该元素指定了class="collapse navbar-collapse",指定id属性以便在按钮中引用。

7.5.11 设置导航条的位置

Web页面中,需要将导航条固定在浏览器的顶部或底部,在移动App中更是如此。Bootstrap提供了以下3种方式来设置导航条的位置。

方法 描述
.navbar-fixed-top 将导航条固定在顶部。即使页面内容发生滚动,导航条也始终固定在顶部。
.navbar-fixed-bottom 将导航条固定在页面底部,即使页面内容发生滚动,导航条也始终固定在页面底部。
.navbar-static-top 使导航条静止于页面的顶部,当向下滚动页面时,导航条将会被隐藏。

如何避免导航条挡住页面内容

当为导航条设置了.navbar-fixed-top.navbar-fixed-bottom 这两种样式时,导航条其实是”浮”在页面内容之上的,因此该导航条可能会遮住页面内容,故而当为导航条设置了.navbar-fixed-top样式时,可能需要为页面body设置padding-top:70px;,让页面内容下移70px;当为导航条设置了.navbar-fixed-bttom样式时,可能需要为页面body设置padding-bottom:70px;,让页面内容上移70px,这样可以避免导航条挡住页面内容。

程序示例

下面的代码示范了设置页面导航条位置的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> 设置导航条的位置 </title>
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css">
</head>

<body>
<nav id="nav" class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" style="padding-top:0" href="#">
<img alt="疯狂软件" src="../fklogo.gif" style="width:52px;height:52px">
</a>
</div>
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<label for="keyword" class="sr-only">关键字</label>
<input type="text" id="keyword" class="form-control" placeholder="输入关键字">
</div>
<button type="submit" class="btn btn-default">搜索</button>
</form>
<p class="navbar-text navbar-right" style="padding-right:10px">
以游客身份<a href="#" class="navbar-link">访问</a></p>
<ul class="nav navbar-nav">
<li role="presentation"><a href="#">主页</a></li>
<li role="presentation" class="dropdown">
<!-- 将链接元素变成能激发下拉菜单的按钮 -->
<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true"
aria-expanded="true">
改变导航条位置 <span class="caret"></span>
</a>
<!-- 使用ul添加下拉菜单 -->
<ul class="dropdown-menu">
<li><a href="javascript:narbarPosition.setFixedTop();">固定在顶部</a></li>
<li><a href="javascript:narbarPosition.setFixedBottom();">固定在底部</a></li>
<li><a href="javascript:narbarPosition.setStaticTop();">静止在顶部</a></li>
</ul>
</li>
<li role="presentation" class="active"><a href="#">师资介绍</a></li>
<li role="presentation"><a href="#">教育理念</a></li>
<li role="presentation" class="disabled"><a href="#">退出系统</a></li>
</ul>
</div>
</nav>
<p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p><p>a</p>
<script type="text/javascript" src="../jquery-3.1.1.js">
</script>
<script type="text/javascript" src="../bootstrap/js/bootstrap.min.js">
</script>
<script type="text/javascript">
var narbarPosition = {
setFixedTop: function () {
$('#nav').removeClass('navbar-fixed-bottom');
$('#nav').removeClass('navbar-static-top');
$('#nav').addClass('navbar-fixed-top');
},
setFixedBottom: function () {
$('#nav').removeClass('navbar-fixed-top');
$('#nav').removeClass('navbar-static-top');
$('#nav').addClass('navbar-fixed-bottom');
},
setStaticTop: function () {
$('#nav').removeClass('navbar-fixed-top');
$('#nav').removeClass('navbar-fixed-bottom');
$('#nav').addClass('navbar-static-top');
}
}
</script>
</body>

</html>

在该代码中定义了一个下拉菜单,并通过下拉菜单的3个菜单项来动态设置导航条的位置。第二段粗体字代码使用jQueryaddClass()removeClass()两个方法动态添加、删除CSS样式。从第二段粗体字代码可以看出,将导航条固定在页面顶部的样式是.navbar-fixed-top,将导航条固定在页面底部的样式是.navbar-fixed-bottom,将导航条静止在页面顶部的样式是.navbar-static-top

7.5.10 导航条中的组件的排列方式

正如在前面示例中看到的,Bootstrap 还提供了如下两个样式来控制导航条中组件的排列方式。

样式 描述
.navbar-left 让导航条中的组件靠左排列。
.navbar-right 让导航条中的组件靠右排列。
这两个样式都会通过CSS设置特定方向的浮动样式,它们其实是.pull-left.pull-rightmixin版本,只不过它们都使用了特定的媒体查询(media query)限制,因此可以更好地在各种尺寸的屏幕上处理导航条组件。
需要说明的是,Bootstrap导航条目前最多只支持一个组件使用.navbar-right样式—这是因为Bootstrap为最后一个被指定.navbar-right样式的元素使用负的margin。如果有多个元素使用.navbar-right样式,则它们的margin将会出现问题。