一文看懂响应式布局

简介: 笔记

响应式布局概念


响应式布局(Responsive design),意在实现不同屏幕分辨率的终端上浏览网页的不同展示方式。通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验。


响应式布局一 : Meta 标签



兼容性:IE9以及以上,其它浏览器没问题

主要通过设置以下几个值实现响应式

device-width 设备的宽度,根据当前设备的宽度设置宽度。

initial-scale 初始缩放

maximum-scale 最大缩放 即允许的最大缩放程度

minimum-scale 最小缩放 即允许的最小缩放程度

user-scalable 用户是否能改变页面缩放程度,如果设置为no,最大与最小缩放将被忽略

<meta name="viewport" content="width=device-width, 
                                   initial-scale=1.0, 
                                   maximum-scale=1.0, 
                                   minimum-scale=1.0, 
                                   user-scalable=no"
                                   >


响应式布局二 : media 媒体查询


兼容性:IE9以及以上,其它浏览器没问题

 /* 当文档宽度小于980的时候  小于或等于指定的宽度时,样式生效 */
        @media screen and (max-width: 980px) {
            .div1 { 
                width:500px;
             }
             /* 做一些其它的样式 */
        }
        /* 大于或等于指定宽度时,样式生效。 */
        @media screen and (min-width: 980px) {
            .div1 { 
                width:100px;
             }
        }
        /* 上面是单个,现在试试多个 屏幕在600px~900px之间时*/
        @media screen and (min-width:1000px) and (max-width:1200px){
            .div1{
                background:palegreen;
            }
        }
        /* not关键字 样式代码将被使用在除开打印与设备宽度小于980px下所有设备中*/
        @media not print and (max-width: 680px){
             .div3{
                background: chocolate;
            } 
        }

上面这些写在一个文件有些不好维护,那我们可以改变link标签,根据屏幕分辨率引入不同的css

<link rel="stylesheet" media="screen and (max-device-width:480px)"  href="./css/css1.css">
    <link rel="stylesheet" media="screen and (min-device-width:480px)"  href="./css/css2.css">

在屏幕分辨率小于等于480px的时候,使用css1,当屏幕分辨率大于480px,使用css2,分开会更好维护。


响应式布局三 : 百分比布局



根据屏幕大小自动适应,兼容性强大

  header{
            width: 100%;
            /* 百分比即是响应式 */
            height: 40px;
            background: green;
            color: white;
        }
        .div1{
            width: 50%;
            height: 200px;
            background: pink;
            color: white;
        }

需要注意的是图片处理

简单的解决方法可以使用百分比,但这样不友好,会放大或者缩小图片。那么可以尝试给图片指定的最大宽度为百分比。假如图片超过了,就缩小。假如图片小了,就原尺寸输出。

img { width: auto; max-width: 100%; }

用::before和::after伪元素 +content 属性来动态显示一些内容或者做其它很酷的事情,在 css3 中,任何元素都可以使用 content 属性了,这个方法就是结合 css3 的 attr 属性和 HTML 自定义属性的功能,根据不同的分辨率使用尺寸不同的图片

<img src="image.jpg"
     data-src-600px="image-600px.jpg"
     data-src-800px="image-800px.jpg"
     alt="">

css控制

@media (min-device-width:600px) {
    img[data-src-600px] {
        content: attr(data-src-600px, url);
    }
}
@media (min-device-width:800px) {
    img[data-src-800px] {
        content: attr(data-src-800px, url);
    }
}

附上百分比做的响应式一个案例

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <style>
        .main img {
            width: 100%;
        }
        h1 {
            font-size: 1.625em;
        }
        h2 {
            font-size: 1.375em;
        }
        .header {
            padding: 1.%;
            background-color: #f1f1f1;
            border: 1px solid #e9e9e9;
        }
        .menuitem {
            margin: 4%;
            margin-left: 0;
            margin-top: 0;
            padding: 4%;
            border-bottom: 1px solid #e9e9e9;
            cursor: pointer;
        }
        .main {
            padding: 2%;
        }
        .right {
            padding: 4%;
            background-color: #CDF0F6;
        }
        .footer {
            padding: 1%;
            text-align: center;
            background-color: #f1f1f1;
            border: 1px solid #e9e9e9;
            font-size: 0.625em;
        }
        .gridcontainer {
            width: 100%;
        }
        .gridwrapper {
            overflow: hidden;
        }
        .gridbox {
            margin-bottom: 2%;
            margin-right: 2%;
            float: left;
        }
        .gridheader {
            width: 100%;
        }
        .gridmenu {
            width: 23.5%;
        }
        .gridmain {
            width: 49%;
        }
        .gridright {
            width: 23%;
            margin-right: 0;
        }
        .gridfooter {
            width: 100%;
            margin-bottom: 0;
        }
        @media only screen and (max-width: 500px) {
            .gridmenu {
                width: 100%;
            }
            .menuitem {
                margin: 1%;
                padding: 1%;
            }
            .gridmain {
                width: 100%;
            }
            .main {
                padding: 1%;
            }
            .gridright {
                width: 100%;
            }
            .right {
                padding: 1%;
            }
            .gridbox {
                margin-right: 0;
                float: left;
            }
        }
    </style>
</head>
<body>
    <div class="gridcontainer">
        <div class="gridwrapper">
            <div class="gridbox gridheader">
                <div class="header">
                    <h1>响应式案例</h1>
                </div>
            </div>
            <div class="gridbox gridmenu">
                <div class="menuitem">列表一</div>
                <div class="menuitem">列表二</div>
                <div class="menuitem">列表三</div>
                <div class="menuitem">列表四</div>
            </div>
            <div class="gridbox gridmain">
                <div class="main">
                    <h1>Wilson</h1>
                    <p>我觉得这里最帅的就是博文作者了,我觉得这里最帅的就是博文作者了
                       我觉得这里最帅的就是博文作者了我觉得这里最帅的就是博文作者了
                    </p>
                    <img src="./img/gf.jpg" alt="girlfriend" width="" height="">
                </div>
            </div>
            <d iv class="gridbox gridright">
                <div class="right">
                    <h2>帅的突破天际</h2>
                    <p>这里是一些文字文字文字66666</p>
                    <h2>博文作者是真的帅</h2>
                    <p>在坐的各位都帅9999999999999</p>
                    <h2>随便放</h2>
                    <p>帅就完事了</p>
                </div>
            </div>
            <div class="gridbox gridfooter">
                <div class="footer">
                    <p>今天学到东西了,很开心很开心。今天学到东西了,很开心很开心今天学到东西了,
                        很开心很开心今天学到东西了,很开心很开心</p>
                </div>
            </div>
        </div>
    </div>
</body>
</html>


响应式布局四 : flex


Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。

兼容性:IE9+

从一个面试题说起:如何让一个盒子在body里上下左右居中

最简单的方式莫过于flex,通常使用margin的方式太low

body{
  /* 重点在这 */
  display:flex;
}
body,html{
  height:100%;
}
div{
  height:300px;
  width:600px;
  /* 重点在这 */
  margin:auto;
}
//无论你屏幕大小如何调,都会保持居中状态

其它相关属性

      /* 换行 wrap-reverse:换行,第一行在下方。nowrap(默认):不换行。wrap:换行,第一行在上方。*/
           flex-wrap:wrap;
            /*主轴方向 排列方向 。row | row-reverse | column | column-reverse;*/
           flex-direction: row;
      /* 主轴元素对齐方式 flex-start | flex-end | center | space-between | space-around*/
           justify-content: center;
           /* 多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。 */
           align-content:flex-start; 
            /* flex-start | flex-end | center | space-between | space-around | stretch */

order为排序先后,数字越小排前面

flex-grow为比例大小,根据屏幕大小自动分配

 <div class="con">
        <div style="order:5;flex-grow:3;background: orangered;">我是div1</div>
        <div style="order:3;flex-grow:3;background: yellow;">我是div3</div>
        <div style="order:2;flex-grow:4;">我是div4</div>
    </div>

11.png



目录
相关文章
|
4月前
移动端的布局如何使用媒体查询
移动端的布局如何使用媒体查询
49 2
|
28天前
|
编解码 前端开发 iOS开发
响应式布局
响应式布局
|
2月前
|
编解码 前端开发 JavaScript
现代前端开发中的自适应布局与响应式设计
【2月更文挑战第10天】在当今移动设备和不同屏幕尺寸的普及下,前端开发中的自适应布局和响应式设计变得至关重要。本文将探讨现代前端开发中自适应布局的实现原理、响应式设计的优势以及实际应用中的最佳实践。
|
3月前
|
前端开发 JavaScript API
掌握CSS Flexbox,打造完美响应式布局,适配各种设备!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。
|
4月前
|
编解码 前端开发
响应式设计布局要不要了解一下?
响应式设计布局要不要了解一下?
21 0
|
5月前
移动端开发—流式布局
移动端开发—流式布局
|
7月前
|
编解码 前端开发 Android开发
前端页面布局之【响应式布局】
前端页面布局之【响应式布局】
41 0
|
9月前
响应式布局的五种方法
响应式布局是同一页面在不同的屏幕上有不同的布局,即只需要一套代码使页面适应不同的屏幕。
|
9月前
响应式布局--媒体查询
响应式布局--媒体查询
37 0
|
编解码 前端开发 UED
实现响应式布局
在现代 Web 开发中,响应式布局已经成为了一个非常重要的概念。由于不同设备有不同的屏幕尺寸和分辨率,需要通过响应式布局来适应不同的设备。实现响应式布局的方式有很多种,下面介绍一些常见的方法。
102 0