7.5.12 响应式导航条

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属性以便在按钮中引用。