两个viewport的传说-part one

概念:设备像素和css像素

设备像素:通常可以通过screen.width/height 获取

如果你设置一个元素宽度为128px,你的显示器为1024px,最大化浏览器窗口,元素占来显示器的1/8。如果缩放200%,元素占来显示器的1/4。

现代浏览器中的缩放只是拉伸来像素,也就是说,元素并不是从128px变成了256px; 元素还是128 css像素,即使它占用了256设备像素。也就是说,当缩放200%时,1 css px 变成了四个device px;

100%的缩放下,1 css px 正好覆盖 1 device px:

  

放大:

 

缩小:

 

这里我们关心的时css px,因为是css px 控制样式表怎么渲染。浏览器会自动保证你的css 布局拉伸收缩。

现在我们有了清楚的定义,zoom 100%时:

1 css px = 1 设备 px

这个概念对于解释下面的内容很有用。在桌面浏览器里,无论你怎么缩放,css px 都会保证你的布局元素之间的大小比例是一样的。

屏幕尺寸

让我们来看一些实际的测量。首先screen.width/height。它们是屏幕的宽高。这些大小是以设备像素为基础的,因为它们是不会变的,是显示屏的特征不适浏览器的。

window size

然而,你想知道的是浏览器窗口内层(即显示网页正文的窗口)大小。这关系到你的css 布局。你可以用window.innerWidth/innerHeight来获取。

显然,window.innerWidth是css px来衡量的。你需要知道你在浏览器窗口能放多少元素,并且当用户放大浏览器时元素的数量减少。所以,如果用户放大浏览器,你的可用空间就少了,window.innerWidth/Height也变小了。(opera浏览器不是这样,当用户放大时,window.innerWidth/Height不变小,它们时用device px来衡量的,电脑上有点讨厌,可是移动端更致命。。)

记住: window.innerWidth/Height 包括了滚动条。

Scrolling offset

window.pageXOffset/pageYOffset, 表示文档的水平和垂直滚动偏移量。通过它们你可以知道用户滚动了多少。

这些属性也用css px 衡量的。理论上,当用户向上滚动了并且放大了,window.pageXOffset/pageYOffset会变化。然而,当用户缩放时浏览器会尽量保持在同一个元素的位置。

Concept: the viewport

现在我们介绍一些另一个概念:the viewport(视窗),viewport的作用是为了约束html元素,你可以理解为html元素的上一层元素。

听起来啃根有点困惑,下面我们给一些实际的例子。假设你有一个流式布局,其中侧边栏的宽度是10%;当你缩放浏览器窗口时,这个侧边栏也缩放。这是怎么实现的呢?

技术层面,侧边栏是它父元素宽度的10%,可能是<body>,这个问题就变成了<body>的宽度是继承谁的。

通常,block元素的宽度是它们父元素宽度的100%;所以<body>的宽度和<html>一样。

那么,<html>元素的宽度怎么来的呢?它的宽度就是浏览球窗口的宽度 。这就是为什么侧边栏的宽度是浏览器窗口宽度的10%,这一点所有的开发都清楚。

你可能不知道这是怎么实现的。理论上,<html>元素的宽度被限制在viewport的宽度里。即<html> 元素占了100%的viewport。

viewport,就是浏览器窗口。viewport不是html的结构,所以你不能用css定义它。在电脑端它只是有浏览器窗口的宽和高,移动端稍微复杂了些。

Consequences

这种状况有一些奇怪的结果。你可以在本页面就可以看到一种。滚动到顶部,放大两到三次,页面上的内容超出了浏览器窗口。

滚动到最右边,你会看到蓝色的条并没有连起来。

这种结果就是viewport怎么被定义的。我给了蓝色的条宽度100%。100%相对于谁?肯定是<html>元素,它的宽度和viewport又是一样的,viewport又和浏览器窗口一样的。

设备像素,独立设备像素,物理像素,逻辑像素,像素比

1.概念

为来约束html元素的

1. layout viewport ,也就是这个浏览器默认的viewport

2. visual viewport  , 浏览器可视区域viewport

3. ideal viewport  ,移动设备的理想viewport

the user's visible area of a web page:web页面的用户可见区域

- 浏览器的放大缩小

              

猜你喜欢

转载自www.cnblogs.com/tianmuxi/p/8925284.html
one
今日推荐