文章目录
1. Bootstrap 的概念
Bootstrap,一个前端开发的框架,来自 Twitter,是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的,它简洁灵活,使得 Web 开发更加快捷。
2. Bootstrap 的功能
- 定义了很多的 css 样式和 js 插件。我们开发人员直接可以使用这些样式和插件得到丰富的页面效果。
- 响应式布局:同一套页面可以兼容不同分辨率的设备。
3. Bootstrap 快速入门
-
下载 Bootstrap
下载压缩包 bootstrap-3.3.7-dist 并解压,得到 css,fonts,js 三个文件夹
-
在项目中导入 Bootstrap
复制这三个文件夹,粘贴到在项目中。
复制 jquery-3.2.1.min.js,粘贴到项目 js 文件夹下
-
创建 html 页面,引入必要的资源文件
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --> <title>Bootstrap 101 Template</title> <!-- Bootstrap --> <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="js/jquery-3.2.1.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="js/bootstrap.min.js"></script> </head> <body> <h1>你好,世界!</h1> </body> </html>
4. 响应式布局
-
响应式布局的概念
同一套页面可以兼容不同分辨率的设备。
-
响应式布局的实现
依赖于栅格系统,即将一行平均分成12个格子(PC 和移动端都是 12 个格子),可以指定元素占几个格子。
如:
<div>
在 PC 端上显示占 4 个格子,在手机上占 12 个格子 -
响应式布局的步骤
-
定义容器(相当于 table)。
样式分为两类:
- container:两边留白
- container-fluid:每一种设备都是100%宽度
-
定义行(相当于 tr)。
样式:row
-
定义元素(相当于 td)。指定该元素在不同的设备上,所占的格子数目。
样式:col-设备代号-格子数目
设备代号:
- xs:超小屏幕 手机 (<768px)
- sm:小屏幕 平板 (≥768px)
- md:中等屏幕 桌面显示器 (≥992px)
- lg:大屏幕 大桌面显示器 (≥1200px)
-
注意事项:
- 容器,行,元素都是通过 css 样式定义的。
- 一行中如果格子数目超过12,则超出部分自动换行。
- 栅格类属性向上兼容。(例如:一行设置三个
class="col-xs-4"
,在手机上是一行三个元素,到平板和电脑还是保持不变) - 栅格类属性向下不兼容。(例如:一行设置三个
class="col-lg-4"
,在电脑上是一行三个元素,到平板和手机上会一个元素沾满一整行)
-
-
响应式布局练习
-
案例效果
PC 端:
pad 端:
-
编码实现
<body> <div class="container-fluid"> <div class="row"> <div class="col-md-2 col-sm-6 inner">abc</div> <div class="col-md-2 col-sm-6 inner">abc</div> <div class="col-md-2 col-sm-6 inner">abc</div> <div class="col-md-2 col-sm-6 inner">abc</div> <div class="col-md-2 col-sm-6 inner">abc</div> <div class="col-md-2 col-sm-6 inner">abc</div> </div> </div>
-
5. CSS 样式和 JS 插件
5.1 全局 CSS 样式
-
按钮
<!--class="btn btn-default":为按钮添加不同的颜色--> <button type="button" class="btn btn-default">(默认样式)Default</button> <button type="button" class="btn btn-primary">(首选项)Primary</button>
-
图片
<!--class="img-responsive":图片在任意尺寸都占100%--> <img src="img/banner_1.jpg" class="img-responsive" alt="Responsive image"> <!--img-circle:圆形--> <img src="img/banner_1.jpg" class="img-responsive img-circle" alt="Responsive image"> <!--img-rounded:方形--> <img src="img/banner_1.jpg" class="img-responsive img-rounded" alt="Responsive image"> <!--img-thumbnail:相框型 --> <img src="img/banner_1.jpg" class="img-responsive img-thumbnail" alt="Responsive image">
-
表格
<!--table-striped:条纹状表格--> <!--table-bordered:带边框的表格--> <!--table-hover:鼠标悬停--> <!--table-condensed:紧缩表格--> <table class="table table-striped table-bordered table-hover table-condensed"> </table>
-
表单
<!--所有设置了 .form-control 类的 <input>、<textarea> 和 <select> 元素都将被默认设置宽度属性为 width: 100%;--> <!--将 label 元素和前面提到的控件包裹在 .form-group 中可以获得最好的排列--> <form> <div class="form-group"> <label for="exampleInputEmail1">Email address</label> <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Email"> </div> <div class="form-group"> <label for="exampleInputPassword1">Password</label> <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password"> </div> <div class="form-group"> <label for="exampleInputFile">File input</label> <input type="file" id="exampleInputFile"> <p class="help-block">Example block-level help text here.</p> </div> <div class="checkbox"> <label> <input type="checkbox"> Check me out </label> </div> <button type="submit" class="btn btn-default">Submit</button> </form>
5.2 组件
-
导航条
<nav class="navbar navbar-default"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">Brand</a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li> <li><a href="#">Link</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="#">Action</a></li> <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> <li role="separator" class="divider"></li> <li><a href="#">Separated link</a></li> <li role="separator" class="divider"></li> <li><a href="#">One more separated link</a></li> </ul> </li> </ul> <form class="navbar-form navbar-left" role="search"> <div class="form-group"> <input type="text" class="form-control" placeholder="Search"> </div> <button type="submit" class="btn btn-default">Submit</button> </form> <ul class="nav navbar-nav navbar-right"> <li><a href="#">Link</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="#">Action</a></li> <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> <li role="separator" class="divider"></li> <li><a href="#">Separated link</a></li> </ul> </li> </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav>
-
分页条
<nav> <ul class="pagination"> <li> <a href="#" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li> <a href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav>
5.3 轮播图
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
<li data-target="#carousel-example-generic" data-slide-to="1"></li>
<li data-target="#carousel-example-generic" data-slide-to="2"></li>
</ol>
<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
<div class="item active">
<img src="img/banner_1.jpg" alt="...">
</div>
<div class="item">
<img src="img/banner_2.jpg" alt="...">
</div>
<div class="item">
<img src="img/banner_3.jpg" alt="...">
</div>
</div>
<!-- Controls -->
<a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
6. 案例
-
需求
写一个旅游网站首页
-
编码实现
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --> <title>Bootstrap 101 Template</title> <!-- Bootstrap --> <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="js/jquery-3.2.1.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="js/bootstrap.min.js"></script> <style> .padd-top { padding-top: 15px; } .search_input { /*搜索框 宽400,高36,左浮动,边框2,颜色#ffc900,左内边距10,外轮廓outline设置为0*/ width: 400px; height: 36px; float: left; border: 2px solid #ffc900; padding-left: 10px; } .search_button { /*点击按钮,是一个链接:左浮动,宽90,高36,背景色#ffc900,行高36,文本居中*/ float: left; width: 90px; height: 36px; background-color: #ffc900; text-align: center; line-height: 36px; } .jx_top { /*外上边距15px, 底部边框2px 实线 #ffc900做为下面的线, 宽度100%,高度35px,行高35px,外下边距5px。图标文件:icon_5.jpg*/ margin-top: 15px; border-bottom: 2px solid #ffc900; width: 100%; height: 35px; line-height: 35px; margin-bottom: 5px; } </style> </head> <body> <!--页眉部分,占 100%--> <header class="container-fluid"> <!--第一行是一张图片--> <div class="row"> <!--img-responsive 让图片响应式--> <img src="img/top_banner.jpg" class="img-responsive"> </div> <!--第二行是搜索栏--> <div class="row padd-top"> <div class="col-md-3 col-xs-12"> <img src="img/logo.jpg" class="img-responsive"> </div> <div class="col-md-5 col-xs-12 padd-top"> <input class="search_input" type="text" placeholder="请输入线路名称"> <a class="search_button" href="#">搜索</a> </div> <div class="col-md-4 col-xs-12"> <img src="img/hotel_tel.png" class="img-responsive"> </div> </div> <!--第三行是导航栏--> <div class="row"> <nav class="navbar navbar-default"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">导航</a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav list-inline"> <li><a href="#">国内游</a></li> <li><a href="#">出境游</a></li> <li><a href="#">门票</a></li> <li><a href="#">酒店</a></li> <li><a href="#">火车票</a></li> <li><a href="#">机票</a></li> </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> </div> <!--第四行是轮播图--> <div class="row"> <div id="carousel-example-generic" class="carousel slide" data-ride="carousel"> <!-- Indicators --> <ol class="carousel-indicators"> <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li> <li data-target="#carousel-example-generic" data-slide-to="1"></li> <li data-target="#carousel-example-generic" data-slide-to="2"></li> </ol> <!-- Wrapper for slides --> <div class="carousel-inner" role="listbox"> <div class="item active"> <img src="img/banner_1.jpg" alt="..."> </div> <div class="item"> <img src="img/banner_2.jpg" alt="..."> </div> <div class="item"> <img src="img/banner_3.jpg" alt="..."> </div> </div> <!-- Controls --> <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next"> <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> </div> </div> </header> <!--主体部分,两边留白--> <div class="container"> <!--第一行是国内游精选--> <div class="row jx_top"> <img src="img/icon_5.jpg"> <span>国内游精选</span> </div> <!--第二行是国内游精选的内容--> <div class="row padd-top"> <div class="col-md-3 col-xs-12"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> <div class="col-md-3 col-xs-12"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> <div class="col-md-3 col-xs-12"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> <div class="col-md-3 col-xs-12"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> </div> <!--第三行是国外游精选--> <div class="row jx_top"> <img src="img/icon_6.jpg"> <span>国外游精选</span> </div> <!--第四行是国外游精选的内容--> <div class="row padd-top"> <div class="col-md-4 col-xs-12"> <img src="img/guonei_1.jpg" class="img-responsive"> </div> <div class="col-md-8 col-xs-12"> <div class="col-md-4"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> <div class="col-md-4"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> <div class="col-md-4"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> <div class="col-md-4"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> <div class="col-md-4"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> <div class="col-md-4"> <img class="img-thumbnail" src="img/jiangxuan_1.jpg" alt="..."> <div class="caption"> <p>上海直飞三亚5天4晚自由行(春节预售+亲子/蜜月/休闲游首选+豪华酒店任选+接送机)</p> <span style="color: red">¥888</span> </div> </div> </div> </div> </div> <!--页脚部分,占 100%--> <footer class="container-fluid"> <div class="row padd-top"> <img src="img/footer_service.png" class="img-responsive"> </div> </footer> </body> </html>