10-响应式

响应式

什么是响应式布局

响应式布局(respond layout)是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端(手机、平板、pc电脑) ——而不是为每个终端做一个特定的版本。这个概念是为解决移动互联网浏览而诞生的。

优点:

一套代码可以适配多个终端

**缺点: **

1. 需要兼容多个终端 开发效率低
2. 有很多处理兼容的代码 代码冗余较大 加载速度慢

响应式开发现状:

1. 不是所有的网站都适合响应式  基本上是一些简约式的网站适合
2. 如果公司里面已经有了PC网页 那么直接开发手机端就可以
3. 如果是一个新建站点, 并且这个网站比较简约 可以采用响应式来写
4. 国内的响应式网站很少, 国外较多

响应式开发与移动web开发的比较

开发方式 移动web开发+pc开发 响应式开发
引用场景 一般已经有了PC端网站,只需要端独开发移动端网站即可 针对一些新建网站,并且要求适配移动端
开发 针对性强,开发效率高 兼容各种终端,效率低
适配 只能适配移动端或者PC端,pad上体验比较差 可以适配各种终端
效率 代码简洁,加载快 代码相对复杂,加载慢

响应式开发原理

就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。

设备的划分情况:

  • 小于768的为超小屏幕(手机)
  • 768~992之间的为小屏设备(平板)
  • 992~1200的中等屏幕(桌面显示器)
  • 大于1200的宽屏设备(大桌面显示器)

设备分类

分类 宽度范围
大屏设备 >1200px
中屏设备 992px~1200px
小屏设备 768px~992px
超小屏设备 < 768px
.w {
     100%;
    height: 200px;
    margin: 0 auto;
    background-color: lime;
}

/* 覆盖式的写法: 先写最大范围的 然后用小范围的覆盖大范围的 */
@media screen and (min- 768px) {
    .w {
         750px;
        height: 200px;
        margin: 0 auto;
        background-color: yellow;
    }
}

@media screen and (min- 992px) {
    .w {
         970px;
        height: 200px;
        margin: 0 auto;
        background-color: blue;
    }
}

@media screen and (min- 1200px) {
    .w {
         1170px;
        height: 200px;
        margin: 0 auto;
        background-color: red;
    }
}

注意: 媒体查询仅仅是一个css使用的限制条件,并不会增加css的权重

bootstrap框架

Bootstrap,来自 Twitter,是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。

bootstrap中文网

基本模板

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <!-- 当使用IE浏览器时,自动调用IE浏览器的最高内核 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap模板</title>

    <!-- Bootstrap -->
    <link href="./lib/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 条件注释 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
</head>

<body>


    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="./lib/js/jquery.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="./lib/js/bootstrap.min.js"></script>
</body>

</html>

全局样式

container容器

Bootstrap 需要为页面内容和栅格系统包裹一个 .container 容器。默认带了15px的padding值。

.container 类用于固定宽度并支持响应式布局的容器。

<div class="container">
  ...
</div>

.container-fluid 类用于 100% 宽度,占据全部视口(viewport)的容器。

<div class="container-fluid">
  ...
</div>

这两种 容器类不能互相嵌套。

栅格系统 (重要)

栅格系统,也叫网格系统

栅格系统: 是BS实现响应式的核心所在 其底层也是媒体查询 
栅格系统: 不管在什么大小的容器里面,都将这个容器分为12份,在不同大小屏幕里面,占的份数不同
最终目的: 在任何大小的屏幕上 都有较好的浏览体验

// 假设我现在有12个盒子

如果是大屏幕设备, 每行放 6 个 div,  可以放两排
如果是中屏设备,   每行放 4 个 div,  可以放三排 
如果是小屏设备,   每行放 3 个 div,  可以放四排
如果是超小屏设备, 每行放 2 个 div,  可以放六排

大屏    6个div  两    12份  一个div占2份 放6个     大屏上:  16.666% 浮动    
中屏    4个div  三    12份  一个div占3份 放4个     中屏上:  25%   浮动
小屏    3个div  四    12份  一个div占4份 放3个     小屏上:  33.33% 浮动
超小屏  2个div  六    12份  一个div占6份 放2个     超小屏:  50%  浮动

不同大小屏幕里面,每一个盒子占多少份 (一行放多少个 然后直接拿12除以一行的个数就行了)

大屏 一个盒子占2份      .col-lg-xx
中屏 一个盒子占3份      .col-md-xx
小屏 一个盒子占4份      .col-sm-xx
超小屏 一个盒子占6份    .col-xs-xx

  • .row用于抵消.container容器的15px的padding值
  • 可以在.row中嵌套column

栅格系统常用类(总共12列)

类名 例子 解释
.col-xs-xx .col-xs-6 在超小屏幕(及以上)生效
.col-sm-xx .col-sm-6 在小屏幕(及以上)生效
.col-md-xx .col-md-6 在中屏幕(及以上)生效
.col-lg-xx .col-lg-3 在大屏幕及生效,占1/4
.col-lg-xx .col-lg-4 在大屏幕及生效,占1/3
.col-lg-xx .col-lg-5 在大屏幕及生效,占1/2
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <!-- 当使用IE浏览器时,自动调用IE浏览器的最高内核 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>栅格</title>

    <!-- Bootstrap -->
    <link href="./lib/css/bootstrap.min.css" rel="stylesheet">
    <style>
        div[class^="col"] {
            box-sizing: border-box;
            border: 1px solid red;
            margin-left: -1px;
            margin-bottom: -1px;
        }
    </style>

</head>

<!-- 栅格系统:默认把屏幕分成12份 -->
<!-- 极小屏幕:width < 768px -->
<!-- 小屏幕:768px <= width < 992px -->
<!-- 中屏幕:992px <= width < 1000px -->
<!-- 大屏幕:width > 1000px -->
<!-- 样式只在比它大的屏幕下是有效的,在比他小的屏幕上无效 -->
<!-- 移动端优先,在没有写什么容器的情况下,默认是手机端xs屏幕 -->
<!-- 如果lg屏幕未定义,就用md屏幕的,始终去用他小一级屏幕的样式 -->

<body>
    <!-- 1.先写大容器(版心或者全屏) -->
    <!-- 版心 -->
    <div class="container">
        <!-- 2.再写行 -->
        <div class="row">
            <!-- 3.根据不同的需求写列 -->
            <!-- 在极小屏幕下每个盒子占4份,刚好占满 -->
            <h3>极小</h3>
            <div class="col-xs-4">1</div>
            <div class="col-xs-4">2</div>
            <div class="col-xs-4">3</div>
            <div class="col-xs-4">4</div>
            <div class="col-xs-4">5</div>
            <div class="col-xs-4">6</div>
        </div>

        <div class="row">
            <h3>小</h3>
            <!-- 3.根据不同的需求写列 -->
            <!-- 在小屏幕下每个盒子占2份,刚好占满 -->
            <div class="col-sm-2">1</div>
            <div class="col-sm-2">2</div>
            <div class="col-sm-2">3</div>
            <div class="col-sm-2">4</div>
            <div class="col-sm-2">5</div>
            <div class="col-sm-2">6</div>
        </div>
        <div class="row">
            <h3>中等</h3>
            <!-- 3.根据不同的需求写列 -->
            <!-- 在中屏幕下每个盒子占2份,刚好占满 -->
            <div class="col-md-2">1</div>
            <div class="col-md-2">2</div>
            <div class="col-md-2">3</div>
            <div class="col-md-2">4</div>
            <div class="col-md-2">5</div>
            <div class="col-md-2">6</div>
        </div>
        <div class="row">
            <h3>大</h3>
            <!-- 3.根据不同的需求写列 -->
            <!-- 在大屏幕下每个盒子占2份,刚好占满 -->
            <div class="col-lg-2">1</div>
            <div class="col-lg-2">2</div>
            <div class="col-lg-2">3</div>
            <div class="col-lg-2">4</div>
            <div class="col-lg-2">5</div>
            <div class="col-lg-2">6</div>
        </div>
    </div>
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="./lib/js/jquery.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="./lib/js/bootstrap.min.js"></script>
</body>

</html>

Bootstrap组件——分页

    <!-- 定义一个分页 -->
    <ul class="pagination">
        <li>
            <a href="#" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
            </a>
        </li>
        <li class="disabled"><a href="#">1</a></li>
        <li class="active"><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">&raquo;</span>
            </a>
        </li>
    </ul>
    <!-- </nav> -->

    <nav aria-label="...">
        <ul class="pagination">
            <li class="disabled">
                <!-- 禁用 -->
                <span>
                    <span aria-hidden="true">&laquo;</span>
                </span>
            </li>
            <!-- 激活 -->
            <li class="active">
                <span>1 <span class="sr-only">(current)</span></span>
            </li>
            ...
        </ul>
    </nav>

    <ul class="pager">
        <li><a href="#">Previous</a></li>
        <li><a href="#">Next</a></li>
    </ul>
    <ul class="pager">
        <li class="previous"><a href="#">Older</a></li>
        <li class="next"><a href="#">Newer</span></a></li>
    </ul>

Bootstrap组件——进度条

    <div class="progress">
        <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"
            style=" 60%;">
            <span class="sr-only">60% Complete</span>
            60%
        </div>
    </div>

Bootstrap组件——列表

 <ul class="list-group">
        <li class="list-group-item">
            <span class="badge">14</span>
            Cras justo odio</li>
        <li class="list-group-item">Dapibus ac facilisis in</li>
        <li class="list-group-item">Morbi leo risus</li>
        <li class="list-group-item">Porta ac consectetur ac</li>
        <li class="list-group-item">Vestibulum at eros</li>
    </ul>
    <div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
            Panel content
        </div>
        <div class="panel-footer">
            Panel content
        </div>
    </div>

    <div class="panel panel-default">
        <!-- Default panel contents -->
        <div class="panel-heading">Panel heading</div>
        <div class="panel-body">
            <p>...</p>
        </div>

        <!-- Table -->
        <table class="table">
            <tr>
                <td>阿斯蒂芬</td>
                <td>阿斯蒂芬</td>
            </tr>
            <tr>
                <td>阿斯蒂芬</td>
                <td>阿斯蒂芬</td>
            </tr>
            <tr>
                <td>阿斯蒂芬</td>
                <td>阿斯蒂芬</td>
            </tr>
        </table>
    </div>


    <!-- 16:9 aspect ratio -->
    <div class="embed-responsive embed-responsive-16by9">
        <iframe class="embed-responsive-item" src="..."></iframe>
    </div>

    <!-- 4:3 aspect ratio -->
    <div class="embed-responsive embed-responsive-4by3">
        <iframe class="embed-responsive-item" src="..."></iframe>
    </div>

Bootstrap组件——导航条

 <nav class="navbar navbar-default navbar-fixed-top">
        <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" id="mytab">
                    <li class="active"><a href="#">首页 <span class="sr-only">(current)</span></a></li>
                    <li class="dropdown active">
                        <a href="#" class="dropdown-toggle " data-toggle="dropdown" role="button" aria-haspopup="true"
                            aria-expanded="false">功能 <span class="caret"></span></a>
                        <ul class="dropdown-menu">
                            <li><a href="#"><small class="text-muted">业务功能</small></a></li>
                            <li><a href="#">信息建立</a></li>
                            <li><a href="#">信息查询</a></li>
                            <li><a href="#">信息管理</a></li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#"><small class="text-muted">系统功能</small></a></li>
                            <li><a href="#">设置</a></li>
                        </ul>
                    </li>
                    <li><a href="#">帮助 <span class="sr-only">(current)</span></a></li>
                </ul>
                <form class="navbar-form navbar-left">
                    <div class="form-group">
                        <input type="text" class="form-control" placeholder="用户名...">
                        <input type="text" class="form-control" placeholder="密码...">
                    </div>
                    <button type="submit" class="btn btn-default">登录</button>
                </form>
            </div><!-- /.navbar-collapse -->
        </div><!-- /.container-fluid -->
    </nav>

Bootstrap组件——轮播图

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <!-- 当使用IE浏览器时,自动调用IE浏览器的最高内核 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap模板</title>

    <!-- Bootstrap -->
    <link href="./lib/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 条件注释 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
    <style>
        .carousel-inner img {
            margin: 0 auto;
        }

        #carousel-example-generic {
             500px;
        }
    </style>
</head>

<body>
    <!-- 轮播组件的id要和下面所有id都相同 -->
    <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
        <!-- 小点点 -->
        <ol class="carousel-indicators">
            <!-- data-slide-to="0":索引,从0开始 -->
            <!-- 小点点0对应图片的l1 -->
            <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>

        <!-- 图片内容 -->
        <div class="carousel-inner" role="listbox">
            <div class="item active">
                <img src=".https://user-gold-cdn.xitu.io/2020/4/15/1717dc0b3184f732?w=720&h=350&f=jpeg&s=102995"
                    alt="...">
                <!-- 图片中的文字 -->
                <div class="carousel-caption">第一张</div>
            </div>
            <div class="item">
                <img src="https://user-gold-cdn.xitu.io/2020/4/15/1717dc10c20da4f6?w=720&h=350&f=jpeg&s=92997"
                    alt="...">
                <div class="carousel-caption">第二张</div>
            </div>
            <div class="item">
                <img src="https://user-gold-cdn.xitu.io/2020/4/15/1717dc15c7ddd104?w=720&h=350&f=jpeg&s=116124"
                    alt="...">
                <div class="carousel-caption">第三张</div>
            </div>
        </div>

        <!-- 控制箭头 -->
        <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>

    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="./lib/js/jquery.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="./lib/js/bootstrap.min.js"></script>
</body>
<script>
    $('.carousel').carousel({
        interval: 2000
    })
</script>

</html>
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <!-- 当使用IE浏览器时,自动调用IE浏览器的最高内核 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap模板</title>

    <!-- Bootstrap -->
    <link href="./lib/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 条件注释 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
    <style>
        .carousel {
            height: 500px;
        }

        .carousel .item {
            height: 500px;
        }

        .carousel .item img {
             100%;
        }
    </style>
</head>

<body>
    <!-- 轮播组件的id要和下面所有id都相同 -->
    <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
        <!-- 小点点 -->
        <ol class="carousel-indicators">
            <!-- data-slide-to="0":索引,从0开始 -->
            <!-- 小点点0对应图片的l1 -->
            <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>

        <!-- 图片内容 -->
        <div class="carousel-inner" role="listbox">
            <div class="item active">
                <img src="http://img.mukewang.com/5412ad400001e52014280484.jpg" alt="...">
                <!-- 图片中的文字 -->
                <div class="carousel-caption">第一张</div>
            </div>
            <div class="item">
                <img src="http://img.mukewang.com/5412ad7c0001d2eb10880541.jpg" alt="...">
                <div class="carousel-caption">第二张</div>
            </div>
            <div class="item">
                <img src=" http://img.mukewang.com/5412ae5c0001653b12800644.jpg" alt="...">
                <div class="carousel-caption">第三张</div>
            </div>
        </div>

        <!-- 控制箭头 -->
        <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>

    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="./lib/js/jquery.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="./lib/js/bootstrap.min.js"></script>

</body>
<script>
    $('.carousel').carousel({
        interval: 2000
    })
</script>

</html>

思维导图及离线版的bootstrap
https://ww.lanzous.com/ibg069c

原文地址:https://www.cnblogs.com/xiaoaitongxue/p/12708124.html