【微信小程序】——rpx、px、rem等尺寸间关系浅析

摘要:
最近开发微信小程序,在写样式表的时候发现用PX的效果不太理想,而官方文档用rpx来做响应式布局单位,就仔细研究了下,在此做个小总结:这里先引用官方定义的尺寸单位‘rpx’:可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。所以,在宽高375*667,dpr为2的iPhone6中完美显示200*300img标签,图片的尺寸应该为多少呢?

最近开发微信小程序,在写样式表的时候发现用PX的效果不太理想,而官方文档用rpx来做响应式布局单位,就仔细研究了下,在此做个小总结:

这里先引用官方定义的尺寸单位‘rpx’:可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

看不懂?没关系,我们接着往下看....

日常开发中,我们常用rem、em来做响应式布局的像素单位,他们都是相对单位。rem相对于文档的根元素,em相对于父元素。

那么问题来了,rpx到底是个啥?又该如何理解“750rpx = 375px = 750物理像素”这句话呢?

开始之前,我们先扯一扯像素、物理长度、设备独立像素、设备独立像素比都是些啥?

【像素】:它不是自然界的物理长度,指基本原色素及其灰度的基本编码。

【物理像素】:它是显示器(电脑、手机屏幕)最小的物理显示单位,每个物理像素由颜色值和亮度值组成。是不是有点眼熟?我们要记住物理像素指的是显示器上最小的点。

【设备独立像素】:它又称密度无关像素,划重点——密度无关,是计算机程序实际处理的虚拟像素(如css的px),由相关关系转化为设备像素。这个相关关系就是指下面要介绍的——设备像素比

【设备像素比】:设备像素比 = 物理像素 / 设备独立像素,单位是dpr!

以iPhone6为例:

已知,1. 设备宽高 375 * 667,在这里我们可以看做是css中的px(密度无关像素);2. retina屏幕的dpr为2。

求 iPhone6 的物理像素是多少?

送分题啊,同学们!

根据公式,我们计算出iPhone 6 的物理像素为 750 * 1334

结论:

在不同的屏幕上(普通屏幕 vs retina屏幕),css像素所呈现的大小(物理尺寸)是一致的,不同的是1个css像素所对应的物理像素个数是不一致的。

在普通屏幕下,1个css像素 对应 1个物理像素(1:1)。 在retina 屏幕下,1个css像素对应 2*2个物理像素(1:4)。

【位图像素】:一个位图像素是栅格图像(如:png, jpg, gif等)最小的数据单元。每一个位图像素都包含着一些自身的显示信息(如:显示位置,颜色值,透明度等)。觉得复杂?你只需要记住1px表示一个图片最小的点。不信?我们来用PS放大一张图片,可以看到图片被拆分成无数个点,但无论你如何放大那些小点,他们都不能再次被拆分了,因为他们已经是像素级别的点了,已经是最小的了。

【微信小程序】——rpx、px、rem等尺寸间关系浅析第1张

理论上,1个位图像素对应于1个物理像素,图片才能得到完美清晰的展示。

所以,在宽高375 * 667,dpr为2 的 iPhone 6中完美显示200*300(css pixel)img标签,图片的尺寸应该为多少呢?答案是:400 * 600。

这就是我们针对iPhone 6 的设计稿的尺寸基于750*1334 来设计的目的了。

回到正题.......rpx是啥?

有了上面的做铺垫,我们知道了对于iPhone6 来说, 1rpx = 1物理像素,1rpx = 0.5px;

如果不是iPhone 6 呢?

1rpx = window.innerWidth/750。

1px = 1rpx * dpr。

完......

免责声明:文章转载自《【微信小程序】——rpx、px、rem等尺寸间关系浅析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇时序数据库InfluxDB的基本语法C#计算CPK值(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

完美方案——iOS的WebView自适应内容高度

/////////////////////////////初始化,self.view是父控件///////////////////////////////// _webView = [[UIWebView alloc] initWithFrame: CGRectMake(0, 0, self.view.frame.size.width, 0...

第九节、人脸检测之Haar分类器

人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来。 目前人脸检测的方法主要有两大类:基于知识和基于统计。 基于知识的方法:主要利用先验知识将人脸看作器官特征的组合,根据眼睛、眉毛、嘴巴、鼻子等器官的特征以及相互之间的几何位置关系来...

Unity中的半透明阴影

在Unity中渲染半透明阴影可以使用Unity提供的dither texture。在这之前,先考虑一般半透明物体的渲染流程: 设置render queue为Transparent,这样不透明的物体会先渲染,然后位于被不透明物体遮挡的透明物体就可以不必渲染,减少开销 设置render type为Transparent,便于一些replacement操作 设...

Andriod UI设计之度量单位说明(DIP,DP,PX,SP) 狼人:

(一)概念 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。 px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。 pt: point,是一个标准的长...

Java——BufferedImage对象

BufferedImage对象中最重要的两个组件是Raster与ColorModel,分别用于存储图像的像素数据和颜色数据。 1、Raster对象的作用与像素存储 BufferedImage支持从Raster对象中获取任意位置(x,y)点的像素值p(x,y) image.getRaster().getDataElements(x,y,width,heigh...

opencv学习心得第二章

opencv操作核心 1:图像的基础操作 获取像素值并且修改 改变像素之前: import cv2#导入cv2模块 img = cv2.imread("a.jpg")#读取图片 cv2.imshow("image", img)#展示图片 k = cv2.waitKey(0)&0xFF#等待键盘输入 for i in range(625):#通过f...