• devicePixelRatio,Viewport,移动端适配


    一、什么是Viewport

    1.1、什么是Viewport

    手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网页的不同部分。移动版的 Safari 浏览器最新引进了 viewport 这个 meta tag,让网页开发者来控制 viewport 的大小和缩放,其他手机浏览器也基本支持。

    1.2、Viewport 基础

    一个常用的针对移动网页优化过的页面的 viewport meta 标签大致如下:

    width:控制 viewport 的大小,可以指定的一个值,如果 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。
    height:和 width 相对应,指定高度。

        initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。
        maximum-scale:允许用户缩放到的最大比例。
        minimum-scale:允许用户缩放到的最小比例。
        user-scalable:用户是否可以手动缩放。
    

    1.3、关于viewport的一些问题

    viewport并非只是ios上的独有属性,在android、winphone上同样也有viewport。它们要解决的问题是相同的,即无视设备的真实分辨率,直接通过dpi,在物理尺寸和浏览器之间重设分辨率,这个分辨率和设备的分辨率无关。比如,你拿个3.5寸-320 * 480的iphone3 gs、3.5寸-640 * 960的iphone4或者9.7寸-1024*768的ipad2,虽然设备的分辨率不同,物理尺寸也不同,但你可以通过设置viewport让它们在浏览器里有相同的分辨率。比如说,你的网站是800px宽,你可以通过设置viewport的width=800,来让你的网站在这三个不同的设备上都刚好满屏显示你的网站。

    devicePixelRatio

        window.devicePixelRatio是设备上物理像素和设备独立像素(device-independent pixels (dips))的比例。
        公式表示就是:window.devicePixelRatio = 物理像素 / dips
    

    dip或dp,(device independent pixels,设备独立像素)与屏幕密度有关。dip可以用来辅助区分视网膜设备还是非视网膜设备。

    对于视网膜屏幕的iphone,如iphone4s, 纵向显示的时候,屏幕物理像素640像素。同样,当用户设置的时候,其视区宽度并不是640像素,而是320像素,这是为了有更好的阅读体验 – 更合适的文字大小。

    这样,在视网膜屏幕的iphone上,屏幕物理像素640像素,独立像素还是320像素,因此,window.devicePixelRatio等于2.

    移动适配

    页面根据devicePixelRatio得到缩放比例,设置scale

        var b=document.querySelector('meta[name="viewport"]')||document.createElement("meta");
        b.setAttribute("name","viewport");
        var a=(c=window.devicePixelRatio)?1/c:1;
        document.documentElement.setAttribute("data-dpr",1);
        b.setAttribute("content","width=device-width,initial-scale=1, maximum-scale="+a+", minimum-scale="+a+", user-scalable=no,viewport-fit=cover");
        document.head.appendChild(b);
    

    设置html的fontSize

        var a=100/750*document.documentElement.offsetWidth;
        document.querySelector("html").style.fontSize=a+"px";
    

    版权申明:本文由objJs原创,允许转载,但转载必须附注首发链接。谢谢

  • 相关阅读:
    let与const的区别
    IOS客户端UIwebview下web页面闪屏问题
    移动端click事件延迟300ms问题
    css3+visbibilty解决淡入淡出问题
    git学习之branch分支
    git学习之冲突解决办法
    webpack+vue-cli项目打包技巧
    一个高级PHP工程师所应该具备的
    多站点
    PHP error_reporting() 错误控制函数功能详解
  • 原文地址:https://www.cnblogs.com/webrqy/p/9774128.html
Copyright © 2020-2023  润新知