• 响应式开发


     根据设备的宽度,自动调整页面到大小,从而在各个设备上呈现出最佳的视觉效果。

    响应式开发的种类:1.适合小型的项目或需求页:PC端和移动端公用一套 2.大型的项目如淘宝   PC端(固定布局)和移动端(移动适配)各用一套

    响应式所用的技术:1.视口viewport   2.媒体查询(可以识别设备的特征,从而调整页面的布局)  3.布局时用相对单位,rem 100% em  4.图片的处理(max-width/min-width)5.flex布局

    1.视口vieport: 'meta:vp + tab';  PC端页面和移动端页面最大的差别:设备的宽度不一样 默认移动端页面时按照980宽度渲染,还是比移动设备宽度大,为了防止滚动条的出现,早期各个设备做缩放处理,缩放比例=设备宽度/980,这样处理,文字图片看不清。

    所以需要更改渲染的宽度(布局视口的宽度),改成设备的宽度渲染,这样页面也不会缩放

    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    width = device - width;布局视口 = 设备宽度
    user-scalable = no;是否允许缩放页面 no禁止
    initial-scale=1.0;初始缩放值
    maximum-scale=1.0;最大缩放的比例
    minimum-scale=1.0;最小缩放的比例
    2.媒体查询
    根据媒体条件设置不同的样式,从而显示不同的效果
    @media all|screen|print and(媒体条件){
    div{
    css样式
    }
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <title>Title</title>
        <style type="text/css">
            #div1{
                width: 100px;
                height: 100px;
                background: palegreen;
            }
    /*        @media all and (max-375px){ !*小于等于375执行 and后必须加空格*!
                #div1{
                    background: red;
                }
            }
            @media all and (min- 376px) and (max- 414px){
                #div1{
                    background: paleturquoise;
                }
            }
            @media all and (min-415px){!*大于等于415*!
                #div1{
                    background: pink;
                }
            }*/
            @media all and (orientation: landscape){  /*横向*/
                #div1{
                    background: blue;
                }
            }
            @media all and (orientation: portrait){   /*纵向*/
                #div1{
                    background: purple;
                }
            }
        </style>
    </head>
    <body>
    <div id="div1"></div>
    </body>
    </html>

     大型的项目 PC端一套(固定布局),移动端一套(移动适配)

    1.dpr 设备像素比 (决定屏幕的清晰度)1.0普通屏幕 2.0高清屏幕 >2.0  3.0超高清屏幕   (dpr = 物理像素/css像素)

       iphone3   dpr:1.0   375*667

       iphone6   物理像素:750*1334(屏幕里的像素点数=宽高*dpr)    css像素:375*667(px)  dpr=2 设计稿是750

       iphone6p  1242*2208  414*736   dpr=3 设计稿 1242

    移动适配:根据设计稿,在各个移动设备上呈现的效果是一样的(布局是一样的),但是由于设备的宽度各不一样,图片的尺寸,内容的间距,文字的大小会发生相应的改变。

    图片的大小得根据设备的宽度进行缩放,不能用固定单位px,而是用相对单位rem

    rem是相对于根元素(html)字体大小   

    得各个设备元素尺寸不同,只需更改根元素字体大小,根元素尺寸发生改变,元素的尺寸就会改变

    根据媒体查询更改跟元素字体大小会有如下问题:1.设置的是设备宽度的范围,不精准 2.根元素字体大小的设置多少合适,不太好设置

    应该根据各个设备宽度从而设置各个设备的根元素字体大小 

    元素的尺寸设置多少rem合适

    假设设备宽度为750px,设计稿宽度是也是750,如何设置元素的尺寸

    设备宽度    根元素字体大小    元素尺寸

    750             100                      3.36rem*2.1rem       336px*210px

    375                                         3.36rem*2.1rem       165px*105px

    设备宽度/根元素字体大小 = 设计稿宽度750/100

        //处理dpr为2的设备   设计稿宽度750/100 = 设计宽度/根元素字体大小
        ~(function (desW) {
            let clientW = document.documentElement.clientWidth;
    //        desW/100 = clientW/x
            document.documentElement.style.fontSize = clientW/desW * 100 + 'px';
        })(750);

     移动端little Demo:(盒子随鼠标移动)

        let oDiv = document.getElementById('div1');
        let startX = 0,
            startY = 0;
        oDiv.addEventListener('touchstart',function (e) {
            this.downX = e.touches[0].clientX;
            this.downY = e.touches[0].clientY;
        },false);
        oDiv.addEventListener('touchmove',function (e) {
            let moveX = e.touches[0].clientX;
            let moveY = e.touches[0].clientY;
            this.posX = moveX - this.downX;//横向移动的距离
            this.posY = moveY - this.downY;
    //        console.log(moveX - this.downX, moveY - this.downY);
            this.style.webkitTransform = 'translate('+(startX + this.posX)+'px,'+(startY + this.posY)+'px)';
        },false);
        oDiv.addEventListener('touchend',function (e) {
            startX += this.posX;
            startY += this.posY;
        },false)

     zepto 封装的touch events

    • tap —元素tap的时候触发。
    • singleTap and doubleTap — 这一对事件可以用来检测元素上的单击和双击。(如果你不需要检测单击、双击,使用 tap 代替)。
    • longTap — 当一个元素被按住超过750ms触发。
    • swipe(划过)swipeLeft(左滑)swipeRight(右滑)swipeUp(上滑)swipeDown(下滑) — 当元素被划过时触发。(可选择给定的方向)
  • 相关阅读:
    定位
    浮动
    标准文档流
    盒模型
    CSS继承性和层叠性
    微信公众平台-信息的获取
    信息系统项目管理师-整体介绍
    Dijkstra算法 c语言实现
    windows下c语言获取程序当前的执行目录,读文件的代码片
    网络流问题,及其代码
  • 原文地址:https://www.cnblogs.com/Lia-633/p/9804883.html
Copyright © 2020-2023  润新知