移动端、PC端理解

概念:

1.CSS像素(单位 px)

  PC端:1px = 1 物理像素

  iphone3:分辨率320*480、1px = 1 物理像素

  iphone4:分辨率640*960、屏幕尺寸不变1px = 2 物理像素

2.物理像素

  表示每英寸所拥有的像素数目,数值越高,代表屏幕能够以更高密度显示图像

3.分辨率

  显示器所能显示的像素多少,像素越多画面约精细,同屏幕区域所能显示的信息就越多

4.devicePixelRatio(浏览器存在兼容问题)

  window.devicePixelRatio = 物流像素 / css像素 在iphone4中devicePixelRatio = 2;(1px = 2 物理像素)

 

5.layout  viewport

  移动设备默认viewport,document.documentElement.clientWidth 获取

6.visual  viewport

  代表浏览器窗口尺寸,当用户放大浏览器时,尺寸会变小  window.innerWidth 获取

7.ideal  viewport(宽度等于设备宽)

  屏幕尺寸,单位为物理像素

  在该viewport中用户不用缩放就可正常查看网站

 

如何实现屏幕自适应

<meta name="viewport" content="width=device-width">

viewport 中有6个通用属性:
  • width 设置layout viewport的宽度 正整数或字符串 ‘width-device‘
  • initial-scale 设置页面的初始缩放值,数字或小数
  • minimum-scale 允许用户的最小缩放值 数字或小数
  • maximum-scale 允许用户的最大缩放值 数字或小数
  • height 设置layout viewport 的高度,这个属性很少用到
  • user-scaleabel 是否允许用户进行缩放 ‘no‘或‘yes’ 还有2个需要特别注意的两个属性
  • target-densitydpi 在andriod 4.0一下的设备中,不支持设置viewport的width,android 自带浏览器支持设置 target-densitydpi来达到目的;

target-densitydpi = UI-width/device-width*window.devicePixelRation*160
//UI-width: 布局宽度
//device-width:屏幕分辨率宽度 iphone4为640
//target-densitydpi=device-dpi 标示使用设备本身物理屏幕的像素,不会发生默认缩放
  • miniual-ui ios的safari为meta表天新增的属性,在网页加载是隐藏顶部的地址栏和底部的导航栏

相关代码解析

//移动页面设计 480*854的比例 
//dpi = 480/screen.width*window.devicePixelRatio*160;
//scalevalue = screen.width/480;
//控制适配 分为5种组合

/* width + target-densitydpi(计算出来的) */
<meta name="viewport" content="width=480,target-densitydpi=dpi,minimal-ui">

/* width */
<meta name="viewport" content="width=480,minimal-ui">

/* width+target-densitydpi=device-dpi */
<meta name="viewport" content="width=480,targrt-densitydip=device-dip,minimal-ui">

/* width+initial-scale */
<meta name="viewport" content="width=480,initial-scale=scalevalue,maximum-scale=scalevalue,minimum-scale=scalevalue,minimal-ui">

/* targrt-densitydpi */
<meta name="viewport" content="targrt-densitydpi=dpi,minimal-ui">

//通过顺序设置5次来实现适配 直到
Math.abs(window.innerWidth-480)<=10 表示viewport设置正确了。

 

判断横竖屏

/*横屏展示*/
@media screen and (orientation:landscape){
    body{background: orchid;}
}
/*竖屏展示*/
@media screen and (orientation:portrait) {
    body{background: yellowgreen;}
}
/*某个尺寸的特色样式     竖屏时宽为768px,符合一般ipad的条件*/
@media only screen and(orientation:portrait) and(device-width:768px){
    body{background: #0066FF;}
}
/*平时使用*/
@media (max-width: 767px) {
    body{background: red;}
}
//屏幕方向:0默认横屏
    var orientation = 0;
    //转屏
    function screenOrientationEvent(){
        if(orientation == 0){
            console.log("竖")
        }else{
            console.log("横")
        }
    }
    var innerWidthTmp = window.innerWidth;
    //监听
    function screenOrientationListener(){
        try{
            var iw = window.innerWidth;
            //屏幕方向改变时处理
            if(iw != innerWidthTmp){
                if(iw > window.innerHeight){
                    orientation = 90;
                }else{
                    orientation = 0;
                }
                //调用转屏
                screenOrientationEvent();
                innerWidthTmp = iw;
            }
        }
        catch(e){
            console.log(e)
        }
        //间隔500毫秒检测是否转屏
        setTimeout("screenOrientationListener()",500)
    }
    //启动监听
    screenOrientationListener()
    
//<body onload="screenOrientationEvent()">

 

posted @ 2021-04-14 16:53  *玥  阅读(381)  评论(0编辑  收藏  举报