响应式布局总结

写在前面的话:响应式布局总结的根本是媒体查询,只要搞明白媒体查询,那么响应式的页面布局也就简简单单,轻轻松松。

以下为bootstrap 里面 container的媒体查询代码:将屏幕分为4部分

1.什么是响应式

所谓响应式页面,是指一套页面,能够适配多种终端,比如宽屏pc电脑,平板,手机,听起来极为的棒,但是,响应式布局极容易出现各式各样的兼容问题,目前社会主流布局方案,依然是单独制作移动端页面,所以对响应式,只要抱着能看懂,能做出简单的网页布局即可。

2.响应式基础知识

bootstrap框架

只要搞明白bootstrap框架,那么响应式你已经成功。

bootstrap框架能够帮助我们只需要调用类名,就可以轻松实现某种效果,极为便利。

但是要使用bootstrap框架必须要遵守bootstrap框架的规范。

bootstrap框架基础知识

栅格:

什么是栅格?想象我们小时候的田字格本子,栅格就是一条条竖线,将容器container平均的分成12份,每一份所占的大小是相同的,这样我们在布局盒子时,只需要确定盒子占屏幕宽度的几分,就可以实现响应式布局

容器:

container 响应式页面结构全部都要包含在container容器的盒子里,bootstrap框架,内置媒体查询,通过检测屏幕宽度,来更改container的宽度,从而达到响应式的目的,所以响应式布局,最外层的盒子一定是container container默认将盒子大小平均分成12份。

行 :

row row能够抵消container自带的内边距padding:左右15px的内边距

列:

column 通过控制col-xs-份数 来控制盒子的宽度大小

屏幕划分:

设备划分尺寸区间
超大屏 lg>=1200px
中屏 md992px - 1200px
小屏 sm768px-992px
超小屏幕 xs<768px

屏幕划分便是响应式依据媒体查询的地方,可以通过类名来控制子盒子占据父盒子宽度的几分之几。

例如:我想要一个盒子,在超大屏下,占5份,在中屏下占8份,在小屏下占2份,在超小屏幕下占9份。

使用:bootstrap

第一,网站下载 推荐网站 Bootstrap中文网

第二:文件中引入 <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css">

第三:创建容器 .container

第四:

 <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->

 以上代码可有可无,有则更好,条件注释:主要是为了照顾ie9以下的浏览器版本

<body>
    <!-- bootstrap 栅格系统   默认将container划分成12列  超大屏  lg   中屏   md   小屏  sm   超小屏   xs -->
    <!-- 如何使用栅格系统完成布局     因为我们要做的是一个页面来响应不同的屏幕尺寸,所以我们需要考虑四个方面,分别是超大屏,中等屏幕(pc),小屏幕(平板),超小屏幕(手机)  那么我们就需要分别排版,先排超大屏幕下的效果,再中等,再小屏,最后再超小屏幕,这样就实现了响应式布局    记住,划分份数是对列进行划分,需要在前头加上col -->
    <div class="container">
        <div class="row">
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">1</div>
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">2</div>
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">3</div>
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">4</div>
            <!-- <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">1</div>
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">2</div>
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">3</div>
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">4</div> -->
        </div>
        <div class="row">
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">1</div>
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">2</div>
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">3</div>
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">4</div>
        </div>

    </div>
</body>

列嵌套

在排版中,我们经常性的会遇到这种排版情况

左边一个盒子,右边一个盒子,左边盒子里面又有两个小盒子。

这就是所谓的列嵌套。

 

如何实现列嵌套?

在列的里面,再放一个行,列嵌套里,永远把父盒子分成12份 ,不管父盒子有多大,只要是容器,都被划分成12份

 代码:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <!-- 一定不要忘记引入bootstrap 的样式文件 -->
    <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
    <title>Document</title>
    <style>
        .one {
            height: 50px;
            background-color: pink;
            line-height: 50px;
        }

        .two {
            height: 50px;
            background-color: blue;
            line-height: 50px;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="row">
            <!-- 要求:列嵌套,在这一列中,再放入两个子盒子,分别占父盒子的一半,记住:列嵌套,父盒子也是划分成12分 -->
            <div class="col-md-6 one">
                <!-- 此时我们会发现,子盒子靠左侧有很大的padding值,这个padding值一个是父盒子的,另一个是自身的,所以我们需要添加row来消除父盒子的padding值 -->
                <!-- <div class="col-md-6">1</div>
                <div class="col-md-6">2</div> -->
                <div class="row">
                    <!-- 添加row之后,会消除父盒子padding值得影响,同时也让子盒子的高度默认等于是父盒子的高度 -->
                    <div class="col-md-6">1</div>
                    <div class="col-md-6">2</div>
                </div>
            </div>
            <div class="col-md-6 two">2</div>
        </div>
    </div>
</body>

</html>

列偏移:offset

列偏移更容易理解,就好像我们推东西一样,现在是这样:

 我想让它向右平移五份,那么只需要加 offset-5就可以

<div class="col-md-4 col-md-offset-5">左侧</div>

如图:

 

列排序

push 推 pull 拉

这个内容用的不多。

要求,左边的盒子推到右边,右边的盒子推到左边,代码演示:

<body>
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-md-push-4">左边</div>
            <div class="col-md-4 col-md-pull-8">右边</div>
        </div>
    </div>
</body>

</html>

效果图:

 

重点:显示与隐藏

隐藏 hidden-屏幕代号 含义:在当前屏幕下隐藏 记住 没有向上或者向下兼容的特点

比如: hidden-xs 意思是在超小屏幕下隐藏,那么 在其他的屏幕下就会显示

显示 visible-屏幕代号 含义:在当前屏幕下显示 ,那么在其他屏幕宽度上就不显示 同隐藏一致

例:visible-md 意思是在中等屏幕下显示,那么在其他的屏幕下是隐藏的

<div class="container">
        <div class="row">
            <div class="col-xs-3">
                <span class="visible-lg">我会显示哦</span>
            </div>
            <div class="col-xs-3">2</div>
            <div class="col-xs-3 hidden-md hidden-xs">我会变魔术哦</div>
            <div class="col-xs-3">4</div>
        </div>
    </div>

以上便是响应式全部内容

补充内容:

 在bootstrap网站上,有很多可以我们直接拿过来就可以使用的样式,甚至是字体图标,只要复制类名,然后直接使用即可,下面的阿里百秀中会使用一些样式

 

响应式案例:阿里百秀

1.文件夹准备工作

 

2.引入bootstrap样式文件 新建index.css 并引入

 <!--[if lt IE 9]>
      <script src="https://fastly.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://fastly.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="./css/index.css">

3.布局分析

通过放大和缩小页面,我们会发现,在中等屏幕992px以上和大屏幕时,页面的布局时一样的,所以我们布局pc页面时,可以直接从col-md开始不需要再去书写col-lg 省去很多麻烦。

首先划分为三列 各占 2 :7 :3 分别叫做 左侧,中间和右侧

先说左侧排版布局:

左侧 上面一个图片,我们可以用a链接包裹起来,下面直接放一个无序列表即可

中间 排版,我们可以分为上下两个大的模块 其中上面的模块 用无序列表,给小li加浮动,给第一个小li 宽度设为50% 其他的小li宽度给25% 高度固定死

下面我们会发现依旧可以用bootstrap划分成 9:3的份数,然后开始排版。

右侧 我们与左侧一样,按照从上到下开始排版,特别注意 “热搜”这个地方,我们不需要再写样式,可以直接去bootstrap网站上找相似的样式,然后调用类名即可。

如此,我们在pc端的网页就做完了。

但是响应式,我们会关注,在屏幕缩小,进入到小屏幕,有哪些盒子会发生变化。

 代码:

 

如图,当我们进入小屏幕的时候,导航栏和我们的logo会发生变化。所以我们应该把图片的宽度设置为max-width:100% 不让图片缩放

至于ul和小li的布局发生改变,我们可以通过媒体查询来改变,当屏幕进入小屏幕时,页面元素应该如何变化。

 代码:

/* 当我们的屏幕进入平板小屏幕或者手机超小屏幕的时候,导航栏要求一排显示, 且宽度为20% */
@media screen and (max-width:991px) {
    .header-nav {
        margin-bottom: 10px;
    }

    .header-nav li {
        float: left;
        width: 20%;
    }
}

小屏幕设计完成后,我们继续缩放,看在超小屏幕也就是手机端会有那些变化。

我们会发现,logo图片消失,取而代之的是文字 还有底部会有文字隐藏起来 此处我们可以通过visible和hidden来实现

还有中间部分的新闻模块,我们会发现第一个图片宽度变为100% 其他的变为50% 我们也可以通过媒体查询来实现

 进入超小屏幕后的媒体查询代码:

/* 进入超小屏幕的时候 <768的时候,文字大小改成14px*/
@media screen and (max-width:767px) {
    .header-nav li a {
        font-size: 14px;
    }

    /* 当进入超小屏幕时,第一个li宽度100%  其他的li宽度为50% */
    .news ul li {
        width: 50%;
    }

    .news ul li:nth-child(1) {
        width: 100%;
    }

    .publish-txt h3 {
        font-size: 14px;
    }

}

整体代码如下

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.0">
    <title>alibaixiu</title>
    <!--[if lt IE 9]>
      <script src="https://fastly.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://fastly.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="./css/index.css">
</head>

<body>
    <div class="container">
        <div class="row">
            <!-- //我们要分成三列  分别是  header   article   aside -->
            <!-- 为什么直接写md而不写lg  因为lg下和md下展现的是一样的,所以我们只需要写md就可以了 -->
            <!-- 左边 -->
            <header class="col-md-2">
                <div class="logo">
                    <a href="javascript:;">
                        <img src="./images/logo.png" alt="" class="hidden-xs">
                        <span class="visible-xs logo-titlt">阿里百秀</span>
                    </a>
                </div>
                <ul class="header-nav clearfix">
                    <li><a href="javascript:;" class="glyphicon glyphicon-camera">生活馆</a></li>
                    <li><a href="javascript:;" class="glyphicon glyphicon-picture">自然汇</a></li>
                    <li><a href="javascript:;" class="glyphicon glyphicon-phone">科技潮</a></li>
                    <li><a href="javascript:;" class="glyphicon glyphicon-queen">奇趣事</a></li>
                    <li><a href="javascript:;" class="glyphicon glyphicon-education">美食杰</a></li>
                </ul>
            </header>
            <!-- 中间 -->
            <article class="col-md-7">
                <!-- 新闻模块 -->
                <div class="news clearfix">
                    <ul>
                        <li><a href="javascript:;">
                                <img src="./uploads/lg.png" alt="">
                                <p>阿里百秀</p>
                            </a></li>
                        <li><a href="javascript:;">
                                <img src="./uploads/1.jpg" alt="">
                                <p>奇了 成都一小区护卫长得像马云 市民纷纷求合影</p>
                            </a></li>
                        <li><a href="javascript:;">
                                <img src="./uploads/2.jpg" alt="">
                                <p>奇了 成都一小区护卫长得像马云 市民纷纷求合影</p>
                            </a></li>
                        <li><a href="javascript:;">
                                <img src="./uploads/3.jpg" alt="">
                                <p>奇了 成都一小区护卫长得像马云 市民纷纷求合影</p>
                            </a></li>
                        <li><a href="javascript:;">
                                <img src="./uploads/4.jpg" alt="">
                                <p>奇了 成都一小区护卫长得像马云 市民纷纷求合影</p>
                            </a></li>

                    </ul>
                </div>
                <!-- 发表模块 -->
                <div class="publish">
                    <div class="row">
                        <div class="publish-txt col-sm-9">
                            <h3>生活馆 关于指甲的10个健康知识 你知道几个?</h3>
                            <p class="text-muted hidden-xs">alibaixiu 发布于 2015-11-23</p>
                            <p class="hidden-xs">指甲是经常容易被人们忽略的身体部位, 事实上从指甲的健康状况可以看出一个人的身体健康状况, 快来看看10个暗藏在指甲里知识吧!</p>
                            <p class="text-muted">阅读(2417)评论(1)赞 (18) <span class="hidden-xs">标签:健康 / 感染 / 指甲 / 疾病 / 皮肤
                                    / 营养 / 趣味生活</span> </p>
                        </div>
                        <div class="publish-img col-sm-3 hidden-xs">
                            <a href="#">
                                <img src="./uploads/3.jpg" alt="">
                            </a>
                        </div>
                    </div>
                    <div class="row">
                        <div class="publish-txt col-sm-9">
                            <h3>生活馆 关于指甲的10个健康知识 你知道几个?</h3>
                            <p class="text-muted hidden-xs">alibaixiu 发布于 2015-11-23</p>
                            <p class="hidden-xs">指甲是经常容易被人们忽略的身体部位, 事实上从指甲的健康状况可以看出一个人的身体健康状况, 快来看看10个暗藏在指甲里知识吧!</p>
                            <p class="text-muted">阅读(2417)评论(1)赞 (18) <span class="hidden-xs">标签:健康 / 感染 / 指甲 / 疾病 / 皮肤
                                    / 营养 / 趣味生活</span> </p>
                        </div>
                        <div class="publish-img col-sm-3 hidden-xs">
                            <a href="#">
                                <img src="./uploads/3.jpg" alt="">
                            </a>
                        </div>
                    </div>
                    <div class="row">
                        <div class="publish-txt col-sm-9">
                            <h3>生活馆 关于指甲的10个健康知识 你知道几个?</h3>
                            <p class="text-muted hidden-xs">alibaixiu 发布于 2015-11-23</p>
                            <p class="hidden-xs">指甲是经常容易被人们忽略的身体部位, 事实上从指甲的健康状况可以看出一个人的身体健康状况, 快来看看10个暗藏在指甲里知识吧!</p>
                            <p class="text-muted">阅读(2417)评论(1)赞 (18) <span class="hidden-xs">标签:健康 / 感染 / 指甲 / 疾病 / 皮肤
                                    / 营养 / 趣味生活</span> </p>
                        </div>
                        <div class="publish-img col-sm-3 hidden-xs">
                            <a href="#">
                                <img src="./uploads/3.jpg" alt="">
                            </a>
                        </div>
                    </div>
                    <div class="row">
                        <div class="publish-txt col-sm-9">
                            <h3>生活馆 关于指甲的10个健康知识 你知道几个?</h3>
                            <p class="text-muted hidden-xs">alibaixiu 发布于 2015-11-23</p>
                            <p class="hidden-xs">指甲是经常容易被人们忽略的身体部位, 事实上从指甲的健康状况可以看出一个人的身体健康状况, 快来看看10个暗藏在指甲里知识吧!</p>
                            <p class="text-muted">阅读(2417)评论(1)赞 (18) <span class="hidden-xs">标签:健康 / 感染 / 指甲 / 疾病 / 皮肤
                                    / 营养 / 趣味生活</span> </p>
                        </div>
                        <div class="publish-img col-sm-3 hidden-xs">
                            <a href="#">
                                <img src="./uploads/3.jpg" alt="">
                            </a>
                        </div>
                    </div>
                    <div class="row">
                        <div class="publish-txt col-sm-9">
                            <h3>生活馆 关于指甲的10个健康知识 你知道几个?</h3>
                            <p class="text-muted hidden-xs">alibaixiu 发布于 2015-11-23</p>
                            <p class="hidden-xs">指甲是经常容易被人们忽略的身体部位, 事实上从指甲的健康状况可以看出一个人的身体健康状况, 快来看看10个暗藏在指甲里知识吧!</p>
                            <p class="text-muted">阅读(2417)评论(1)赞 (18) <span class="hidden-xs">标签:健康 / 感染 / 指甲 / 疾病 / 皮肤
                                    / 营养 / 趣味生活</span> </p>
                        </div>
                        <div class="publish-img col-sm-3 hidden-xs">
                            <a href="#">
                                <img src="./uploads/3.jpg" alt="">
                            </a>
                        </div>
                    </div>


                </div>
            </article>
            <!-- 右侧 -->
            <aside class="col-md-3">
                <a href="javascript:;">
                    <img src="./uploads/zgboke.jpg" alt="">
                </a>
                <a href="javascript:;" class="hot">
                    <span class="btn btn-primary hot-bt">热搜</span>
                    <h4 class="text-primary">欢迎加入中国博客联盟</h4>
                    <p class="text-muted">这里收录国内各个领域的优秀博客,是一个全人工编辑的开放式博客联盟交流和展示平台......</p>
                </a>
            </aside>

        </div>
    </div>
</body>

</html>

css样式代码

@media screen and (min-width : 1280px) {
    .container {
        width: 1280px;
    }
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

a:hover {
    text-decoration: none;
}

ul {
    list-style: none;
}

img {
    vertical-align: middle;
    border: none;
}

body {
    background-color: #f5f5f5;
}

.container {
    background-color: #fff;
}

/* header模块 */
/* 因为列自带有左右的padding值,我们需要修改,因为我们不需要啊,所以设置为0 */
header {
    padding-left: 0 !important;
}

/* logo模块 */
.logo {
    background-color: #429ad9;
}

.logo img {
    /* width: 100%; */
    display: block;
    margin: 0 auto;
    max-width: 100%;
}

.logo-titlt {
    height: 50px;
    text-align: center;
    line-height: 50px;
    font-size: 18px;
    color: #fff;
}

/* 导航栏模块 */
.header-nav {
    background-color: #eee;
    border-bottom: 1px solid #ccc;
    margin-bottom: 0;
}

.header-nav li a {
    display: block;
    height: 50px;
    line-height: 50px;
    padding-left: 30px;
    color: #666;
    font-size: 16px;
}

.header-nav li a::before {
    vertical-align: -2px;
    margin-right: 5px;
}

.header-nav li a:hover {
    color: #333;
    background-color: #fff;
    text-decoration: none;
}

/* 当我们的屏幕进入平板小屏幕或者手机超小屏幕的时候,导航栏要求一排显示, 且宽度为20% */
@media screen and (max-width:991px) {
    .header-nav {
        margin-bottom: 10px;
    }

    .header-nav li {
        float: left;
        width: 20%;
    }
}

/* 进入超小屏幕的时候 <768的时候,文字大小改成14px*/
@media screen and (max-width:767px) {
    .header-nav li a {
        font-size: 14px;
    }

    /* 当进入超小屏幕时,第一个li宽度100%  其他的li宽度为50% */
    .news ul li {
        width: 50%;
    }

    .news ul li:nth-child(1) {
        width: 100%;
    }

    .publish-txt h3 {
        font-size: 14px;
    }

}

/* article模块 */
/* 新闻模块 */
.news {
    border-bottom: 1px solid #ccc;
}

.news li {
    float: left;
    height: 128px;
    width: 25%;
    padding-right: 10px;
    margin-bottom: 10px;
}

.news li:nth-child(1) {
    width: 50%;
    height: 266px;
}



.news li a {
    position: relative;
    display: block;
    width: 100%;
    height: 100%;
}

.news li a img {
    width: 100%;
    height: 100%;
}

.news li a p {
    position: absolute;
    bottom: 0;
    left: 0;
    height: 41px;
    width: 100%;
    margin: 0;
    color: #fff;
    font-size: 12px;
    background-color: rgba(0, 0, 0, .5);
    padding: 5px 10px;
}

.news li:nth-child(1) p {
    font-size: 20px;
    line-height: 41px;
    padding: 0 10px;
}


/* 发表模块  */
.publish .row {
    padding: 10px 0;
    border-bottom: 1px solid #ccc;
}



.publish-img a {
    display: block;
    width: 100%;
    height: 100%;
}

.publish-img a img {
    width: 100%;
    height: 100%;
}

/* 右侧aside */
aside a {
    display: block;
    width: 100%;
    margin-bottom: 20px;
}

aside a img {
    width: 100%;
}

.hot {
    display: block;
    padding: 0 20px 20px;
    border: 1px solid #ccc;
}

.hot .hot-bt {
    outline: none;
    border-radius: 0;
    margin-bottom: 20px;
}

.hot p {
    font-size: 12px;
}

.hot p:hover {
    color: #23527c;
}

以上就是本次响应式布局总结,感谢阅读。

编程的道路上,不只有疲惫,还有快乐和花朵。

我们都很努力,我们也都能成功

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值