企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 元素的大小和位置 > 设置或者读取一个元素的大小位置相关的量,会出现很多很相似的属性,这里一一分析,并得出最佳使用方式。 >[danger] 滚动条的出现让人感到疑惑,经过对比发现,滚动条的出现与否原理上简单的,它始终只是占用内容区的空间。 >即:设置内容区宽度为100px ,滚动条宽度为10px。 没有滚动条出现时候:内容真实宽度为100px; 出现了滚动条:那真实占有宽度为90px; **** #### 1. 偏移量 `offset` 任何展示在页面上的元素都有其父框,这里讨论的偏移量就是研究对象相对于其父框的。 1.1. 没有出现滚动条 ~~~ offsetWidth=border左右宽度+padding左右宽度+content宽度 offsetHeight=border上下高度+padding上下高度+content高度 offsetLeft=marginLeft+left(设置了position) offsetTop=marginTop+top(设置了position) ~~~ **** 1.2. 出现了滚动条 >[info] 出现了滚动条后滚动条的宽度会占用本来设置的内容区的宽度,所以宽度也就是本来的元素的宽度,但是通过开发者工具来查看盒模型,会有迷惑。这时候可以自定义滚动条的宽度(水平和垂直方向),经过换算得出校验结果。 [自定义滚动条样式](scrollar-thumb.md) ![](https://box.kancloud.cn/06cb9f849b3a0439b5bb87e14e215648_679x401.png) #### 2. 客户区 `client` ~~~ someElement.clientWidth=元素内容区宽度+左右内边距 someElement.clientHeight=元素内容区高度+上下内边距 ~~~ ~~~ 需要说明: 2.1 如果给元素设置了width,那么 无论有没有滚动条,这里的clientWidth都等于设置的这个width, element.style.width 2.2 如果没有设置宽度, 那么如果没有滚动条,就等于 getComputedStyle(element, null).width 如果出现了滚动条,眼睛观察到的元素可视宽度加上滚动条宽度才等于 getComputedStyle(element, null).width+滚动条宽度 ~~~ * * * * * #### 3. 滚动大小 ~~~ 指的是包含滚动内容的元素的大小 scrollHeight 在没有滚动条的情况下,元素内容的总高度 scrollWidth 在没有滚动条的情况下,元素内容的总宽度 通过设置下面这两个属性可以改变元素在水平/垂直方向的滚动位置 scrollLeft 被隐藏在内容区域左侧的像素数 --水平 scrollTop 上方 --垂直 ~~~ * * * * * #### 4. 取得元素的位置和大小 ~~~ element.getBoundingClientRect() 这里的width==offsetWidth, height=offsetHeight,有没有滚动条不影响 ~~~ ![](https://box.kancloud.cn/54af07f5f8859248d6dc24af01d57fe7_842x343.png) * * * * * #### 5. 取得元素的计算样式 ~~~ let style = window.getComputedStyle(element, [pseudoElt]); ~~~ > 方法给出应用活动样式表后的元素的所有 `CSS` 属性的值,并解析这些值可能包含的任何基本计算。 返回的样式是一个实时的 `CSSStyleDeclaration` 对象,当元素的样式更改时,它会自动更新本身。 >[success] 在许多在线的演示代码中, `getComputedStyle` 是通过 `document.defaultView` 对象来调用的。 大部分情况下,这是不需要的, 因为可以直接通过 `window` 对象调用。 但有一种情况,你必需要使用 `defaultView` , 那是在 `firefox3.6` 上访问子框架内的样式 (`iframe`)