在这篇文章中,我将解释viewports和元素width是如何工作的,比如html元素、  window和 screen。

  这篇文章主要针对桌面浏览器,但它的部分和移动设备中的结论也比较类似,所以也是为下篇移动端viewports详解做准备。

一、设备像素和CSS像素

  设备像素提供了我们操作设备的一个正规的分辨率,可以用screen.width/height获得。

  如果你给某个元素宽度设为128px,设备宽度1024px,默认浏览器最大化,这事,元素将占据屏幕宽度的1/8。如果用户缩放,那么这个比例将会变化。如果用户放大到200%,这个128px的元素将占据屏幕的1/4。

  在移动设备中进行缩放不过是拉伸或者压缩像素。元素宽度不会从128px变为256px,而是元素的每个像素在屏幕上的长、宽均放大了2倍,整体面积扩大了4倍。实际上,元素宽度还是128px,虽然他实际占据了256px的屏幕大小。

  我们下面用图片来解释一下:

1.CSS像素完全覆盖设备像素

2.缩小,CSS像素占不满设备元素

3.放大,1css像素占据多个设备像素

  说了这么多,其实我们只需要关心CSS像素即可,只有这些才会影响我们样式表的渲染。在用户缩放或者拉伸时,浏览器会自动的拉伸或者缩放你的网页布局。

二、屏幕尺寸

  我们可以利用screen.width和screen.height来获取屏幕宽高,这些指标是衡量一个显示屏而不是浏览器的数据,所以,实际上对我们并没什么用处。

三、窗口大小

  相反来说,浏览器窗口的尺寸对我们就非常的重要了,它能告诉我们有多少空间能被我们用来CSS布局。我们可以利用window.innerWidth 和window.innerHeight获得。

  当用户缩小窗口时,window.innerWidth 和window.innerHeight也会做相应减少。

  注意,这一尺寸包含了滚动条的尺寸。

四、滚动距离

  window.pageXOffset和window.pageYOffset分别代表了文档横向和纵向的滚动距离,因此,你乐意获取用户滚动的距离。

  理论上,如果使用至向上滚动页面然后缩小,window.pageX/Y会改变。但是浏览器为了保持最上方元素不变,window.pageX/Y实际不会变化。

五、视口概念

  viewport功能就是包下html元素,也就是网站的最外层容器。

  假设你有一个width为10%的侧边栏,当用户改变浏览器大小时,侧边栏会相应变大或缩小。它到底问什么会这样呢?侧边栏拥有父元素宽度的10%,我们假设他的父元素就是body,那么body宽度是多少呢。所有块级元素都会占据父级的全部宽度,那么body宽度应该等于html宽度,而html宽度呢?

  理论上,html的宽度占据viewport的100%,viewport宽高等于浏览器窗口的大小。

六、获取veiwport宽高

  document.documentElement.clientWidth和-Height。

  window.innerWidth/Height也能获取时候宽高,但window.innerWidth/Height包含滚动条,而ocument.documentElement.clientWidth和-Height不包含。

 七、获取html元素宽高

  document.documentElement.offsetWidth和-Height。

八、媒体查询

div.sidebar {
width: 300px;
} @media all and (max-width: 400px) {
// styles assigned when width is smaller than 400px;
div.sidebar {
width: 100px;
} }

  这里的300px相对于谁呢?

  有两种媒体查询方式:width/height 和 device-width/device-height。

1.width/height是相对于documentElement .clientWidth/Height

2.device-width/device-height相对于screen.width/height

 

视口(viewport)原理详解之第一部分的更多相关文章

  1. ASP.NET页面与IIS底层交互和工作原理详解(第一回)

    引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net.他们耐心.细致地告诉你如何一步步拖放控件.设置控件属性.编写CodeBehind代码,以实现某个特定 ...

  2. 【动画消消乐】HTML+CSS 自定义加载动画:清新折叠方块效果 063(附源码及原理详解)

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 自我介绍ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专 ...

  3. 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解

    CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...

  4. SSL/TLS 原理详解

    本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...

  5. 锁之“轻量级锁”原理详解(Lightweight Locking)

    大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的性能往往不如人意. 原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖 ...

  6. [转]js中几种实用的跨域方法原理详解

    转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...

  7. 节点地址的函数list_entry()原理详解

    本节中,我们继续讲解,在linux2.4内核下,如果通过一些列函数从路径名找到目标节点. 3.3.1)接下来查看chached_lookup()的代码(namei.c) [path_walk()> ...

  8. 【转】VLAN原理详解

    1.为什么需要VLAN 1.1 什么是VLAN? VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络.V ...

  9. [No0000126]SSL/TLS原理详解与WCF中的WS-Security

    SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...

随机推荐

  1. verilog系统函数用法

    1.$fwrite 向文件写入数据 $fdisplay 格式:$fwrite(fid,"%h%h\n",dout_r1,dout_r2); (1)fwrite是需要触发条件的,在一 ...

  2. python技巧31[python中使用enum][转]

    以下几种方法来模拟enum:(感觉方法一简单实用) # way1 class Directions:     up = 0     down = 1     left = 2     right =3 ...

  3. 20170908工作日记--Volley源码详解

    Volley没有jar包,需要从官网上下载源码自己编译出来,或者做成相关moudle引入项目中.我们先从最简单的使用方法入手进行分析: //创建一个网络请求队列 RequestQueue reques ...

  4. hdu 2190 悼念512汶川大地震遇难同胞——重建希望小学

    题目 这道题拿到的时候拼凑了一会,感觉挺难的,然后博客说是:递推,我觉得递推其实就是找规律. 这是别人的思路:对于n米的长度,可以是由n-1长度加1而来,对于增加的1,只有三块1*1的砖一种铺法: 还 ...

  5. 18、docker的持久化存储和数据共享

    18.1 Data Volume Docker持久化数据方案 基于本地文件系统的Volume   可以在执行docker create或者docker run的时候,通过-v参数将主机的目录作为容器的 ...

  6. R12_专题知识总结提炼-AP模块

    应付模块业务操作流程 供应商管理 供应商概述 在您使用 Oracle Purchasing 之前,需要定义供应商.供应商site,以及供应商联系人,  供应商主数据(SUPPLIER MASTER D ...

  7. 配置Jenkins构建失败触发邮件报警机制

    系统管理 1.进入系统管理-->系统设置 定位到Jenkins Location配置项   配置系统管理员邮件地址 系统管理员邮件地址需要同发送报警邮件地址相同 定位到邮件通知   配置SMTP ...

  8. MVC-1.1 BundleConfig-ScriptBundle

    App_Start中的BudleCnfig.cs中 bundles.Add(new ScriptBundle("~/bundles/jquery").Include( " ...

  9. linux系统编程之信号(一):中断与信号

    一,什么是中断? 1.中断的基本概念 中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被 ...

  10. JS里关于特殊字符的转义

    重定向的url里含有百分号“%”,遇到了apache 找不到该文件的报错.通过查询相关文档,知道了原来是url里含有特殊字符要转码才能定位到正确的地址.比如"%"要转码为" ...