javascript - 什么会使 offsetParent 为空?

标签 javascript html positioning

我正在尝试用 JavaScript 进行定位。我正在使用基于 classic quirksmode function 的累积头寸函数将每个 offsetParentoffsetTopoffsetLeft 相加,直到顶部节点。

但是,我遇到了一个问题,我感兴趣的元素在 Firefox 中没有 offsetParent。在 IE 中 offsetParent 存在,但是 offsetTopoffsetLeft 总和为 0,因此它与 Firefox 中的效果相同。

什么会导致屏幕上清晰可见且可用的元素没有 offsetParent?或者,更实际地说,我如何才能找到该元素的位置以便在其下方放置一个下拉菜单?

编辑:以下是重现此问题的一个特定实例的方法(当前接受的答案未解决):

  1. 打开 home page of Stack Overflow .
  2. 在网络浏览器(例如 Chromev21)的控制台中运行以下代码:

    var e = document.querySelector('div');
    console.log(e);
    // <div id="notify-container"></div>
    do{
      var s = getComputedStyle(e);
      console.log(e.tagName,s.display,s.visibility,s.position,e.offsetParent);
    } while(e=e.parentElement)
    // DIV block visible fixed null
    // BODY block visible static null
    // HTML block visible static null
    

为什么该元素的 offsetParent null

最佳答案

我做了a test of 2,304 divs具有 position 值的独特组合, display , 和 visibility ,嵌套在每个值的唯一组合中,并确定:

否则有效的元素
那是 <body> 的后代
不会有 offsetParent值如果:

  • 元素有position:fixed (Webkit 和 IE9)
  • 元素有display:none (Webkit 和 FF)
  • 任何祖先都有display:none (Webkit 和 FF)

同样可以合理预期没有父元素或未添加到页面本身的元素(不是页面的 <body> 的后代)也将具有 offsetParent==null .

关于javascript - 什么会使 offsetParent 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/306305/

相关文章:

javascript - 忽略按键上的输入字符

javascript - LitElement 无限滚动重定位问题

html - 是否可以将内容溢出到类似 iframe 的页面中?

javascript - 单击附加新容器

javascript - Highcharts 工具提示中的可点击链接

HTML、属性和顺序

html - 工具提示被 div 容器截断

html - 无法通过 CSS 使图像移动

css - 缩略图滚动条标题淡入淡出位置

javascript - 在 map 中调用 api