6.8 响应式布局相关样式

Bootstrap提供了系列响应式布局相关的样式,这些样式都是通过CSS媒体查询功能来实现的。通过这些样式可让页面针对不同的设备显示或隐藏HTML元素。

6.8.1 显示或隐藏相关样式

Bootstrap提供了如表6.2所示的响应式显示/隐藏相关的样式。

样式类 超小viewport viewport 中等viewport viewport
.visibIe-xs-xxx 可见 不可见 不可见 不可见
.visible-sm-xxx 不可见 可见 不可见 不可见
.visible-md-xxx 不可见 不可见 可见 不可见
.visible-lg-xxx 不可见 不可见 不可见 可见
.hidden-xs 隐藏 不隐藏 不隐藏 不隐藏
.hidden-sm 不隐藏 隐藏 不隐藏 不隐藏
.hidden-md 不隐藏 不隐藏 隐藏 不隐藏
.hidden-lg 不隐藏 不隐藏 不隐藏 隐藏

在上面.visible-xx-yy等样式中,中间的xx可以是xssmmdlg等表示viewport尺寸的代号;后面的yyy可以是blockinlineinline-block这3个表示块模型的代号
md尺寸的viewport为例,该样式可支持.visible-md-block.visible-md-inline.visible-md-inline-block这些样式。
Bootstrap 早期使用的.visible-xs.visible-sm.visible-md.visible-lg 也依然存在。但是从3.2.0版本开始不再建议使用它们,建议使用.visible-xs-block.visible-sm-block.visible-md-block.visible-lg-block,它们只在<table>相关元素上略有区别。

程序示例 .visible-xx-block

例如如下代码示范了.visible-xx-block样式的作用:

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
<!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">
<style type="text/css">
[class*="visible-"] {
margin-bottom: 20px;
padding-top: 15px;
padding-bottom: 15px;
background-color: #eee;
background-color: rgba(86, 61, 124, .15);
border: 1px solid #ddd;
border: 1px solid rgba(86, 61, 124, .2);
}
</style>
</head>

<body>
<div class="container">
<div class="visible-xs-block">visible-xs-block</div>
<div class="visible-sm-block">visible-sm-block</div>
<div class="visible-md-block">visible-md-block</div>
<div class="visible-lg-block">visible-lg-block</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>

在该程序中定义了4个<div>元素,但它们都被指定了.visible-xx-block样式,这意味着这4个元素始终只有一个能显示出来,例如viewport尺寸为lg时,class属性为visible-lg-blockdiv元素将会显示,其他div将不会显示.

程序示例 .hidden-xx

如下代码示范了.hidden-xx样式的作用:

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
<!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">
<style type="text/css">
[class*="hidden-"] {
margin-bottom: 20px;
padding-top: 15px;
padding-bottom: 15px;
background-color: #eee;
background-color: rgba(86, 61, 124, .15);
border: 1px solid #ddd;
border: 1px solid rgba(86, 61, 124, .2);
}
</style>
</head>

<body>
<div class="container">
<div class="hidden-xs">hidden-<code>xs</code>-block</div>
<div class="hidden-sm">hidden-<code>sm</code>-block</div>
<div class="hidden-md">hidden-<code>md</code>-block</div>
<div class="hidden-lg">hidden-<code>lg</code>-block</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>

在该程序中定义了4 个<div>元素,但它们都被指定了.hidden-xx样式,这意味着这4个元素始终有一个会被隐藏起来。例如在viewport尺寸为lg时,class属性为hidden-lgdiv元素将会被隐藏,而其他div元素将不会隐藏.

6.7.7 图片替换

Bootstrap提供了一个.text-hide样式用于隐藏元素中的文本.

其实该样式的源码非常简单:

1
2
3
4
5
6
7
.text-hide{
font: 0/0 a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0;
}

该文本内容被彻底隐藏之后,接下来可用一张背景图来代替该元素。

6.7.6 屏幕阅读器和键盘导航

Bootstrap为屏幕阅读器和键盘导航提供了如下两个样式。

样式 描述
.sr-only 指定该样式的元素只有在屏幕阅读器中才会显示出来,使用普通设备时该元素将会被隐藏。
.sr-only-focusable 指定该样式的元素只有在获得焦点时才会显示出来—比如用户通过键盘导航来获得焦点。
例如如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!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">
<a class="sr-only sr-only-focusable" href="#content">默认看不到的链接</a>
</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>

上面的代码定义了一个链接,该链接可以在屏幕阅读器上显示出来,也可在获得焦点时显示出来。浏览该页面,开始看不到该链接,通过单击Tab键让该链接获取焦点后即可看到效果。
.sr-only.sr-only-focusable也可作为mixin使用,关于mixin的用法可参考6.3节。

6.7.5 显示或隐藏内容

Bootstrap提供了如下CSS样式来显示或隐藏内容。

样式类 描述
.hidden 隐藏设置该样式的元素。
.show 显示设置该样式的元素。
.invisible 将设置该样式的元素设为不可见,但该元素所占据的位置依然被保留
其实这三个样式的源代码非常简单:
1
2
3
4
5
6
7
8
9
.show{
display: block !important;
}
.hidden{
display: none important;
}
.invisible{
visibility: hidden;
}

从源代码可以看出,.show.hidden 样式其实就是将display 设为blocknone 来实现的;.invisible样式其实就是将visibility设为hidden来实现的。其中,!import用于指定CSS样式的优先级。
.show.hidden.invisible也可作为mixin使用,关于mixin的用法可参考6.3节。

提示:关于CSS 样式中displayvisibility 属性的作用可参考《疯狂HTML 5/CSS 3/JavaScript讲义》。

6.7.4 快速浮动

Bootstrap提供了如下两个样式来实现元素的快速浮动。

样式类 描述
.pull-left 将元素浮向左边。
.pull-right 将元素浮向右边。
1
2
3
4
5
6
.pull-left{
float:left !import;
}
.pull-right{
float:right !import;
}

这两个样式的用法非常简单,其源代码如下。
从源代码可以看出,.pull-left其实就是将float设为left;
.pull-right其实就是将float设为right。其中,!import用于指定CSS样式的优先级。

.pull-left.pull-right也可作为mixin使用,关于mixin的用法可参考6.3节。

.pull-left.pull-right 这两个样式不能在导航条中使用,导航条中应该使用.navbar-left.navbar-right来代替它们。

提示:关于CSS样式中float属性的作用可参考《疯狂HTML 5/CSS3/JavaScript`讲义》。

6.7.3 关闭按钮和三角箭头

  • 关闭按钮:通过为<button>设置.close样式,可以将该按钮设为关闭按钮,该关闭按钮总是位于所在容器的右上角
  • 三角箭头:通过为空的<span>设置.caret样式,可以设置三角箭头。

程序示例

例如如下代码:

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">
<button type="button" class="close" aria-label="关闭">
<span aria-hidden="true">&times;</span>
</button>
<br>
<span class="caret"></span>
</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>

6.7.2 情境文本颜色

情境文本颜色和情境背景色的功能大致相同,只是这些样式作用于文本,而不是背景

样式类 描述
.text-muted 代表安静浅灰色
.text-primary 代表首选高亮颜色(蓝色)。
.text-success 代表成功绿色
.text-info 代表一般提示信息的浅蓝色
.text-warning 代表一般提示信息的浅黄色
.text-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">
<p class="text-muted">.text-muted</p>
<p class="text-primary">.text-primary</p>
<p class="text-success">.text-success</p>
<p class="text-info">.text-info</p>
<p class="text-warning">.text-warning</p>
<p class="text-danger">.text-danger</p>
</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>

浏览该网页即可看到各情境文本颜色的效果。
提示:有时由于其他CSS 选择器的特殊性,上面这些文本颜色样式可能不起作用,此时可考虑将要添加文本颜色的内容放在新的<div>元素中。

6.7 辅助样式

辅助样式主要包括一些特殊的颜色和图标,它们通常起辅助的作用。

6.7.1 情境背景色

Bootstrap提供了以下类来支持情境背景色。

样式类 描述
.bg-primary 首选背景色(蓝色)。
.bg-success 代表成功绿色
.bg-info 代表提示信息浅蓝色
.bg-warning 代表警告浅黄色
.bg-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
<!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">
<p class="bg-primary">.bg-primary</p>
<p class="bg-success">.bg-success</p>
<p class="bg-info">.bg-info</p>
<p class="bg-warning">.bg-warning</p>
<p class="bg-danger">.bg-danger</p>
</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>

浏览该网页即可看到各情境背景色的效果。

提示:有时由于其他CSS 选择器的特殊性,上面这些背景色样式可能不起作用,此时可考虑将要添加背景色的内容放在新的<div>元素中。

6.6.2 图标

Bootstrap通过Glyphicon Halflings字体提供了250多个字体小图标,这些小图标的用法非常简单,通常会通过一个空的<span>元素并为该元素设置两个CSS样式来使用这些图标。
为了正确地使用这些图标,需要两个CSS样式配合。

  • .glyphicon:该样式设置它是一个小图标。
  • .glyphicon-xxx:该样式设置具体是哪个小图标。后面的xxx需要根据不同图标而改变,具体可参考这个网站

程序示例

下面代码示范了如何单独地使用小图标,以及如何在段落文字、按钮中使用这些图标。

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
<!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="row">
<div class="col-sm-12">
<span class="glyphicon glyphicon-heart" aria-hidden="true"></span>
<span class="glyphicon glyphicon-phone-alt" aria-hidden="true"></span>
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
</div>
<div class="col-sm-12">
文字中
<span class="glyphicon glyphicon-star" aria-hidden="true"></span> 嵌套使用的
<span class="glyphicon glyphicon-refresh" aria-hidden="true"></span> 图标
</div>
<div class="col-sm-12">
<button class="btn btn-default btn-lg" type="button">
<span class="glyphicon glyphicon-align-left" aria-hidden="true"></span>
</button>
<button class="btn btn-default" type="button">
<span class="glyphicon glyphicon-align-center" aria-hidden="true"></span>
</button>
<button class="btn btn-default btn-sm" type="button">
<span class="glyphicon glyphicon-align-right" aria-hidden="true"></span>
</button>
<button class="btn btn-default btn-xs" type="button">
<span class="glyphicon glyphicon-align-justify" aria-hidden="true"></span>
</button>
</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>

从以上代码可以看出,不管是单独使用小图标,还是在文本中和按钮中使用小图标,代码中总是定义一个空的<span>元素,并为之设置两个CSS样式。
在该代码中,还使用了aria-hiddn属性,该属性主要对有视觉缺陷、失聪和行动不便的残疾人设置的。尤其像盲人,需要借助于屏幕阅读器(屏幕阅读器可以朗读发声或输出盲文)才能浏览网页。而aria-*等属性都是针对这部分人设计的,如aria-hiddn表明该元素对残疾人隐藏;aria-label表示对残疾人有效的标签等。
为了能正确地设置padding,请在图标和文本之间添加一个空格。
需要说明的是,Bootstrap的小图标是依赖bootstrapfonts目录下那些字体文件的,因此开发者不要删除该文件夹,尽量不要改变fonts文件夹与bootstrap.min.css之间的相对位置(fonts文件夹默认需要位于bootstrap.min.css文件的上一级目录下fonts文件夹内)。如果改变了fonts文件夹的位置,开发者只有重新修改Less源代码或bootstrap.min.css文件,这比较麻烦。

上面的页面需要进行跨源请求,所以要放到Web服务器上。

6.6 图片和图标

Bootstrap提供了系列图片相关的样式并提供了大量可用的小图标。

6.6.1 图片相关样式

Bootstrap为图片提供了如下几个样式。

样式类 描述
.img-responsive 响应式图片。通过为图片设置max-width:100%;height:auto;display:block;等属性,使得图片在父元素中可以得到更好的缩放。
.center-block 如果要让响应式图片水平居中,应设置该样式。
.img-rounded 设置圆角图片。
.img-circle 圆形图片。
.img-thumbnail 缩略图图片。该样式会在图片四周添加一圈淡灰色的边框。

程序示例

下面页面代码示范了图片相关的样式。

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
<!DOCTYPE html>
<html>

<head>
<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
<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="row">
<div class="col-sm-3">
<h3>默认图片</h3>
<img src="../javaee_half.png" alt="javeee">
</div>
<div class="col-sm-3">
<h3>圆角图片</h3>
<img src="../javaee_half.png" alt="javeee" class="img-rounded">
</div>
<div class="col-sm-3">
<h3>圆形图片</h3>
<img src="../javaee_half.png" alt="javeee" class="img-circle">
</div>
<div class="col-sm-3">
<h3>缩略图图片</h3>
<img src="../javaee_half.png" alt="javeee" class="img-thumbnail">
</div>
</div>
<div class="row">
<div class="col-sm-3">
<h3>响应式图片</h3>
<img src="../javaee_half.png" alt="javeee" class="img-responsive">
</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>

响应式图片会随着它所在的容器的大小改变而自动缩放。当然,缩略图图片也会随着它所在容器的大小改变而自动缩放,但缩略图图片的四周会被添加淡灰色的边框。
需要说明的是,.img-responsive样式可与.img-rounded.img-circle样式结合使用,例如希望实现响应式圆形图片,可通过如下代码实现。

1
<img src=". /xxx.png" alt="xxx" class="img-circle img-responslve">