视口比例的长度 vw 和 vh
- 使用视口单位
vw来实现响应式排版。1vw等同于视口宽度的百分之一,即如果你用vw来设定字体大小的话,字体的大小将总是随视口的大小进行改变。 - 视口百分比长度定义相对于 viewport 的大小的
<length>值,即文档的可见部分。视口长度在@page声明块中无效。
视口 viewport
视口代表当前可见的计算机图形区域。在 Web 浏览器术语中,通常与浏览器窗口相同,但不包括浏览器的 UI,菜单栏等——即指你正在浏览的文档的那一部分。
文档,比如这篇文章,可能会非常长。你的视口就是你现在所能见到的所有事物。值得注意的是“什么是视口区域”这个问题,页面中的一些导航菜单也包括在其中。视口的大小取决于屏幕的大小,无论浏览器是否处于全屏模式,是否被用户缩放了。视口外的区域,比如这个文档的参见部分,可能需要滚动到其所在的区域才会出现在屏幕上。
- 在尺寸较大的设备中,在这些设备上,应用显示区域不一定是全屏的,视口是浏览器窗口的大小。
- 在大多数移动设备中,浏览器是全屏的,视口是整个屏幕的大小。
- 在全屏模式下,视口是设备屏幕的范围,窗口是浏览器窗口,浏览器窗口大小小于或等于视口的大小,并且文档是这个网站,文档的大小可比视口长或宽。
概括地说,视口基本上是当前文档的可见部分。
视口大小是可变的
视口的宽度并不总是窗口的宽度。
js
document.documentElement.clientWidth; /* 1200 */
window.innerWidth; /* 1200 */
window.outerWidth; /* 1200 */- 文档的
Element.clientWidth是指一个文档使用 CSS pixels 单位表示的内部宽度,包括其 padding(不包括 border、margin 或垂直滚动条)。这就是视口的宽度。 Window.innerWidth是用 CSS 像素单位表示的浏览器窗口的视口宽度,包括垂直滚动条。Window.outerWidth是指包括了浏览器外边框的窗口宽度。
在实测中,innerWidth 和 outerWidth 是相同的,但是 outerHeight 比 innerHeight 高 100px。这是因为 outerHeight 的测量包括浏览器框架在内,包括了地址栏和书签栏总共 100px 的高度,而浏览器没有左右边框。
innerHeight 和 innerWidth 所组成的区域通常被认为是布局视口(layout viewport)。浏览器的框架不被认为是视口的一部分。
vw 和 vh
css
h1 {
font-size: 6vw;
}问题在于,当做上面的事情的时候,因为文本总是随着视口的大小改变大小,用户失去了放缩任何使用vw单位的文本的能力。所以你永远都不要只用 viewport 单位设定文本。
这里有一个解决方法,它使用了calc(),如果你将vw单位加到了使用固定大小(例如em或者rem)的值组,那么文本仍然是可放缩的。基本来说,是vw加在了放缩后的值上。
css
h1 {
font-size: calc(1.5rem + 3vw);
}这就是说,我们只需要指定标题的字体大小一次,而不是为移动端设定它,然后再在媒介查询中重新定义它。字体会在你增加视口大小的时候逐渐增大。