移动端适配 学习笔记

本文详细解析了移动设备屏幕的分辨率、像素密度、视口概念及其在不同状态下的表现,介绍了位图像素、缩放比、模糊现象的产生与解决办法,探讨了静态、流式、自适应及响应式布局策略,特别是REM布局的应用,以实现跨设备的完美适配。
摘要由CSDN通过智能技术生成

几个专有名词和单位

(iphone6)

  • 分辨率:1334pt x 750pt

    屏幕垂直像素有 1136 个,水平有 750 个

  • 屏幕像素密度:326 ppi

    每英寸屏幕拥有的像素数,显示器中,dpi = ppi, dpi 强调每英寸多少点

    屏幕像素密度 = 分辨率 / 屏幕尺寸

  • 设备独立像素

    虚拟化的。

  • 设备像素比(dpr)

    设备像素比 = 设备像素 / css 像素(垂直或水平方向)

    -webkit-device-pixel-ratio
    -webkit-max-device-pixel-ratio
    -webkit-min-device-pixel-ratio
    //css中,进行媒体查询,对不同 dpr 的设备,做一些样式适配
    resolution | min-resolution | max-resolution(新的标准方式)
    
    window.devicePixelRatio //js获取设备像素比
    
  • 屏幕尺寸:4.7in

    英尺,长度单位,4.7in 指屏幕对角线长度为 4.7in,1in = 2.54cm;

PC端、移动端视口比较

视窗 viewport

严格等于浏览器窗口。桌面浏览器中,viewport为浏览器窗口的宽度高度,但移动端的viewport太窄,为更好为css布局,提供两个viewport:虚拟的 visualviewport和布局的layoutviewport

视窗单位

  • vw: 1vm = 视窗宽度的1%
  • vh:1vh = 视窗高度的1%
  • vmin:选取 vw 与 vh 中最小的那个
  • vmax:选取 vw 与 vh 中最大的那个

PC端

状态默认放大缩小
布局视口相等缩小放大
视觉视口相等缩小放大
浏览器窗口(基准)---

移动端

状态默认放大缩小
布局视口(CSS)偏大不变不变
视觉视口(呈现给用户)相等缩小放大
浏览器窗口(基准)---

理想视口

即浏览器(屏幕)宽度

<meta name = "viewport" content = "width=device-width">
//IE横竖屏切换过程中出现不兼容
<meta name = "viewport" content = "width=device-width,initial-scale=1">

initial-scale=1,初始缩放比例为 1,同时会将 布局视口的尺寸设置为缩放后的尺寸

Retina 屏幕&普通屏幕,模糊的由来

  • 位图像素

    栅格图像 ( png , jpg , gif 等) 最小的数据单元,每一个位图像素均包含一些自身的显示信息(显示位置,颜色值,透明度等)

    一个位图像素 --> 1个物理像素,图片才能得到完美清晰的展示

  • 缩放比 scale

    scale = 1/dpr

dpr 的表现

普通屏幕,retina 屏幕(高清设备屏幕,1个css像素对应4个物理像素) ,CSS像素呈现的大小一致。不同的是,1个css像素对应(覆盖)的物理像素个数

模糊的解决

布局概念

  1. 静态布局

    px作单位

  2. 流式布局

    宽度使用百分比,高度使用px作单位

  3. 自适应布局

    创建多个静态布局,每个静态布局对应一个屏幕分辨率范围。使用@media媒体查询切换多个布局

  4. 响应式布局

    流式布局 + 弹性布局,搭配媒体查询技术

  5. 弹性布局

    rem/em布局,

    • rem ,相对于html元素的font-size大小而言,有一些hack的特点
    • 比较规范的是 vm单位
    • em,相对于父元素

    淘宝的Flexible(Rem布局的应用)

REM 布局

1 rem = 100 px

核心: 设置根 html 元素的 font-size

一般来说,为了防止在高清屏幕下像素不够用导致模糊,我们拿到的设计稿是640px(iphone5 设备宽为320px)或750px的两倍稿(iphone6 设备宽为375px),按照设备宽度做了两倍的大小。

那开发的时候在CSS中要设置什么尺寸呢,如何做到一份设计稿适配到不同机型中

最佳方案: 在photoshop或其他工具中量出某个元素或图片或文字的尺寸,然后直接写到代码中。额外的适配不需要理会。

width:px2rem(200);

示例设置宽度375px,是以iPhone6为例,如果页面的宽度超过了640px,页面中html的font-size恒为120px,否则,页面中html的font-size的大小为:

100 * (移动端屏幕宽 document.documentElement.clientWidth / 640) 
#html{
font-size: 100px;
}
function recalc(){
    var h = document.getElementById('html1');
    //w,实际宽度,获取当前屏幕可视区域大小
    var w = document.documentElement.clientWidth;
    console.log(w);
    //d, 设计宽度
    var d = 375
    // 动态设置 html 根标签字体大小
    if(w >= 640){
        h.style.fontSize = '120px';
    }else{
        h.style.fontSize = w / d * 100 + 'px';
    }
    console.log(h.style.fontSize);
}
window.addEventListener("resize",recalc,false);
document.addEventListener("DOMContentLoaded",recalc,false);

效果图

参考1
参考2
参考3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值