强制"position:absolute"相对于文档而不是父容器

Tim*_*hle 78 html css css-position

我试图将div插入到正文的任何​​部分并使其position: absolute相对于整个文档而不是具有a的父元素position: relative.

Adr*_*aty 78

你在找position: fixed.

来自MDN:

固定定位类似于绝对定位,但元素的包含块是视口.这通常用于创建即使在滚动页面后仍保持在相同位置的浮动元素.

  • 这个答案的问题是用户想要使用绝对值,因为固定元素不会在滚动和绝对元素上移动:) (23认同)
  • 你是绝对的传奇。 (3认同)
  • 问题是如何相对于* document *而不是视口定位 (2认同)
  • 这会将其修复到视口,而不是文档。他想要一些可以随页面滚动的东西。 (2认同)

tw1*_*w16 36

你必须divposition:relative元素的外部放入body.

  • 您需要将容器作为另一个容器的子容器的数百个原因,但该位置应该是文档的绝对位置.像将它直接包含在身体中的答案是错误的.正确的答案是位置:固定.Downvoted. (11认同)
  • @DOOManiac - 您可能希望它位于相对定位的元素中,因为您希望它运行鼠标悬停脚本,或者不运行由父级触发的mouseout脚本.我的答案允许这种情况. (5认同)
  • @walv:“ position:fixed”和“ position:absolute”的行为不同。已修复,它是相对于视口(而不是文档)的,即使滚动后也可能导致重叠,从而使该项目始终可见。我了解html结构可能有正当的理由,但由于问题特别是关于html和CSS,我的回答是正确的。没有JS使其相对于文档相对的唯一方法是将其移出`position:relative`元素。 (3认同)

lio*_*orq 31

我的解决方案是使用jQuery将div移到其父级之外:

<script>
    jQuery(document).ready(function(){
        jQuery('#loadingouter').appendTo("body");
    });
</script>

<div id="loadingouter"></div>
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我的问题,因为我无法将我的元素直接放在 body 元素中,因为我使用的是母版页。谢谢! (3认同)

Mic*_*ley 8

如果您不想将元​​素附加到body,则以下解决方案将起作用.

我来到这个问题寻找一个解决方案,可以在不将div附加到正文的情况下工作,因为我有一个鼠标悬停脚本,当鼠标悬停在新元素和产生它的元素上时我想运行它.只要你愿意使用jQuery,并受到@Liam William的答案的启发:

var leftOffset = <<VALUE>>;
var topOffset = <<VALUE>>;
$(element).css("left", leftOffset - element.offset().left);
$(element).css("top", topOffset - element.offset().top);
Run Code Online (Sandbox Code Playgroud)

此解决方案通过减去元素的当前左侧和顶部位置(相对于正文)来将元素移动到0,0.然后将元素放置在相对于正文的任何​​位置,就像添加左侧和顶部偏移一样简单值.

  • 另外值得一提的是[jQueryUI position](http://api.jqueryui.com/position/)函数. (2认同)

Lim*_*ime 7

仅使用CSS和HTML是不可能的。

使用Javascript / jQuery,您可以将元素添加jQuery.offset()到DOM并进行比较,jQuery.position()以计算该元素在页面上的显示位置。