为什么.offsetParent返回非定位元素的最近表

dir*_*lik 5 html javascript css

MDN文档到Element.offsetParent:

HTMLElement.offsetParent只读属性返回到位于含有元件,其是最接近的(最近的在包含层次结构)的对象的引用.如果元素未定位,则offsetParent返回最近的表,表格单元格或根元素

.offsetParent如果元素未定位(即position: static),为什么返回最近的表?为什么不.offsetParent总是返回最近的定位元素?

我知道我的问题的答案是because standard says so,但为什么标准的开发人员决定,该解决方案的目的是什么?

Kai*_*ido 1

这些文档充其量误导性的,或者是误导性的。

新版本更加清晰:

定位祖先是:

  • 具有非静态位置的元素,或者
  • td, th,table如果元素本身是静态定位的。

因此,如果最近的、或.offsetParent之前有一个,是否“返回最近的定位元素” :tdthtable

console.log("in positioned", target1.offsetParent);
console.log("in static", target2.offsetParent);
Run Code Online (Sandbox Code Playgroud)
.positioned { position: relative }
Run Code Online (Sandbox Code Playgroud)
<table>
  <tbody>
    <tr>
      <td>
        <div class=positioned>
          <span id=target1>content</span>
        </div>
      </td>
      <td>
        <div class=static>
          <span id=target2>content</span>
        </div>
      </td>
    </tr>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

至于为什么他们决定将这些元素视为定位元素,即使它们的计算结果position是,这肯定是因为它们的位置实际上是由与static规则"static"不匹配的规则决定的。