你真懂前端中像素和设备适配吗?

啥是像素?有哪些分类?

设备像素(device pixels)设备独立像素CSS像素逻辑像素

设备像素即物理像素(显示器的最小物理单位,由三原色组成)也是常说的屏幕分辨率。

通常逻辑分辨率抽象上是指设备独立像素(独立于设备像素单位)纬度的分辨率。

一个独立设备像素由若干个物理像素组成,操作系统设定的屏幕分辨率(即独立设备像素分辨率)。

CSS像素是浏览器使用的像素单位,通常当网页缩放比例是100%时Css像素和设备独立像素等效,但是当页面进行百分比缩放时,当放大至200%时,一个CSS像素是4个设备独立像素。

总而言之,言而总之

  • 设备像素可以对应到硬件参数体系。
  • 设备对立像素是操作系统参数体系。
  • CSS像素是软件应用参数体系。
  • 分辨率是抽象定义,用于描述屏幕图像的精密度。比如设备、逻辑分辨率等。

CSS像素、设备独立像素均是逻辑像素的一种体现,通常会换算的像素比是设备像素和设备独立像素,所以通常称呼的逻辑像素也是设备独立像素,但是称呼不准确,需要信息对齐后再进行具体问题讨论。

常见的复杂像素场景?梳理问题模型并系统化解决

首先,插入一个小问题,window.devicePixelRatio 所代表的像素比是什么呢?

  • 网页未进行比例缩放时

window.devicePixelRatio = 设备独立像素 / 设备像素

  • 网页进行比例缩放时

window.devicePixelRatio =设备独立像素 / CSS像素 = 设备独立像素 / 设备像素 * 缩放比例

探究Mac pro中的设备像素、设备独立像素、CSS像素:

  1. 1440 * 900 (设备独立像素分辨率)系统设置 -> 显示器
  2. 2560 × 1600 (设备像素分辨率) 关于本机 -> 显示器
  3. 某个网页CSS像素分辨率(1440 * 1472 ),则window.devicePixelRatio = 2
  4. 某个网页放大200%的CSS像素分辨率( 720 * 736 ),则window.devicePixelRatio = 4

一个页面在UI、产品、业务进行用户层面考量时即统一也分散,在深入到具体响应式设计方案时通常要做分辨率分析、用户分析、流量特征分析。

分辨率分析

  • 360 - 480(竖版手机)

  • >= 480 && < 768 (横版手机、小平板)   小流量

  • >= 768 && < 992(普通平板)

  • = 992 && < 1280(大平板、小显示器、笔记本)

  • = 1280 && < 1440(普通显示器、普通笔记本)

  • = 1440 && < 1920(主流显示器)

  • > 1920(2k、4k 显示器)小流量

基于以上设备分析,可得出设计稿规范、CSS断点方案,如下:

UI设计输出主要规范稿,360设计稿 、480设计稿 、992设计稿 、1280设计稿、1440设计稿 。

特殊,流量小的出兼容稿,768设计稿、1920设计稿。

CSS响应断点技术方案:

  • xs-new (0 - 479) (竖版手机)
  • min-pad (480 - 767) (横版手机、小平板)
  • sm-new (480 - 991)
  • pad (768 - 991) (普通平板)
  • min-laptop (992 - 1279)(大平板、小显示器、笔记本)
  • laptop (1280 - ~) (普通显示器、普通笔记本)
  • lg (1440 - ~) (主流显示器)
  • xl (1920 - ~) (2k、4k 显示器)

基于以上的断点可以解决标准的设备碎片化和跨屏问题。但是具体到每个用户系统下,用户自定义设置会导致像素比不同,例如:

  • 操作系统修改设备独立像素导致设备像素比不同
  • 操作系统修改缩放比例会导致设备像素比不同
  • 网页缩放比例修改会导致设备独立像素和CSS像素比不同

为了保证信息一屏的完整性、交互的便利性,通常还需要设计出通用的内容安全区域。例如:

150%放大留资表单按钮被遮挡  

在windows上进行设备像素比换算是 853x385,大概落在普通平板的断点范围 768 ~ 992,保证在该高度下表单内容可以一屏展示。 

同时还会存在iphone系列高清适配,例如:

  • iPhone5 :分辨率 320 * 568,物理像素 640 * 1136,@2x(倍率)
  • iPhone6:分辨率 375 * 667,物理像素 750 * 1334,@2x
  • iPhone6 Plus :分辨率 414 * 736,物理像素1242 * 2208,@3x

因此需要做,如下适配:

  • 高清适配,比如倍图图片、文字等内容元素。

  • 屏幕高度的首屏内容适配、弹层内容适配(避免内容撑开需使用滚动条进行更多内容查看)

おすすめ

転載: juejin.im/post/7067377808678322213
おすすめ