经过上一篇咱们已经大概明白viewport是什么,可是viewport并无那么简单,一包研究得身心疲惫,脑子一个不够用哈哈,让咱们一块儿看看吧!css
ppk认为,有三个viewporthtml
咱们能够经过
document.documentElement.clientWidth来得到布局视窗的宽和高。
用window.innerWidth/Height或者document.documentElement.offsetWidth计算visual viewport的宽度
注意,visual viewport尺寸所对应的并非指屏幕区域里的物理像素,而是CSS 像素。而且它所包含的 CSS 像素的数量也是随着用户缩放而有所改变。windows
visual viewport用css像素来衡量尺寸,表示有多少个css像素可以被用户看到。浏览器
总结一下:ppk把移动设备上的viewport分为layout viewport 、 visual viewport 和 ideal viewport 三类,其中的ideal viewport是最适合移动设备的viewport,ideal viewport的宽度等于移动设备的屏幕宽度,只要在css中把某一元素的宽度设为ideal viewport的宽度(单位用px),那么这个元素的宽度就是设备屏幕的宽度了,也就是宽度为100%的效果。从另外一角度看,idea viewport其实就是改变了尺寸layout viewport,idae viewport其实就是把layoutviewport调整到一个合适的,理想的状态,使页面在移动端有最佳的显示效果,即不管在何种分辨率的屏幕下,那些针对ideal viewport 而设计的网站,不须要用户手动缩放,也不须要横向滚动条就能够完美地呈现给用户。 那么如何把layout viewport调整到idea viewport呢,下面咱们来看一下:
怎么设置呢?看看这段代码:iphone
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
相信有作过移动端开发的同窗都熟悉这段代码,无论你是否是熟悉移动端开发的原理,像我以前同样,不懂viewport,像素是啥,可是我把这段代码写进了haed标签里,其实就成功了一半。
没错,这段代码就是把把默认的layout viewport的宽度设为移动设备的屏幕宽度,也就是把当前的viewport宽度设置为 ideal viewport 的宽度。ide
咱们来看看各个属性是什么意思:布局
这些属性能够同时使用,也能够单独使用或混合使用,多个属性同时使用时用逗号隔开就好了。网站
width属性被用来控制layout viewport(布局视口)的宽度,layout viewport(布局视口)宽度默认值是设备厂家指定的。iOS, Android基本都将这个视口分辨率设置为 980px。咱们能够 width=320 这样设为确切的像素数,也能够设为device-width这一特殊值,通常为了自适应布局,广泛的作法是将width设置为device-width,width=device-width 也就是将layout viewport(布局视口)的宽度设置 ideal viewport(理想视口)的宽度。idea
<meta name="viewport" content="width=device-width">
能够看到经过width=device-width,全部浏览器都能把当前的viewport宽度变成ideal viewport的宽度,但要注意的是,在iphone和ipad上,不管是竖屏仍是横屏,宽度都是竖屏时ideal viewport的宽度。spa
initial-scale用于指定页面的初始缩放比例,缩放是相对于 ideal viewport来进行缩放的,所以当initial-scale=1时,表示将layout viewport的宽度设置为 ideal viewport的宽度。
<meta name="viewport" content="initial-scale=1" />
能够知道initial-scale=1 也能把当前的viewport宽度变成 ideal viewport 的宽度,但此次轮到了windows phone 上的IE 不管是竖屏仍是横屏都把宽度设为竖屏时ideal viewport的宽度。
综上,要把当前的viewport宽度设为ideal viewport的宽度,既能够设置 width=device-width,也能够设置 initial-scale=1,但这二者各有一个小缺陷,就是iphone、ipad以及IE 会横竖屏不分,统统以竖屏的ideal viewport宽度为准。因此,最完美的写法应该是,二者都写上去,这样就 initial-scale=1 解决了 iphone、ipad的毛病,width=device-width则解决了IE的毛病。
<meta name="viewport" content="width=device-width,initial-scale=1">
当遇到这种状况时,浏览器会取它们两个中较大的那个值。例如,当width=400,ideal viewport的宽度为320时,取的是400;当width=400, ideal viewport的宽度为480时,取的是ideal viewport的宽度。
<meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
能够看到第二段代码咱们把minimum-scale=1, maximum-scale=1这两个属性去掉了,但效果是同样的,由于添加了user-scalable=no 那么,minimum-scale=1, maximum-scale=1这两个属性就不必追加了。由于你都已经禁止了用户缩放页面了,容许的缩放范围也就不存在了。
(写到这里要吐血了哈哈)