首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用"position: absolute“检测元素?

如何使用"position: absolute“检测元素?
EN

Stack Overflow用户
提问于 2019-01-15 10:54:58
回答 1查看 650关注 0票数 0

我试图将一个元素精确地定位在另一个元素的"X“坐标中。在stackoverflow中有许多解决方案可以使用下面的内容来获得位置:

代码语言:javascript
复制
var rect = element.getBoundingClientRect();
console.log(rect.top, rect.right, rect.bottom, rect.left);

我的问题是,当我试图将值应用于其他元素中定位为“绝对”的元素的"element.style.left“时,元素位置变得更大,因为"left: 0”是绝对元素的开始,而不是文档的"left: 0“。

使用“绝对”的“嵌套”元素越多,差异就越大。

有没有办法用"position: absolute“来检测元素,这样我就可以通过用"absolute”打折每个元素的"left“来偏移要定位的实际值?

这就是问题:

代码语言:javascript
复制
  <span class="dropdown-label">Some menu</span>
  <nav class="dropdown-menu">
    <a class="item">Email</a>
    <a class="item">Twitter</a>
    <a class="item">Tumblr Blog</a>
    <span class="dropdown-label">Another menu</span>
    <nav class="dropdown-menu">
      <a class="item">Foo</a>
      <a class="item">Bar</a>
      <a class="item">I'm Batman</a>
      <span class="dropdown-label">Yet another menu</span>
      <nav id="finales" class="power-dropdown">
        <a class="item">Foo</a>
        <a class="item">Bar</a>
        <a class="item">I'm Robin</a>
      </nav>
    </nav>
  </nav>

每个dropdown都需要使用其各自标签的"lef“来定位,但是我们在其他dropdown中有dropdown,并且每个dropdown都是绝对定位的。

我知道我可以通过为每个定位为“相对”的下拉列表使用一个“容器”来避免这个问题,因此我不需要动态地将“左”设置为任何值。

问题是HTML变得更冗长,这是我想要避免的,另外我想控制下拉菜单的显示方式,以防止它被拉出屏幕。

但我似乎遇到了一个无法解决的问题,因为我在任何地方都找不到一种方法来检测使用“绝对”来定位的元素。

有没有类似于"element.position“的东西可以给我提供这个信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 12:06:31

您需要一种方法来检测元素上的position: absolute

使用window.getComputedStyle(element).position

代码语言:javascript
复制
function findAbsoluteElementsFromList(list){
  var ret = [];
  
  for (var i = 0; i < list.length; i++)
    if (window.getComputedStyle(list[i]).position === 'absolute')
      ret.push(list[i]);
      
  return ret;
}

console.log(findAbsoluteElementsFromList(document.querySelectorAll('div')));
代码语言:javascript
复制
.div {
  width: 100px;
  height: 100px;
  position: absolute;
  top: 0;
  transform: translateY(50%);
}
#a {
  position: relative;
  left: 0;
  background-color: #f00;
}
#b {
  left: 25px;
  background-color: #0f0;
}
#c {
  left: 50px;
  background-color: #00f;
}
代码语言:javascript
复制
<div class="div" id="a">
  <div class="div" id="b">
    <div class="div" id="c"></div>
  </div>
</div>

可以使用相同的函数来获取所有其他的CSS值。

Window.getComputedStyleElement.getBoundingClientRect()有什么不同?阅读here

为什么不能直接使用element.style.position呢?阅读here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54192124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档