1px有多大?

我们先了解几个概念:

关键概念

设备像素:设备屏幕实际拥有的像素点一般来说:宽度方向有1920个像素点,长度方向有1080个像素点。逻辑像素:CSS 的像素单位(就是我们这次要讨论的css的px),其尺寸大小是相对的,也称为独立像素分辨率:屏长的设备像素 × 屏宽的设备像素(1920 * 1080)ppi(pixels per inch):像素密度,表示沿对角线每英寸长度的像素数目(单位是dpi),越大显示的越细腻缩放因子(Scale Factor):逻辑像素相对于设备像素的放大比例,可通过` window.devicePixelRatio `获得,pc上可以用个个性化来设置,但二者并不完全等同

上面概念直接的关系

关系一:  设备尺寸 × 像素密度 = 分辨率(设备像素)举例:  iphone6s 对角线长度为5.5 inches,像素密度401 ppi,分辨率 1920 * 1080,计算可得对角线的设备像素为2205.5。  5.5 * 401 = 2205.5关系二:  逻辑像素(css的px) = 设备像素 × 缩放因子举例:  iphone6逻辑像素为375 * 667,分辨率为750 * 1334,缩放因子为2  1个逻辑像素(1px) = 设备宽度的1/375  1个设备像素 = 设备宽度的1/750  1/375 = 1/750 * 2

由公式得出的结论

PC端分辨率一样的情况下,屏幕尺寸越大,显示的越模糊(因为dpi越小)。

举例说明:

我们的台式机电脑屏幕一般是32英寸,分辨率为:1920 * 1080。而一般笔记本是15.6英寸,分辨率也是:1920*1080的。由公式一:当分辨率一样时,设备尺寸越大,像素密度越小。所以32寸的台式电脑看上去模糊一些。

相同分辨率,相同缩放因子情况下,不同设备尺寸下,表现是一致的举例说明:

平时我们在pc上24英寸的电脑上开发的网页直接写的(px),在不做任何兼容处理的情况下,在15.6英寸的笔记本上也能正常显示。由公式二:因为一般pc端,默认情况下缩放因子为1(window.devicePixelRatio = 1),分辨率也一样(1920 * 1080),那么得到的**逻辑像素(css的px)**也是一样的。所以你在分辨率一样的情况下,在大屏电脑上设置的100px,在小屏电脑上也是100px。只是他们表现出来的大小不一致,小屏上面的1px更小。

如何将pc网页放到手机上展示?

我们可以调整网页在移动端上的缩放比例,这个值就是viewport。默认情况下,移动端浏览器会将 viewport 宽度设为980px(也有可能是1024px 或其它值),也就是说1px = 设备屏幕宽度的1/980。这跟缩放因子没有任何关系。这时的1px 非常小,所有的元素都变得非常小,移动端浏览器之所以这么做,是为了尽可能完整的显示 PC 端的网页,然后允许用户通过缩放来查看细节。显然体验就别的特别差了,很多本来就比较小的元素看都看不清了。第二种方式是我们设置一个适当的缩放比例。一般我们这样设置:

那么对于iphone6来说根据公式:1px = 1/750(分辨率) * 2(缩放因子) = 1/ 375。显然比刚才的1/980大了不少,那么我们的元素如果还是按照原来的px去设置,那么屏幕肯定展示不下去了,这时候,如果我们的元素的px值能根据1px的大小是动态调整,我们的网页就完美了,这时候em,rem就派上用场了。

em是什么?

上面提到,想让我们的网页在不同分辨率的设备(移动端)上正常显示,最好我们的元素长宽,外边距,内边距等都是动态的

方式一:

上面说到,我们在移动端一般这样设置:

这个时候我们1px的大小就已知,iPhone6上为:1px = 1/750(分辨率) * 2(缩放因子) = 1/ 375。既然1px的大小固定了,那么我们只能动态改变一个元素设置的px了,比如说在iPhone8上是120px;而在iPhone6上需要是100px。这时候我们可以用js去动态计算,根据屏幕大小。但是显然很麻烦,需要对每一个元素的长宽,内边距,外边距都需要调整,这显然是一个巨大的工程。这时候我们就可以用到em这个单位了,em单位的名称为相对长度单位,是根据它父元素的字体大小来计算的,一般默认情况下:16px = 1em。如果父元素font-size:16px,子元素margin:0.8em。那么得到的大小就是:0.8 * 16 =12.8。当所有单位都采用em时,我们只需要改变body的font-size,那么其他的元素宽度就能动态变化了,显然方便很多。

rem是什么?

'rem’是’css3’新增的一个相对长度单位,它的出现是为了解决em的缺点,em可以说是相对于父级元素的字体大小,当父级元素字体大小改变时,又得重新计算。rem出现就可以解决这样的问题,rem只相对于根目录,即HTML元素。有了rem这个单位,我们只需要调整根元素html的font-size就能达到所有元素的动态适配了,附上一段常用适配代码:

 /**    * ================================================    *   设置根元素font-size    * 当设备宽度为375(iPhone6)时,根元素font-size=16px;     × ================================================    */(function (doc, win) {  var docEl = win.document.documentElement;  var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';    var refreshRem = function () {    var clientWidth = win.innerWidth                      || doc.documentElement.clientWidth                      || doc.body.clientWidth;    console.log(clientWidth)    if (!clientWidth) return;    var fz;    var width = clientWidth;    fz = 16 * width / 375;    docEl.style.fontSize = fz + 'px';//这样每一份也是16px,即1rem=16px  };  if (!doc.addEventListener) return;  win.addEventListener(resizeEvt, refreshRem, false);  doc.addEventListener('DOMContentLoaded', refreshRem, false);  refreshRem();})(document, window);

总结

  1. 逻辑像素(css的px) = 设备像素 × 缩放因子
  2. 为了移动端更好的适配我们引入了em和rem这2个动态单位
  3. em的大小与父元素的font-size有关,rem的大小与根元素html的font-size有关
  4. 一般在移动端我们会使用js动态计算跟节点html的font-size来达到自适应的目的。

css rem 大屏开发_px/em/rem的区别与应用相关推荐

  1. css rem 大屏开发_px和em、rem单元如何选择?

    通常在网站开发过程中,会遇到一系列的问题,尤其是现在终端设备丰富的今天来说,在相对字体里面通常有三种字体单位不知道让开发人员如何进行选择?分别是px和em.rem.跟着我们往下看! 网站建设并非工业设 ...

  2. 润乾报表列太多导致渲染速度慢_报表自动化: 如何选择可视化大屏开发利器

    报表自动化: 如何选择可视化大屏开发利器​www.coologic.cn 我们在前文完成了各种数据的准备:原始数据.指标数据.报表表格等等,但仍然无法解决"阅者"难以理解庞大数据. ...

  3. echars大屏开发案例

    在大屏开发项目中DataV我觉得是不可缺少的东西,我建议UI在设计大屏的时候时候首先先看echars 在结合DataV来设计,请不要天马行空的去设计,有的UI真的很菜,天马行空真的. 废话不多说,我也 ...

  4. 关于CSS中的字体尺寸设置 em rem等

    常用单位 在CSS中可以用很多不同的方式来设定字体的尺寸.一般来说,这些单位被分成两大类:绝对单位(absolute)和相对单位(relative). 绝对单位在大多数情况下是相对于某些实际量度而言的 ...

  5. vue项目rem 大屏可视化适配

    在工具文件夹中 创建一个新的JS文件 JS文件中创建一个方法 // 如果页面发生改变更改rem得值 function setRem() {// 默认使用100px作为基准大小const baseSiz ...

  6. 基于WebGL的三维数据可视化大屏开发流 ThingJS

    三维数据大屏可视化系统包含多源数据连接.生成二维/三维视图.构建可视化大屏.大屏功能应用等一体化服务,基于多年可视化项目经验,ThingJS平台得出从数据源上传到可视化大屏应用的完整流程,供参考. 多 ...

  7. css实现大屏效果的背景div

    实现大屏效果的背景div, 效果如下: html <div class="box">1111111</div> css .box {width: 200px ...

  8. 基于vue的可视化大屏开发

    简介 业界解决方案 百度的 sugar 可视化解决方案 https://sugar.baidu.com/home 阿里datav https://data.aliyun.com/visual/data ...

  9. vue大屏开发系列—使用定时器setInterval和setTimeout

    1.setInterval循环执行定时器 循环执行就是设置一个时间间隔,每过一段时间都会循环执行这个方法,直到这个定时器被销毁掉: 页面触发 mounted() {this.getConsole()/ ...

最新文章

  1. jmeter聚个报告怎么看qps_Jmeter查看QPS和响应时间随着时间的变化曲线
  2. 软件项目中的需求分析具体方法探讨之一
  3. 高亮显示 html_友达10.1寸超低温高亮工业液晶屏G101STN01.C
  4. Android之集成友盟推送功能
  5. CentOS 7.1下KVM的安装与配置
  6. 必看企业级Redis锁资产巡检扫描业务场景实现(加锁限制扫描次数)
  7. opencv 鱼眼矫正
  8. Wireshark-002导入导出
  9. [转载] [Python] np.ones_like(ndarray)和np.zeros_like(ndarray)
  10. python调用java接口或者类_python如何调用java类
  11. java后台开发程序媛~~
  12. 图解电动汽车:电动汽车的分类
  13. scikit-learn中的OneHotEncoder用法
  14. 微信公众号答题功能搭建
  15. hdu6638 Snowy Smile(线段树+最大子段和)
  16. _variant_t与其他数据类型的转换
  17. MATLAB傅里叶级数分解极其图像
  18. 基于FPGA的DDS设计
  19. android fm信号强度,FM 收音机灵敏度测试方法
  20. ubuntu 18.04 在线 升级 到 20.04 后一些善后工作,相同的快捷方式或快捷方式占用

热门文章

  1. 如何在 SAP 电商云里设置 Time Restrictions
  2. SAP UI5 初学者教程之二十五 - 使用代理服务器解决 SAP UI5 应用访问远端 OData 服务的跨域问题试读版
  3. Travis CI 一些专用术语介绍
  4. By.css 的级联读取
  5. SAP Spartacus 4.0 deprecation 之一 - i18next-xhr-backend
  6. SAP Analytics Cloud里Exception Aggregation Type的设置
  7. 利用SAP Cloud Platform control center给global账号分配服务
  8. 阮一峰react demo代码研究的学习笔记 - React demo1 debug - how is jsx converted to js
  9. when is SAP UI5 url hash changed in browser
  10. SAP UI5 oFileUpload.getUploadEnabled()