一文看懂响应式布局

简介: 笔记

响应式布局概念


响应式布局(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



目录
相关文章
|
前端开发 JavaScript 容器
响应式布局
# 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。
|
数据采集 Web App开发 测试技术
如何避免反爬虫程序检测到爬虫行为?
这段内容介绍了几种避免被反爬虫程序检测的方法:通过调整请求频率并遵循网站规则来模拟自然访问;通过设置合理的User-Agent和其他请求头信息来伪装请求;利用代理IP和分布式架构来管理IP地址;以及采用Selenium等工具模拟人类的浏览行为,如随机点击和滚动页面,使爬虫行为更加逼真。这些技巧有助于降低被目标网站识别的风险。
|
移动开发 前端开发 小程序
浅谈-web屏幕适配的解决方案
浅谈-web屏幕适配的解决方案
298 0
浅谈-web屏幕适配的解决方案
|
算法 数据挖掘 数据库
详尽分享聚类算法实现(二)DBSCAN
详尽分享聚类算法实现(二)DBSCAN
648 0
|
人工智能 知识图谱
轻松搭建AI版“谁是卧底”游戏,muAgent框架让知识图谱秒变编排引擎,支持复杂推理+在线协同
蚂蚁集团推出muAgent,兼容现有市面各类Agent框架,同时可实现复杂推理、在线协同、人工交互、知识即用四大核心差异技术功能。
483 2
|
数据采集 监控 数据可视化
场景解决方案丨突破成本限制,中小企业如何快速搭建后台管理系统
在信息化时代,业务数据激增及技术成本下降推动了数字化转型。大型企业凭借经济和技术优势巩固市场地位,而中小企业则需寻找新的增长点以保持竞争力。企业后台管理系统涵盖行政、财务、人力资源等功能,旨在提高运营效率和优化资源配置。然而,中小企业面临预算有限、开发时间紧迫、技术资源匮乏及维护成本高昂等问题。易知微提供的解决方案通过低代码平台简化配置操作,覆盖多种应用场景,如办公OA、采购管理和物流运输等,助力中小企业快速搭建后台管理系统,降低成本并提升效率。
Netty 与硬件设备交互,下行命令时(服务对设备),如何等待设备响应,再进行业务操作解决方案
Netty 与硬件设备交互,下行命令时(服务对设备),如何等待设备响应,再进行业务操作解决方案
460 1
|
存储 NoSQL 物联网
【MongoDB 专栏】MongoDB 在物联网(IoT)领域的应用
【5月更文挑战第11天】MongoDB,一种灵活可扩展的非关系型数据库,在物联网(IoT)领域中大放异彩。应对海量设备产生的多样化数据,MongoDB的文档型数据结构适应性强,适合存储设备信息及传感器读数。其实时更新、强大查询语言、索引机制和扩展性(通过分片技术)满足物联网的高实时性、复杂查询和数据增长需求。尽管面临数据安全和管理挑战,MongoDB已广泛应用于智能家居、工业 IoT 和智能交通等领域,并有望随着物联网技术进步和与其他领域的融合,如人工智能、大数据,持续发展。未来,优化数据质量、提升并发处理能力将是关键,MongoDB将在物联网的智能未来中扮演重要角色。
1172 2
【MongoDB 专栏】MongoDB 在物联网(IoT)领域的应用
|
前端开发 开发者 UED
【Flutter前端技术开发专栏】Flutter中的图标、字体与样式管理
【4月更文挑战第30天】本文介绍了在Flutter中管理图标、字体和样式的做法。Flutter提供`Icons`类用于内置矢量图标,支持第三方图标库如FontAwesome。自定义字体可通过添加字体文件至`assets`目录并配置`pubspec.yaml`,然后使用`TextStyle`设置。借助`ThemeData`,开发者能统一管理应用主题样式,局部样式可覆盖全局。通过集中管理样式,提升代码复用性和应用一致性。
807 0
【Flutter前端技术开发专栏】Flutter中的图标、字体与样式管理
|
JavaScript 前端开发 数据可视化
正则表达式完整指南(下)
正则表达式完整指南(下)
649 0
正则表达式完整指南(下)