相对于不是其父元素的另一个元素定位元素

San*_*tas 7 html javascript css reactjs

考虑到对话框、模式、工具提示等组件的堆叠索引应高于 HTML 页面中任何其他元素的堆叠索引,我将这些组件放置在root放置所有其他元素的元素的直接同级元素中。React 开发人员很快就会认识到这一点,他们会知道我正在尝试使用React Portals。您可以在这里将其可视化:

<body>
  <div id="root">
    // ----- other elements -----
    <div id="supposed-parent" />
    // ----- other elements -----
  </div>
  <div id="dialog-container">
    <div id="supposed-child" />
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

那么,我该如何定位#supposed-child在旁边或旁边#supposed-parent呢?任何帮助,将不胜感激。

Pon*_*man 6

我认为纯 css 不可能做到这一点。但通过一个小脚本我们就可以实现这一点。获取假定父级的左偏移量和顶部,并将其应用于假定子级。子元素应该是绝对定位的元素。检查下面的示例,希望这对您有用。

即使假定的子级(黄色框)独立于假定的父级,它也将始终与假定的父级的左上角对齐。

function offsetCalculate(){
    var parentTop = $('#supposed-parent').offset();
    var parentLeft = $('#supposed-parent').offset();
    $('#supposed-child').css({
        'top':parentTop.top,
        'left': parentLeft.left
    });
}
$(document).ready(function () {
    offsetCalculate();
});
$(window).resize(function(){
    offsetCalculate();
});
Run Code Online (Sandbox Code Playgroud)
#supposed-child{
    position: absolute;
    background: yellow;
    border-radius: 5px;
    padding: 10px;
    z-index: 999;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="root">
    <h1>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer dolor libero, euismod et nisl eu, imperdiet elementum neque. Praesent aliquet non tellus sed blandit. Ut vitae velit eget turpis ornare convallis. Quisque nec felis eget mi vestibulum luctus eu non dui.</h1>
    <div id="supposed-parent">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer dolor libero, euismod et nisl eu, imperdiet elementum neque. Praesent aliquet non tellus sed blandit. Ut vitae velit eget turpis ornare convallis. Quisque nec felis eget mi vestibulum luctus eu non dui. Pellentesque eget commodo tellus. Curabitur a dolor est. Integer dapibus lectus nec mi luctus, ac ornare ex auctor. Donec vel nisi nulla. Mauris maximus egestas nunc ut egestas. Suspendisse id leo nec elit consectetur interdum. Ut purus nibh, tristique quis est vel, ultrices blandit nibh. Aenean nibh justo, mattis sed vulputate quis, efficitur eu mauris. Sed vel vulputate metus, et dictum arcu. In ornare nisl vitae purus elementum, quis egestas dolor volutpat. In velit nisi, posuere in urna non, feugiat luctus enim.
    </div>

</div>
<div id="dialog-container">
    <div id="supposed-child" >This is a popup</div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案+1。我明白了,我很感激。我从来没有想过这一点,但我认为它确实会起作用,因为我熟悉使用 JS 获取元素的位置。不过,我将使用“parentElem.getBoundingClientRec()”。此外,我正在开发一个 React 项目,并且在 React 中使用 jQuery 是一个很大的问题。不过还是谢谢你。 (2认同)