本文摘自PHP中文网,作者黄舟,侵删。
移动端页面大家都遇到过 viewport 的问题。关于 viewport 的文章有很多了,推荐给大家这两篇,写得非常详细。本文对 viewport 做一些补充
手机屏幕
手机屏幕属于硬件属性,我们无论是通过 JS 还是 meta 标签都是无法影响到它的。
手机屏幕物理像素,也就是手机厂商们说的像素、分辨率、PPI这些。
安卓常见的有 720X1280 , 1080X1920 等等
iPhone 则是 iPhone5 640X1136,iPhone6 750X1334,iPhone6P 1080X1920
手机屏幕逻辑像素,物理像素经过折算之后的像素数。也就是理想视口的尺寸
iPhone5 屏幕本来是 640px 宽,但是折算成了 320px
iPhone6 物理像素 750px 款,折算成 375px
iPhone6P 略微奇葩一点,物理像素实际 1080px 宽,但是系统向外暴露的确是 1242px,再折算成了 414px
screen.width/height
可以获取屏幕的逻辑像素
布局视口 layout viewport
刚才讲过的屏幕物理像素和逻辑像素,这些都是手机厂商设置好的,我们是无法设置的,重点再与接下来的两个视口,大家千万别混淆了。
layout viewport 相当于浏览器的宽度。
我们是可以通过 <meta name="viewport" content="width=XXX">设置的。
默认情况下,layout viewport 一般为 980px 宽。
document.documentElement.clientWidth
可以获取 layout viewport 的宽度。
视觉视口 visual viewport
视觉视口可以看作是手机屏幕这么大的一个窗口,但是它能显示的像素个数却不是屏幕上面的这么多逻辑像素。
视觉视口不太容易理解,虽然手机屏幕的逻辑像素已经固定了,比如 iPhone5 是 320px。
但是屏幕这 320px 宽,却可以显示 980px 宽的内容,所以视觉窗口的宽度是 980px。
很多没有对移动端做适配的网页,我们用手机打开,发现网页被缩小到手机屏幕这么宽了。
重点就在于缩放,缩放让320px的屏幕能显示更多内容了。window.innerWidth
可以获取 visual viewport 的宽度。
通过 <meta name="viewport" content="initial-scale=x"> 可以设置 visual viewport 的宽度。
visual viewport 的宽度为 screen.width / initial-scale
同时,也会影响到 布局视口 的宽度,因为布局视口的宽度始终大于等于 visual layout 的宽度。
1 |
|
还记得默认的 布局视口 是多宽吗?
屏幕逻辑像素、布局视口、视觉视口 三者的关系
1 |
|
将 layout viewport 的宽度设置为 屏幕宽
1 |
|
将 layout viewport 宽度设置为 640px (逻辑像素,而不是物理像素)
1 |
|
将 visual viewport 设置为 屏幕宽度的 2 倍(正确的理解是:visual viewport 的 0.5 倍是屏幕宽度,所以 visual viewport 的宽度就是屏幕的2倍了)
相关阅读 >>
使用HTML5/css3五步快速制作便签贴特效代码示例分享(图文)
HTML5+canvas调用手机拍照功能实现图片上传功能(图文详解上篇)
HTML5+canvas调用手机拍照功能实现图片上传功能(图文详解下篇)
实例讲解h5移动开发ajax上传多张base64格式图片到服务器
更多相关阅读请进入《HTML5》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者