CSS > 高清缩放原理分析

数据大
• 阅读 6786

最近在研究 Retina 屏的适配问题,在具体方案讨论之前,陆续做了一些理解笔记,现归纳如下。具体方案的讨论将另作文章。

  1. <meta name="viewport"> 中的 viewport 是布局视口

  2. initial-scale 等的缩放是基于理想视口的

  3. 理想视口由设备各自提供,理想视口的宽度也是设备的独立像素

  4. 所谓“独立”是说这个设备独立像素和像素密度无关

  5. Retina屏增加了设备像素(物理像素),所以物理像素是有密度变化的

  6. dpr = 物理像素/设备独立像素 = 设备像素个数/设备理想视口宽度

  7. dpr 在 JavaScript 中可以通过 window.devicePixelRatio 获取,在 CSS Media Query 中的名称是 device-pixel-ratio

  8. CSS像素和物理像素有区别,当1个CSS像素跨越更多物理像素时,就模糊了,反之则清晰,CSS像素被用在布局视口上

  9. 缩放可以调整CSS像素和物理像素之间的比例关系。高清屏的缩放方案就是:如将布局视口扩大为理想视口的2倍,即理想视口缩放比例为1/2,那么CSS像素将比以前跨越更少的物理像素,从而保证清晰度

    • 布局视口/理想视口 = CSS像素/设备独立像素 = 1/缩放比例

    • 物理像素/设备独立像素 = dpr

    • 页面清晰要求 —— CSS像素/物理像素 = 1

    • 故 —— 缩放比例 = 1/dpr

从以下的关系比中来认知:

  1. 布局视口(CSS像素) : 设备独立像素(理想视口) : 物理像素

  2. 设备独立像素可以被看做一个中间件:

    • 当 dpr=1 时,设 initial-scale=1.0,布局视口等于设备独立像素,设备独立像素等于物理像素,故布局视口等于物理像素,1CSS像素跨1物理像素

    • 当 dpr=2 时,设 initial-scale=1.0,布局视口等于设备独立像素,设备独立像素是物理像素的一半,故布局视口是物理像素的一半,1CSS像素跨4物理像素

    • 当 dpr=2 时,设 initial-scale=0.5,布局视口是设备独立像素的两倍,设备独立像素是物理像素的一半,故布局视口等于设备像素,1CSS像素跨1物理像素

  3. 再来研究高清屏,以下均设:设备独立像素是 375px,dpr=2,物理像素则是 750px,元素DIV div{width: 375px}

    • initial-scale=1.0 时,1CSS像素跨越4物理像素,故 DIV 是满屏的

    • initial-scale=0.5 时,1CSS像素跨越1物理像素,故 DIV 只占屏幕的一半,要想同样保持全屏,就需要把 DIV 改为 div{width: 750px}

    • 所以,对于图来说,第一种情况下普通图片就会拉伸,从而模糊;第二种情况,就是使用高清图

  4. 为不同屏幕的元素设置不同的像素单位过于麻烦,开发者就需要考虑是否有跨屏幕的尺寸单位解决方案

    • rem:当普通屏时,设 :root{font-size: 10px},则 37.5rem 是 375px;高清屏时,设 :root{font-size: 20px},则 37.5rem 是 750px,因此,我们在 DIV 元素上只需要设置一个 37.5rem,在不同屏幕下更改根元素的字体大小,就可以兼容所有屏幕了

    • vw 和 wh:相对于布局视口大小计算尺寸,普通屏布局视口是 375px,高清屏是 750px,无论怎么变,vw/vh 单位的最后结果都会相应变化

点赞
收藏
评论区
推荐文章
OkHttp 通用抓包方式分析,以某小视频App为例
一、目标太难了,这年头抓包越来越难了,某小视频更新频发,我们之前屏蔽QUIC的方案貌似也失效了。幸好我们还有OkHttpLoggerFridaTIP:v9.10.10.22596着急的同学可以直接拉到后面,加入知识星球取js吧。有理想的同学建议好好研究下原理,下次就可以自己适配了。二、步骤原理分析在这篇文章里面我们分析了v8.0使用
凯特林 凯特林
4年前
你可能不知道的10个CSS新功能(2021版)
多年来,CSS已经超越了背景颜色、边框、文本样式、边距和盒模型。现代CSS能够提供一系列的功能,而在过去,您需要JavaScript或变通方法来实现这些功能。为了庆祝它在2021年取得的成就,在这篇文章中,我们想看看一些你可能不知道的令人惊叹的CSS新特性。我们将强调web设计人员和开发人员可以用现代CSS做的很酷的事情,讨论用例,浏览器支持,并给你一个
徐小夕 徐小夕
4年前
《前端实战总结》之使用纯css实现网站换肤和焦点图切换动画
今天我们来继续复盘一些工作中常用的css技巧和知识,以便我们可以更加优雅的用css实现富有动感的网站.你将收获网站换肤设计方案介绍:target伪类介绍和用法以及如何使用css实现网站换肤transition动画以及如何用纯css实现焦点图动画效果展示1.网站换肤(https://imghelloworld.ossc
Stella981 Stella981
3年前
PHP代码静态分析工具PHPStan
<blockquote最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下。可能是自己粗心大意,或者说<codephpl</code检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PHP是动态语言),那么有没有办法,在代码代码正式运行之前,把语法错误全找出来呢?</blockquote<p
Stella981 Stella981
3年前
Exceptionless
<divid"cnblogs\_post\_body"class"blogpostbodycnblogsmarkdown"<h1id"exceptionless.netcore开源日志框架"Exceptionless.NetCore开源日志框架</h1<blockquote<p作者:markjiang7m2<b
Stella981 Stella981
3年前
DBeaver笔记
<divclass"markdown\_views"<p公司使用的是PostgreSQL数据库,可以使用pgAdmin或者DBeaver进行连接该数据库。个人更喜欢用DBeaver,因为其界面更加美观,操作也相对简单。对于习惯了eclipse的开发者来说,DBeaver绝对是个不错的选择。</p<blockquote<pDBeaver
Stella981 Stella981
3年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
Stella981 Stella981
3年前
RobotFramework自动化测试之元素定位
前言:最近在做基于RF框架的Web自动化测试,其中涉及到元素的定位,主要用到id、name、xpath、css四中定位方法,尤其后面的两种方法特别有效,可以解决大部分的定位问题。
Wesley13 Wesley13
3年前
PHP算法之判断是否是质数
<h3质数的定义</h3<blockquote质数又称素数。一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则称为合数。</blockquote<h3实现思路</h3<p循环所有可能的备选数字,然后和中间数以下且大于等于2的整数进行整除比较,如果能够被整数,则肯定不是质数,相反,就是质数。</p<h3第一种算
再论ORACLE上云通用技术方案
今天下午与ORACLE大咖讨论了ORACLE上云的通用技术方案,感觉收获很大,跟大家分享一下。关于ORACLE上云,之前写过一篇文章从云端许可的角度进行了讨论,今天我们在不考虑ORACLE云端许可,重复一遍,是不考虑ORACLE云端许可的前提下,提出了3个通用的解决方案,现分别阐述如下:一、基于虚拟机的双活主备模式将Oracle部署在虚拟机上,挂载高速块存储
数据大
数据大
Lv1
不知细叶谁裁出,二月春风似剪刀。
文章
5
粉丝
0
获赞
0