响应式布局(二)
学习目标
(1)能够说出响应式原理
(2)能够使用媒体查询完成响应式导航
(3)能够使用 bootstrap 的栅格系统
(4)能够使用 bootstrap 的响应式工具
(5)能够独立完成阿里百秀首页案例
1.bootstrap使用(只用样式库)
控制权在框架本身,使用者要按照框架所规定的某种规范进行开发
bootstrap 使用四个步骤:1. 创建文件夹结构 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容
(1)bootstrap下载
(2)创建文件夹结构
(3)创建骨架结构并引入样式(先只引入样式)
找到基本模板复制源码
<!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">
<title></title>
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
</head>
<body>
<h1>hello world</h1>
</body>
</html>
(4)书写内容
2.bootstrap按钮
进入文档,找到按钮样式
复制下来,代码如下
<!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">
<title></title>
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
<style>
<!-- 也可以修改样式 注意权重-->
.login{
width: 80px;
}
</style>
</head>
<body>
<button type="button" class="btn btn-success">Success</button>
<!--通过类名来控制样式-->
<div class="btn btn-success login">登录</div>
<div class="btn btn-danger">失败</div>
</body>
</html>
3.布局容器
Bootstrap 需要为页面内容和栅格系统包裹一个 .container容器,Bootstrap 预先定义好了这个类,叫.container
(1)container类
● 响应式布局的容器 固定宽度
● 大屏( >= 1200px)宽度定为 1170px
● 中屏( >= 992px)宽度定为970px
● 小屏( >=768px)宽度定为750px
● 超小屏(100%)
(2)container-fluid类
● 流式布局容器 百分百宽度
● 占据全部视口(viewport)的容器
● 适合于单独做移动端开发
4.bootstrap栅格系统
(1)栅格系统
将页面布局划分为等宽的列,然后通过列数的定义来模块化页面布局
Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列
Bootstrap 里面 container 宽度是固定的,但是不同屏幕下,container 的宽度不同,我们再把container 划分为12等份
(2)栅格选项参数
栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局
屏幕大小 | 超小屏幕(<768px) | 小屏设备(>=768px) | 中等屏幕(>=992px) | 宽屏设备(>=1200px) |
---|---|---|---|---|
.container 最大宽度 | 自动100% | 750px | 970px | 1170px |
类前缀 | .col-xs- | .clo-sm- | .col-md- | .col-lg- |
列(column)数 | 12 | 12 | 12 | 12 |
● 行(row)必须放到container布局容器里面
● 实现列的平均划分 需要给列添加类前缀
● xs-etra small :超小;sm-small :小;md-medium :中等;lg-large :大;
● 列(column)大于12,多余的“列(column)”所在的元素将作为一个整体另起一行排列
● 每一列默认有左右15像素的 padding
● 可以同时为一列指定多个设备的类名,以便划分不同份数
例子
<!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">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
<title></title>
<style>
[class^="col"]{
border: 1px solid #000;
}
.container .row:nth-child(1){
background-color: pink;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-4 col-min-6 col-xs-12">1</div>
<div class="col-lg-3 col-md-4 col-min-6 col-xs-12">2</div>
<div class="col-lg-3 col-md-4 col-min-6 col-xs-12">3</div>
<div class="col-lg-3 col-md-4 col-min-6 col-xs-12">4</div>
</div>
<div class="row">
<div class="col-lg-6">1</div>
<div class="col-lg-2">2</div>
<div class="col-lg-2">3</div>
<div class="col-lg-2">4</div>
</div>
<div class="row">
<div class="col-lg-6">1</div>
<div class="col-lg-2">2</div>
<div class="col-lg-2">3</div>
<div class="col-lg-1">4</div>
</div>
</div>
</body>
</html>
效果图
(3)栅格系统列嵌套
一个列内再分成若干份小列,可以通过添加一个新的 .row元素和一个系列 .col-sm-* 元素到已经存在的 .col-sm-*元素内
例子
<!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">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
<title></title>
<style>
.row>div{
height: 50px;
background-color: pink;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-4">
<div class="row">
<div class="col-lg-6">a</div>
<div class="col-lg-6">b</div>
</div>
</div>
<div class="col-lg-4">2</div>
<div class="col-lg-4">3</div>
</div>
</div>
</body>
</html>
效果图
(4)列偏移
使用 .col-md-offset-* 类可以将列向右侧偏移。这些类实际是通过使用 * 选择器为当前元素增加了左侧的边距(margin)
例子
<!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">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
<title></title>
<style>
.row>div{
height: 50px;
background-color: pink;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4 ">左侧</div>
<!-- 偏移份数 = 12 - 两个盒子的份数 -->
<div class="col-md-4 col-md-offset-4">右侧</div>
</div>
<div class="row">
<!-- 如果只有一个盒子,偏移份数 = (12 - 盒子大小)/2-->
<div class="col-md-8 col-md-offset-2">中间盒子</div>
</div>
</div>
</body>
</html>
效果图
(5)列排序
通过使用 .col-md-push-* 和 .col-md-pull-* 类就可以很容易的改变列(column)的顺序
例子
<!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">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
<title></title>
<style>
.row div{
height: 50px;
background-color: pink;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4 col-md-push-8">左侧</div>
<div class="col-md-8 col-md-pull-4">右侧</div>
</div>
</div>
</body>
</html>
效果图
5. 响应式工具
为了加快对移动设备友好的页面开发工作,利用媒体查询功能,并使用这些工具类可以方便的针对不同设备展示或隐藏页面内容
类名 | 超小屏幕(<768px) | 小屏设备(>=768px) | 中等屏幕(>=992px) | 宽屏设备(>=1200px) |
---|---|---|---|---|
.hidden-xs | 隐藏 | 可见 | 可见 | 可见 |
.hidden-sm | 可见 | 隐藏 | 可见 | 可见 |
.hidden-md | 可见 | 可见 | 隐藏 | 可见 |
.hidden-lg | 可见 | 可见 | 可见 | 隐藏 |
与之相反的,visible-xs visible-sm visible-md visible-lg 会显示内容
例子
<!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">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
<title></title>
<style>
.row div{
background-color: purple;
height: 60px;
font-size: 50px;
}
.row div:nth-child(2){
background-color: pink;
}
span{
color: green;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-xs-3">
<span class="visible-lg">我会显示昂</span>
</div>
<div class="col-xs-3 hidden-md hidden-xs">我会变魔术</div>
<div class="col-xs-3">3</div>
<div class="col-xs-3">4</div>
</div>
</div>
</body>
</html>
效果图