zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    treeview十八般武艺,js选择和绑定权限树
    开源WebOS
    公交车路线查询系统后台数据库设计
    网页信息抓取
    一步一步打造WebIM(3)——性能测试
    WebBrowser介绍——Javascript与C++互操作
    .NET文档生成工具ADB[更新至2.3]
    一步一步打造WebIM(4)——Comet的特殊之处
    在SQL Server中对视图进行增删改
    开源企业即时通讯和在线客服
  • 原文地址:https://www.cnblogs.com/xiaoaitongxue/p/12708124.html
Copyright © 2011-2022 走看看