viewport
尺寸的区别
屏幕的尺寸
- 就是电脑设置的分辨率
- mac pro 默认 screen.width 为 1440
1 | screen.width |
窗口的尺寸
- 浏览器窗口的大小
1 | window.innerHeight |
viewport的概念
对于页面一个div的宽度,我们设置width:10%; 这是 10%是相对于谁?最终是多宽
- div宽度首先是相对于父亲 也就是 body的 10%
- body的宽度,因为它是撑满html的,所以它应该和 html等宽,注意 body是有 margin的 ,清除margin 后html和body的宽度就都一致了
- html的宽度是多少呢? html和窗口等宽
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<!DOCTYPE html>
<html>
<head>
<style>
.aaa{
height: 300px;
width: 10%;
background:red;
}
</style>
</head>
<body>
<div class="aaa"></div>
</body>
</html>
测试viewport
document.documentElement.clientWidth 和 document.documentElement.clientHeight 测试视窗宽高
document.documentElement.clientWidth 和 window.innerWidth 的区别
当页面出现滚动条的时候
- document.documentElement.clientWidth 不包含滚动条
- window.innerWidth 包含滚动条
测量html的宽高
1 | document.documentElement.offsetHeight |
移动端的 viewport
差异:屏幕太窄了,基本没有宽度超过400px的
此时有个网站 设置min-width:1000px
比如有个侧栏 宽度为10% 那么 在PC没有问题,到了手机就会有问题,因为手机总共不超过 400px 宽度 ,这就导致了一个侧栏就占了屏幕的三分之一
为了解决这个问题 手机浏览器的厂商就提出了 两个概念 visual viewport 和 layout viewport
visual viewport 和 layout viewport
- visual viewport 可视窗口:移动端视窗的设备独立像素
- layout viewport 用于布局的窗口:页面渲染时参考的宽高
在移动端,页面渲染以 layout viewport 宽度作为计算标准。以iphone 为例,其 layout viewport 是980px,页面渲染时就认为窗口为 980px。 一些老网站(没做移动端适配) 在手机打开的时候就会按照 980的宽度计算 相当于 把980px的宽度内容缩小到手机上显示。
1 | <!DOCTYPE html> |
- 手机端显示 98px的按钮就被缩小了
- 而且 document.documentElement.clientWidth 一取是 980px,你就懵逼了。
- PC端显示 98px就很正常
总结
移动端渲染的时候不去管你窗口是多大,他就认为我的宽度是980,然后按照980去渲染这个页面,同样的内容 你看到PC在看手机 感觉手机上的内容缩小了。
现在做唯一的修改
1 | <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> |