BOM中的高度属性主要涉及三块:screen、window、文档下的元素。

screen

其中screen最简单,代表着显示器的对象。

screen.height :屏幕高度,像素为单位。

screen.availHeight :屏幕高度送去Windows系统的任务栏的高度。

从左到右,分别是Edge Chrome Firefox。因为是同一个屏幕,所以三者的结果都是相同的。

screen.width 和 screen.availWidth 类似。因为水平方向没有任务栏,所以 screen.width == screen.availWidth 。

window

这里的window代表浏览器窗口,关于高度有两个:

  • innerHeight
  • outerHeight

window.outerHeight : 获取整个浏览器窗口的高度(单位:像素),包括侧边栏(如果存在)、窗口镶边和窗口调整边框。

window.innerHeight : 浏览器窗口的视口(viewport)高度(以像素为单位),如果存在水平滚动条,则包括它。

关于window的宽度类似:

  • window.outerWidth : 获取浏览器窗口外部的宽度。表示整个浏览器窗口的宽度,包括侧边栏(如果存在)、窗口镶边和调整窗口大小的边框。
  • window.innerWidth : 浏览器视口(viewport)宽度(单位:像素),如果存在垂直滚动条则包括它。

文档下的元素

文档下的元素的高度信息主要通过clientHeight这一属性获得。

clientHeight:

返回元素内部的高度(单位像素),包含内边距,但不包括水平滚动条、边框和外边距。

在下图中,element.clientHeight就是红色框内的高度。

关于文档中元素的clientHeight,我们主要关注这两个元素的:

  • document.documentElement
  • document.body

什么是 document.documentElement 元素呢?它代表着一个文档的根元素,如HTML文档的 <html> 元素,XML文档的根元素等等。

三者的关系

window.innerHeight document.documentElement.clientHeight 和 document.body.clientHeight 之间有什么关系呢?

window.innerHeight = document.documentElement.clientHeight +水平方向滚动条高度

Edge:因为没有水平方向滚动条,所以两者值相同

Chrome:因为有水平方向的滚动条,所以 window.innerHeight 比 document.documentElement.clientHeight 多了17px

而 document.body.clientHeight 就是body标签内的元素所占的高度(除了border和margin)。

clientHeight offsetHeight scrollHeight之间的关系

用一张图来说明,红色框中的是当前元素。

clientHeight :只有元素的内容区和padding

offsetHeight :元素的内容区 padding border margin scrollbar

scrollHeight :元素内容的实际高度,包含了溢出的部分

scrollTop :元素距离他容器顶部的像素距离

BOM中的各种height的更多相关文章

  1. css中的width,height,属性与盒模型的关系

    这段话很容易记住盒模型: css中盒子模型包含属性margin.border.padding.content,他们可以把它转移到我们日常生活中的盒子(箱 子)上来理解,日常生活中所见的盒子也具有这些属 ...

  2. K3精益版给物料添加属性,并在BOM中新增字段引用该属性

    1.给物料新增属性 打开“系统--基础资料--公共资料--核算项目管理”,然后双击物料,弹出核算项目类别-修改对话框.再点新增按钮: 输入你想新增字段的类型,长度,想要放置的位置. 相关属性里面选的是 ...

  3. JavaScript BOM-11-BOM的核心-window对象; window对象的控制,弹出窗口方法; 超时调用; 间歇调用; location对象常用属性; 位置操作--location.reaplace,location.reload(); BOM中的history对象; Screen对象及其常用属性; Navigator对象;

    JavaScript BOM 学习目标 1.掌握什么是BOM 2.掌握BOM的核心-window对象 3.掌握window对象的控制.弹出窗口方法 什么是bom BOM(browser object ...

  4. CSS中width和height与盒子模型的关系

    盒子模型 css中盒子模型包含属性margin.border.padding.width与height,他们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也具有这些属性,所以 ...

  5. 【CSS中width、height的默认值】

    对于初学者来说,CSS中的width.height的默认值是很神奇的,因为经常看到如下这样的代码:明明只给一个#father标签(红色的div)设置了一个width,为啥它在浏览器中显示出来是有一个固 ...

  6. js中不同的height, top的对比

    每次看到js中的clientHeight(clientTop), offsetHeight(offsetTop),scrollHeight(scrollTop)就头大,根本分不清这几种的区别,然而碰到 ...

  7. CSS中详解height属性

    目录结构: contents structure [+] hight属性值类型一览表 height的%的使用 定义 实例 需要注意的 参考文章 hight属性值类型一览表 value describt ...

  8. 解决在vue中设置的height: 100%没有效果

    在新的页面设置height无效果的时候.需要改动App这个文件的heigth 解决办法.给app这个盒子设置高度.默认情况下为0 设置高度100%时,div的高度会等同于其父元素的高度.而上面中id为 ...

  9. jQuery中animate的height的自适应

    可以用 animate() 方法几乎可以操作大部分CSS 属性,但其属性的值不能为字符串,很多人都遇到过这个问题.   例如:获取一个元素自适应时的高,但el.animate({height:‘aut ...

随机推荐

  1. Javascript中this关键字

    this 是谁调用的时候,指定的是谁,通俗一点讲就是,函数是谁执行是不是由其中一个对象点出来的那就是代表它, 比如执行对象a中b函数a.b();这个b函数中this代表a; 当换成var c=a.b; ...

  2. easyUI中datagrid的使用

    easyUI中的datagrid数据表格经常被用到,结合项目中的使用情况,总结一下datagrid使用中需要注意的一些问题.使用datagrid展示数据,需要在html.css.js中都要编写代码,h ...

  3. #include<> 和#include“”的区别

    1.< >引用的是编译器的类库路径里面的头文件2."    "引用的是程序目录的相对路径中的头文件,在程序目录的相对路径中找不到该头文件时会继续在类库路径里搜寻该头文件 ...

  4. 解决 MySQL 分页数据错乱重复

    前言 一天,小明兴匆匆的在通讯工具上说:这边线上出现了个奇怪的问题,麻烦 DBA 大大鉴定下,执行语句 select xx from table_name wheere xxx order by 字段 ...

  5. 01背包Bone Collector

    好几天没写博客了,整天忙着打比赛,希望能有参加省赛的资格,不容易啊. 今天复习背包,之前集训讲过,现在又忘了,昨天杭电校赛刚好有一题背包,居然不会做了,好尴尬,重新复习一下. https://vjud ...

  6. virtualbox中实施ASM扩容实施记录

    实施ASM在线扩容 1. 首先关闭集群 [root@node1 bin]# ./crsctl stop crs [root@node2 bin]# ./crsctl stop crs 关机,halt ...

  7. 利用Python进行简单的图像识别(验证码)

    这是一个最简单的图像识别,将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt ...

  8. IOS(二)基本控件UIButton、简易动画、transform属性、UIImageView

    UIButton //1.设置UIButton 的左右移动 .center属性 获得 CGPoint 来修改x y //1.设置UIButton 的放大缩小 bounds属性 获得CGRect 然后通 ...

  9. springboot(十二):springboot如何测试打包部署

    有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发.调试.打包到最后的投产上线. 开发阶段 单元 ...

  10. vue视频学习笔记04

    video 4 手动配置自己:webpack+vue-loader webpack加载模块-------------------------------------如何运行此项目?1. npm ins ...