05-响应式布局

响应式布局

作用:只写一套代码,可以在PC端跟移动端运行

原理:根据屏幕的宽度不同,去使用不同的CSS(媒体查询)

那响应式布局是如何实现的呢?又能在开发中给我们带来什么便利呢?讲到响应式布局,需要先了解一下媒体查询。因为响应式布局的本质就是媒体查询。

媒体查询

1.1什么是媒体查询
  • 媒体查询( Media Query )是CSS3新语法。
  • @media可以针对不同的屏幕尺寸设置不同的样式
  • @media可以针对不同的屏幕尺寸设置不同的样式
  • 当你重 置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面
  • 目前针对很多苹果手机、Android手机 ,平板等设备都用得到多媒体查询
1.2为什么要使用媒体查询

当我们使用rem的时候,是通过设置html根标签的字体fontsize来换算单位的。但是当屏幕尺寸发生变化时,html的根标签字体大小不会主动跟着改变,需要我们使用其他的工具,实现html根标签字体大小随着屏幕尺寸的变化而变化。这个工具就是媒体查询

1.3作用以及用法
  1. 手机屏幕大小不同,分辨率不同, 如何设置不同的HTML标签字号?

    答:媒体查询能够检测视口的宽度,然后编写差异化的 CSS 样式;当某个条件成立, 执行对应的CSS样式

  2. 目标::能够使用媒体查询设置差异化CSS样式

  3. 设置媒体查询CSS的语法:

    练习一:

    设置在375px宽的屏幕上,字体大小为40px

        <style>
            /* 设置媒体查询CSS的语法 */
            /* @media (媒体特性) {
                选择器 {
                    CSS属性
                }
            } */
            @media (width:375px) {
                html {
                    font-size: 40px;
                }
            }
        </style>
    

    练习二:在屏幕宽度为375px的屏幕中显示背景颜色为yellow;在宽度为360的屏幕中显示背景颜色为red

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>媒体查询</title>
    </head>
    <style>
        /* 定义媒体查询 */
        @media (width:375px) {
            html {
                background-color: yellow;
            }
        }
    
        @media (width:360px) {
            html {
                background-color: red;
            }
        }
    </style>
    
    <body>
    
    </body>
    
    </html>
    
    • 媒体特性是指设置设备的屏幕宽度,如上例中的 “@media (width:375px)”,是指在宽度为375px的设备中,html的字号设置为40px,相当于1rem=40px
1.4常用推荐写法

上方展示的时媒体查询最简洁的写法,现在推荐的时常用以及较为推荐的写法:

语法:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>推荐写法</title>
    <style>
        /* 最简洁的写法 */
        @media (width:375px) {
            html {
                background-color: yellow;
            }
        }

        /* 常见和推荐的写法 */
        @media screen and (width:360px) {
            html {
                background-color: red;
            }

        }
    </style>
</head>

<body>

</body>

</html>

媒体查询不仅可根据屏幕的宽度来调用不同的CSS,也可以设置高度来调用,只需要将宽度改成高度即可。

语法:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>推荐写法</title>
    <style>
        /* 最简洁的写法 */
        @media (width:375px) {
            html {
                background-color: yellow;
            }
        }

        /* 常见和推荐的写法 */
        @media screen and (width:360px) {
            html {
                background-color: red;
            }

        }

        /* 不仅可以针对宽度,还可以针对高度 */
        @media screen and (height:844px) {
            html {
                background-color: greenyellow;
            }

        }
    </style>
</head>

<body>

</body>

</html>
1.5媒体查询指定区间写法

刚才介绍的只是当屏幕宽度处于一个特定的值时,出现相应的CSS样式,那是否可以指定一个区间,让屏幕宽度位于这个区间时,显示出相应的样式呢?让我们来感受一些媒体查询的指定区间写法。

1.5.1 当屏幕宽度小于100px

屏幕小于100px,也就是截至数值最大为100px时

    <style>
        /* 1.当屏幕宽度小于100px时变成yellow */
        @media screen and (max-width:100px) {
            html {
                background-color: yellow;
            }
        }
	</style>

1.5.2 当屏幕宽度大于800px

	<style>
        /* 当屏幕宽度大于800px时显示red */
        @media screen and (min-width:800px) {
            html {
                background-color: red;
            }
        }
	 </style>	

1.5.3 当屏幕宽度大于400px且小于800px

填写多个属性时,中间使用“and”连接即可

<style>       
/* 当屏幕宽度大于400px,小于800px时,显示pink */
        @media screen and (min-width:400px) and (max-width: 800px) {

            html {
                background-color: pink;
            }
        }
  </style>	

综合代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>媒体查询指定区间写法</title>
    <style>
        /* 1.当屏幕宽度小于100px时变成yellow */
        @media screen and (max-width:100px) {
            html {
                background-color: yellow;
            }
        }

        /* 2.当屏幕宽度大于800px时显示red */
        @media screen and (min-width:800px) {
            html {
                background-color: red;
            }
        }

        /* 3.当屏幕宽度大于400px,小于800px时,显示pink */
        @media screen and (min-width:400px) and (max-width: 800px) {

            html {
                background-color: pink;
            }
        }
    </style>
</head>

<body>

</body>

</html>
1.6媒体查询练习

简单的了解过媒体查询之后。做些简单的练习尝试下自己是否可以完成相应的训练。

题目:如何做到在不同尺寸的屏幕中,div盒子显示出如下方图片中的效果呢?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5yjiGWl5-1648710250300)(05-响应式布局.assets/1647942060915.png)]

完成代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>练习</title>
    <style>
        div {
            height: 100px;
            background-color: aqua;
            margin-bottom: 10px;
        }

        /* 屏幕小于400ox的时候 */
        @media screen and (max-width:400px) {}

        /* 屏幕在400-800之间 */
        @media screen and (min-width:400px) and (max-width:800px) {
            div {
                width: 50%;
                float: left;
            }
        }

        /* 当屏幕大于800px时 */
        @media screen and (min-width:800px) {

            div {
                width: 25%;
                float: left;
            }
        }
    </style>
</head>

<body>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
</body>

</html>

Bootstrap

Bootstrap包含了一个响应式的、移动设备优先的、不固定网格系统,可以随着设备或视口大小的增加而适当地扩展到12列。它包含了用于简单的布局选项的预定义类,也包含了用于生成更多语义布局的功能强大的混合类

Bootstrap那么强大,那如何进行使用呢?

Bootstrap的使用

网站链接https://v3.bootcss.com/

  1. 打开网站链接,进入到Bootstrap网站→点击入门,开始下载bootstrap(下载第一个:用于生产环境的bootstrap)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1tZEOGp-1648710250300)(05-响应式布局.assets/1648104881966.png)]

  2. 下载解压之后,将其中的三个文件引入到html文件中

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vYpqWKHK-1648710250301)(05-响应式布局.assets/1648105524326.png)]

    <!--CSS文件需要用link引入到文件中 -->
    <link rel="stylesheet" href="./css/bootstrap.css">
    <body>    
    <!--js文件是需要引入到script中-->
        <script src="./js/jquery.js"></script>
        <script src="./js/bootstrap.js"> </script>
        <!-- 这两个文件的引入顺序不能乱,不然会导致出错 
        jquery.js在上面-->
    </body>
    
  3. 验证是否引入成功

    要验证是否成功引入bootstrap,直接在bootstrap的“组件”中复制代码测试一下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6QsFm1b-1648710250301)(05-响应式布局.assets/1648105877892.png)]

    在组件→导航条中直接复制该代码进行测试,中间的红色方是代码的效果图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AqI1P2uq-1648710250301)(05-响应式布局.assets/1648105972672.png)]

  4. 直接复制该代码放在body中进行测试,可以得出以下结果,可以看出已经是跟bootstra网站中的效果是一致的,表明我们已经成功引入。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1QWBqyUD-1648710250301)(05-响应式布局.assets/1648106140561.png)]

    代码:(因css文件跟js文件放置位置不同,可能需要重新调整一下路径进行使用)

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link rel="stylesheet" href="./css/bootstrap.css">
    </head>
    
    <body>
        <!-- 导航条 -->
        <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">
                        <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>
    
        <script src="./js/jquery.js"></script>
        <script src="./js/bootstrap.js"> </script>
        <!-- 这两个文件的引入顺序不能乱,不然会导致出错 
        jquery.js在上面-->
    </body>
    
    </html>
    

我们先重点了解一下栅格系统,这个是实现响应式布局的核心,本质还是借用媒体查询使用。

Bootstrap栅格系统(Grid System)相关类

  1. container类表示栅格。使用container类能够获得Bootstrap默认设置的对齐(alignment)和内边距(padding)样式。
  2. 使用.row来创建一行,每行又分为多个列(12)。
  3. 内容应该放置在列内,且只有列可以是行的直接子元素 。
  4. 网格系统是通过指定你想要横跨的十二个可用的列来创建的。例如,要创建三个相等的列,则使用三个.col-md-4。
  5. 列通过内边距(padding)来创建列内容之间的间隙。该内边距是通过.rows上的外边距(margin)取负值得到。就是说:你想减少列间距,用负的margin来写。

Bootstrap栅格系统划分的依据

栅格系统是通过媒体查询对用户使用的屏幕大小进行检测之后,按照屏幕尺寸的不同进行自适应,划分为分为四种屏幕:

  1. 四种屏幕:
  • 超小屏幕 xs 手机 (<768px)

  • 小屏幕 sm 平板 (≥768px)

  • 中等屏幕 md 桌面显示器 (≥992px)

  • 大屏幕 lg 大桌面显示器 (≥1200px)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-631nwlwO-1648710250302)(05-响应式布局.assets/1647942807670.png)]

  1. 类前缀:表示在这四种屏幕中,列占据多少份(总份数为12)
  • .col-xs -列数
  • .col-sm -列数
  • .col-md -列数
  • .col-lg -列数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-16Zw1IkR-1648710250302)(05-响应式布局.assets/1648087567219.png)]

栅格化引入的代码以及分析

1.栅格化的完整使用代码:
  • 栅格化需要使用固定类名“container”包起来,接下来是类名“row”是行的意思。在栅格化中,一行默认为12列

  • 接下来的“col-lg-3”中,col是列“ columns”的缩写,“lg”是大屏幕的缩写,“3”的意思是一行默认的12列除以3,等于一行存在四个子元素。

    完整的解读:在大屏幕(lg)中,一行显示4(12/3)个元素

  • 在下方的代码中,只设置了在大屏幕、中等屏幕跟极小屏幕中元素的栅格化设置,没有设置小屏幕的显示方式。如果没有设置元素某种尺寸中的显示方式,系统会默认跟随更小的屏幕。也就是小屏幕的显示方式会跟随极小屏幕的设置。

  • 同时设置元素在多种屏幕中的显示方式,中间添加空格即可。

    <div class="container">
            <div class="row ">
                <div class="col-lg-3 col-md-6 col-xs-12 bottom"><img src="./images/pro1.jpg" alt="" class="img-rounded">
                </div>
                <div class="col-lg-3 col-md-6 col-xs-12 bottom"><img src="./images/pro2.jpg" alt="" class="img-rounded">
                </div>
                <div class="col-lg-3 col-md-6 col-xs-12 bottom"><img src="./images/pro3.jpg" alt="" class="img-rounded">
                </div>
                <div class="col-lg-3 col-md-6 col-xs-12 bottom"><img src="./images/pro4.jpg" alt="" class="img-rounded">
                </div>
            </div>
        </div>

pg" alt=“” class=“img-rounded”>









  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值