使用javascript获取div的宽度

joa*_*otg 0 javascript

为什么document.getElementById("mydiv").style.width不返回 mydiv 的宽度?它返回一个空字符串。有些人建议使用 offsetWidth,但我不明白为什么不能从 style.width 获取它。

小智 5

DOM 元素尺寸的主题很复杂。

您可能想要以下之一:

offsetWidth

只读属性HTMLElement.offsetWidth以整数形式返回元素的布局宽度。

通常,offsetWidth是元素 CSS 宽度的像素测量值,包括任何边框、填充和垂直滚动条(如果呈现)。它不包括伪元素的宽度,例如 ::before::after

如果元素被隐藏(例如,通过将style.display元素或其祖先之一设置为“none”),则0返回。

clientWidth

对于内联元素和没有 CSS 的元素,该Element.clientWidth属性为零;否则,它是元素的内部宽度(以像素为单位)。它包括填充,但不包括边框、边距和垂直滚动条(如果存在)。

clientWidth用于根元素(<html>元素)(或者<body>如果文档处于怪异模式时),则返回视口的宽度(不包括任何滚动条)。这是 clientWidth 的一个特例。

getBoundingClientRect

Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置。

在使用标准盒模型的情况下,元素的大小等于其宽度/高度 + 填充,或者仅在已 box-sizing: border-box对其进行设置时才等于宽度/高度。

jQuery 将部分复杂性隐藏在.width方法后面。

const $ = document.querySelector.bind(document)
const d1 = $('#unstyled')
const d2 = $('#stylesheet')
const d3 = $('#inline')
const details = $('#details')

details.innerHTML = (`
<table>
  <tr>
<td><h2>A</h2> offsetWidth: '${d1.offsetWidth}', clientWidth: '${d1.clientWidth}', getBoundingClientRect().width: '${d1.getBoundingClientRect().width}', style.width: '${d1.style.width}'
</td>
  </tr>
  <tr>
<td><h2>B</h2> offsetWidth: '${d2.offsetWidth}', clientWidth: '${d2.clientWidth}', getBoundingClientRect().width: '${d2.getBoundingClientRect().width}', style.width: '${d2.style.width}'
</td>
  </tr>
  <tr>
<td><h2>C</h2> offsetWidth: '${d3.offsetWidth}', clientWidth: '${d3.clientWidth}', getBoundingClientRect().width: '${d3.getBoundingClientRect().width}', style.width: '${d3.style.width}'
</td>
  </tr>
</table>`)
Run Code Online (Sandbox Code Playgroud)
* {
  box-sizing: border-box;
  font-family: sans-serif;
  font-size: .9rem;
}
#stylesheet {
  line-height: 50px;
  width: 100px;
  height: 50px;
  text-align: center;
  padding: 5px; 
  margin: 5px;
  border: 5px solid red;
}
div {       
  display: inline-block;
  box-shadow: 0 0 0px 1px silver inset;
}
table {
  border: 0px;
}
td {
  text-align: left;
  padding: 0px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="unstyled">A</div>
<div id="stylesheet">B</div>
<div id="inline" style="width:100px;height:50px;text-align: center;line-height: 50px; padding: 5px; margin: 5px; border: 5px solid red;">C</div>
<section id="details"></section>
Run Code Online (Sandbox Code Playgroud)