深入浅出viewport(一)
来源:互联网 发布:鸟哥的linux私房菜chm 编辑:程序博客网 时间:2024/05/21 17:43
viewport对于移动浏览器上的网页展示比较重要,那么我们为什么需要设置viewport呢?viewport到底是个什么东东?让我们一起来抽丝剥茧,一点点的揭露它的真相。这里是翻译的文章,没有逐字翻译。
什么是viewport?
viewport的作用是限制页面顶级的包含元素<html>,这听起来可能有点模糊不清。举个例子,假设你有一个流体布局,你的侧边栏宽10%。这个侧边栏会随着浏览器窗口大小的变化增大或缩小。一般来说,所有块级元素会占据他们父元素100%的宽度(我们暂时忽略那些例外的情况)。因此这个侧边栏的父母body的宽度和html元素一致, 10%会占据整个浏览器窗口的10%。所有web开发者直觉上都知道和在使用这个事实。
但你可能不太清楚这背后的原理。实际上,<html>元素的宽度是由viewport限制的,<html>元素占据viewport的100%宽度而viewport事实上又等于浏览器窗口的大小(它就是这样子定义的)。视口不是一个html概念,因此你别想用CSS来影响它。在桌面浏览器上,它就等于浏览器的宽高。在移动浏览器上,事情就变的复杂了。
影响
这种状况产生了一些有意思的结果。你可以在本站上看见他们。请一直滚动到页面顶部,然后放大直到站点的内容超出了浏览器窗口。现在滚到右边,你就会看到顶部的蓝色条不再排列整齐的。
这种行为是viewport带来的结果。我设置顶部的蓝色条宽度是100%。<html>和viewport一样宽,而viewport等于浏览器窗口大小。关键在于,缩放100%的时候这工作的很好,但当我们放大的时候,viewport变得比网页内容宽度更小。这本身没有什么关系,内容会超出<html>元素。html元素的overflow属性是visible,意味着溢出的内容在这种情况下会显示出来。但是蓝色条没有溢出,因为我设置它的宽度是100%。浏览器会设置它的宽度是viewport的宽度,它们才不会关心这个宽度是不是太窄了。
测量viewport
你可能想要知道viewport的尺寸。他们可以通过document.documentElement.clientWidth /Height来获得
如果你了解DOM的话,你知道document.documentElement事实上是<html>(任何HTML元素的根元素)。但不管怎么样,viewport会更高一层。如果你给<html>设置一个宽度,就会带来影响。
document.documentElement.clientWidth /Height总是给出viewport的尺寸,无论<html>的大小是多少。
测量<html>元素
clientWidth/Height总是会给出所有情况下的视口尺寸,但是我们在哪里找到<html>元素的尺寸呢?答案是documen.docmentElment.offsetWidth/Height
这些属性让你可以把<html>作为块级元素访问,如果你设置一个宽度的话,offsetWidth就会反映出来
事件坐标
当鼠标事件触发后,最多不超过5个属性可以用来给你一些关于事件发生的位置信息。对于我们的讨论,下面三个是比较重要的
- pageX/Y: 相对于<html>元素的CSS像素坐标
- clientX/Y: 相对于viewport的CSS像素坐标
- screenX/Y相对于屏幕的设备像素坐标
90%情况下,我们会使用pageX/Y, 通常情况下我们需要知道相对于文档的事件坐标;10%的情况下会使用clientX/Y.
媒体查询
最后,我们谈一下mediaquery。
有两个与宽高相关的媒体查询:width/height 和 device-width/device-height
1、width/height 使用与document.documentElement.clientWidth/Height(视口),采用CSS像素。
2、devcie-width/devicen-height 使用和screen.width/height(屏幕)一致的值,采用设备像素。
原文链接:A tale of two viewports — part one
- 深入浅出viewport(一)
- Viewport学习笔记(一)
- Viewport那些事(一)
- viewport
- ViewPort
- Viewport
- Viewport
- viewport
- viewport
- viewport
- viewport
- viewport
- viewport
- Unity摄像机Viewport相关(一)
- 桌面端ViewPort的故事(一)
- 两个viewport的故事(一)
- Viewport 手机屏幕尺寸--webApp学习(一)
- 《深入浅出MFC读书笔记一》
- SQL联合语句的视觉解释
- 回来了,继续更新blog
- 如何根据事物代码查找相应BAPI
- pthread_cond_wait()
- PCL(Point Cloud Library)简介
- 深入浅出viewport(一)
- (挑战编程_4_5)Shoemaker's Problem
- 非常实用的10个PHP高级应用技巧
- jsp的中文乱码问题如何/怎么解决 解决JSP中文乱码问题. 有两种方法可解决
- 61条Java面向对象设计的经验原则
- zend 8.0安装svn
- 常用的BAPI总结(分模块)
- csapp2e 家庭作业 3.55
- javascript 屏避右键