盒子模型

一.概念

1.内容的宽度和高度

我们设置的width/height这两个样式就是内容的宽和高;

● 如果没有设置height值,容器的高度会根据里面内容自适应,这样获取的值就是真实内容的高;

● 如果设置了固定的高度,不管内容是多还是少,其实我们内容的高度值的都是设定的那个值。

2.<span style="color:red">真实</span>内容的宽度和高度

代指的是实际内容的宽高(和我们设置的height没有必然的联系),

如我设置高度为200,如果内容有溢 出,

那么<span style="color:red">真实内容的高度是要把溢出内容的高度</span>也加进来的。

3.js盒子模型属性

在JS中通过相关的属性可以获取(设置)元素的样式信息,

这些属性就是盒子模型属性(基本上都是有关于样式的)

client系列
      top
      left
      width  
      height

scroll系列
      top
      left
      width
      height
     
offset系列
      top
      left
      width
      height
      parent

二.client系列

1.clientWidth & clientHeight

  • 获取当前元素可视区域的宽高(内容的宽高+左右/上下PADDING)
    和内容是否有溢出无关<span style="color:red">(即不包含border值)</span>
  • 如果设置了<span style="color:red">box-sizing:border-box</span>; 则clientWidth/clientHeight =<span style="color:red">容器宽/高- border</span>

2.clientTop/Left

  • 获取(上/左)<span style="color:red">边框的宽度</span>

3.总结

image.png

三.scroll系列

1.scrollWidth & scrollHeight

<span style="color:red">是当前页面的真实宽/高(所有屏加起来的宽/高),但是是一个约等于的值</span>`

  • 容器中内容没有溢出的情况下:和我们的clientWidth/clientHeight一模一样

  • 如果容器中内容有溢出,获取的结果如下规则:

scrollWidth:<span style="color:red">真实内容的宽度(包含溢出)+左填充</span>

scrollHeight:<span style="color:red">真实内容的高度(包含溢出)+上填充</span>

获取到的结果都是“约等于”的值,因为:

  • 同一个浏览器,我们是否设置overflow="hidden",对于最终的结果是有影响的(滚动条也占据宽度会影响);

  • 在不同的浏览器中我们获取到的结果也是不相同的

//获取整个页面真实的高度
document.documentElement.scrollWidth || document.body.scrollWidth
document.documentElement.scrollHeight || document.body.scrollHeight


#### 2.scrollLeft&scrollTop<span style="color:red">(可读写属性)</span>

>**滚动条卷去的宽度/高度** 
>
>1.之前我们学习的js盒子模型中:<span style="color:red">client系列/offset系列/scrollWidth/scrollHeight都是“只读”属性</span>->只能通过属性获取值,不能通过属性修改元素的样式
>2.scrollTop/scrollLeft:滚动条卷曲的高度/宽度(这两个属性是唯一“可读写”属性)

####  3.边界值

```javascript
min =0;
max = 整个高度的scrollHeight - 一屏幕高度clientHeight

四.offset系列

1.offsetWidth & offsetHeight

  • 在client的基础上<span style="color:red">加上border</span>(和内容是否溢出也没有关系)

2.offsetParent

  • 当前元素的父级参照物,在同一个平面中,<span style="color:red">最外层的元素</span>是里面所有元素的父级参照物(<span style="color:red">和html层级结构没有必然的联系</span>)

  • 一般来说一个页面中所有元素的<span style="color:red">父级参照物都是body</span>

<div id="outer">
 <div id="inner">
     <div id="center"></div>
 </div>
</div>
 
var outer = document.getElementById("outer"),
inner = document.getElementById("inner"),
center = document.getElementById("center");

console.log(center.offsetParent);    //body
console.log(inner.offsetParent); //body
console.log(outer.offsetParent); //body
console.log(document.body.offsetParent); //null
  • <span style="color:red">想要改变父级参照物</span>需要通过<span style="color:red">position</span>定位来进行改变:absolute,relative,fixed中任意一个值都可以把父级参照物进行修改
outer.style.position = "relative";
inner.style.position = "relative";
console.log(center.offsetParent);    //inner
console.log(inner.offsetParent); //outer
console.log(outer.offsetParent); //body

3.offsetLeft/offsetTop

  • <span style="color:red">当前元素</span>(外边框)距离其<span style="color:red">父级参照物</span>(内边框)的偏移距离
console.log(center.offsetLeft);  //距离body左偏移距离
console.log(inner.offsetLeft);   //距离body左偏移距离
console.log(outer.offsetLeft);   //距离body左偏移距离

outer.style.position = "relative";
inner.style.position = "relative";
console.log(center.offsetLeft);  //距离inner左偏移距离
  • 无论你的父参照物是谁,我就想获取其距离BODY的偏移值
image.png

[图片上传失败...(image-326582-1607906039428)]

五.总结

  • 我们通过以上这些属性值获取的结果永远不可能出现小数,都是整数;

浏览器获取结果的时候,会在原来真实结果的基础上进行四舍五入。

  • 关于浏览器本身盒子的模型信息
clientWidth & clientHeight: 是当前浏览器可视窗口的宽/高(一屏幕的宽/高)

scrollWidth/scrollHeight: 是当前页面的真实宽/高(所有屏加起来的宽/高),但是是一个约等于的值
  • 宽和高的总结
1.clientWidth & clientHeight:获取当前元素可视区域的宽高(内容的宽高+左右/上下PADDING)
  //获取当前页面一屏幕(可视区域)的宽度和高度
   document.documentElement.clientWidth || document.body.clientWidth
   document.documentElement.clientHeight || document.body.clientHeight

2.offsetWidth & offsetHeight:在client的基础上加上border(和内容是否溢出也没有关系)

3.scrollWidth & scrollHeight:真实内容的宽高(需要把溢出的内容也算上)+ 左/上PADDING
 
  获取当前页面的真实宽高(包含溢出的部分)
     document.documentElement.scrollWidth || document.body.scrollWidth
     document.documentElement.scrollHeight || document.body.scrollHeight
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容

  • 盒子模型 JS盒子模型指的是通过JS中提供的一系列的属性和方法,获取页面中的样式信息值#box有很多私有属性->H...
    小K强阅读 640评论 0 0
  • #前端基础 # ## JavaScript基础 ## ###渲染机制与变量 ### script代码为什么放到bo...
    hmg阅读 231评论 1 1
  • JavaScript ECMAScript(ES):规定了一些基础核心的知识(变量、数据类型、语法规范、操作语句等...
    小K强阅读 432评论 0 0
  • 写在前面: Window和document对象的区别 window对象表示浏览器中打开的窗口 window对象是可...
    给堕落一个理由先阅读 677评论 0 3
  • 周日 DOM和BOM DOM (Document Object Model,简称DOM),是W3C组织推荐的处理可...
    布吉阁阅读 223评论 0 0