viewport:视口,视觉窗口,显示区域。
在显示面积上手机屏幕相对桌面显示器要小不少,在几年前(如今也如此)大部分网站都是为桌面显示器浏览而设计,不多考虑到适应手机屏幕,因此若是用手机浏览大多网站时会出现问题,好比常见固定宽度的网页会出现横向竖向滑动条,固然这不算什么大问题;但若是是浏览流动布局的网页那状况会很是糟糕,设想一个宽度为30%的侧边栏对于320px手机屏幕而言也就96px,只能容纳8个12px的汉字,可阅读性很是差。
为了让手机也能得到良好的网页浏览体验,Apple找到了一个办法:在移动版(iOS)的Safari中定义了viewport meta标签,它的做用就是建立一个虚拟的窗口(viewport),并且这个虚拟窗口的分辨率接近于桌面显示器,Apple将其定位为980px。以一代iphone下的Safari来讲就是:
在iphone的320px物理屏幕上——视觉窗口(visual viewport),建立出了一个980px的虚拟窗口——布局窗口(layout viewport),在视觉窗口(visual viewport)中咱们能够拖动横向竖向滑动条或者放大缩小网页,来达到最佳的浏览效果(相似桌面浏览器);而布局窗口(layout viewport)用来配合CSS渲染布局,例如当咱们设置一个容器的宽度为100%时,这个容器的实际值为980px而不是320px。如此一来大部分 网页就能以缩放的形式正常的显示在手机屏幕上了。
如何设置viewport
有了layout viewport彷佛解决手机浏览网页的难题,但若是遇到专门为手机优化的网页就又有新的问题:是的,由于iphone的layout viewport默认为980px,致使专为其优化的320px宽的页面只能以缩放的方式显示,这时就须要对viewport进行设置:
<meta name=”viewport” content=”width=device-width, initial-scale=1.0, user-scalable=no”/>
这个是最多见的一条viewport meta代码,将viewport定义为:宽度为设备宽度,初始缩放比例为1倍,禁止用户缩放。设置好后咱们的页面就显示完美了:viewport所有属性和值以下:
width: viewport宽度
height: viewport高度
initial-scale: 初始缩放比例
maximum-scale: 最大缩放比例
minimum-scale: 最小缩放比例
user-scalable: 是否容许用户缩放例:width=960 或 device-width
height=1000 或 device-height
initial-scale=0.5
maximum-scale=2
minimum-scale=1
user-scalable=1 或 0 (yes 或 no)
layout viewport的默认值在Apple实现viewport后,其余浏览器也加入了对viewport meta的支持,但彼此间仍是有些差别,差别最大的是layout viewport的表现:
Safari iPhone: 980px
Opera: 850px
Android WebKit: 800px
IE: 974px
最后关注下width=device-width其实这个属性值颇有意思,字面意应该是viewport宽度等于设备宽度(这里的设备宽度指的并非物理像素而是设备独立像素,其中设备物理像素和设备独立像素比称为devicePixelRatio),浏览器给出了个定值:320px;这个值仍是源于 Apple,由于早期iphone的分辨率为320px × 480px,大量为iphone量身定制的网站都设置了viewport:width=device-width,而且按照宽度320px来设计制做,所 以其余浏览器加入viewport支持时为了兼容性也将device-width定义为了320px。浏览器