980px
,因此PC上的网页基本上能在手机上呈现,只不过看上去很小,通常默承认以经过手动缩放网页。获取当前布局视口用document.documentElement.clientWidth
window.innerWidth
以下的viewport元标签的属性
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
css
如下是每一个属性的介绍:html
属性名 | 取值 | 描述 |
---|---|---|
width | 正整数或device-width | 定义layout viewport的值 |
height | 正整数或device-height |
定义viewport height ,单位为像素,通常不用 |
initial-scale | [0,0 - 10.0] | 定义初始缩放值。好比:设置initial-width=1.5 就是将visual viewport 设置成ideal viewport 宽度的1 /1.5倍 。 |
maximum-scale | [0.0 - 10.0 ] | 用户可以放大的最大比例 |
minimum-scale | [0,0 - 10.0] | 用户能缩小的最小比例,通常不设置,由于过小的字不方便阅读 |
user-scalable | yes/no | 定义是否容许用户手动缩放页面,默认值为yes |
width
的详细介绍:设置为device-width
时表示layout viewport
的宽度等于ideal viewport
的值。同时设置width
与intital-scale
时,最终的视口宽度等于二者较大的那一个。也就是说:前端
layout viewport
小于visual viewport
时,视口宽度最终是visual viewport
的值(经测试,layout viewport
的值也会自动变成visual viewport
)layout viewport
大于visual viewport
时,视口宽度最终是layout viewport
的值(经测试,visual viewport
的值不会变成这时layout viewport
的值)initial-scale
的详细介绍:缩放比例 = ideal layout
/ visual layout
。ideal viewport
是不会改变的,这个值是为了改变visual viewport
。缩放比例也有默认值,没有设置initial-scale
时,浏览器会取适当的缩放比例使布局视口
正好铺满屏幕即有 可视视口(visual viewport)尺寸=理想视口尺寸(ideal viewport)。也就是说设置width=device-width
与设置initial-scale=1.0
效果相同。浏览器
layout viewport
定义为设计稿的宽度,这样的好处在于css像素对应设计稿的px(以640px为例),不须要进行单位换算。可是有几点须要注意的地方。
visual viewport
设置成与layout viewport
同样大,即设置initial-scale
的值为 ideal viewport / 640
。以前也有一个属性代替了这个操做,target-densitydpi=device-dpi
,但资料显示target-densitydpi=device-dpi
是一个被抛弃的属性,不推荐使用理想视口
做为可视视口
的尺寸,只须要把缩放比定为1。<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, minimum-scale=1, user-scalable=no">
计算 html 元素的 font-sizeiphone
750px 是设计稿的宽度(以iphone6的物理像素数为标准),100是指望的换算比例,即设计稿中 100px 的长度对应css中 1rem,将设计稿中的长度数值除以 100 获得的就是以 rem 为单位的 css 长度的数值,设计稿的宽换算为以 rem 为单位的 css 长度应为 (750/100) rem,同时设计稿的宽对应可视视口的宽,即有 (750/100) rem = 可视视口宽,1 rem = 可视视口宽 * (100/750),(100/750)就是咱们要的系数ide
在页面初始化时设置一下 html 元素的 font-size:布局
document.documentElement.style.fontSize = window.innerWidth / 7.5 + 'px';
测试
dpr(device pixel ratio)
的反作用,何为dpr
:物理像素 / 设备独立的像素(ideal viewport)
。在JS中能够经过window.devicePixelRatio
获取当前设备的dpr
。dpr
:在retina屏幕上,物理像素会被放大为本来的dpr
倍。这时候就会存在如下几个问题
border: 1px
问题,边框天然会被放大为dpr
倍initial-scale=1/dpr
对含有px单位的元素作处理,可是单纯这么作会致使字体元素的大小都会缩小。如何解决这个问题呢?答案就是在第二种方案的根元素设置fontSize
的基础上再乘以一个dpr
,这样对于以rem
衡量的元素又能正常适配了。参考阅读:字体