【问题标题】:Positioning below absolutely positioned divs定位在绝对定位的 div 之下
【发布时间】:2015-06-23 22:32:08
【问题描述】:

我有两个<div>s 和absolute position。显示一个,另一个是 display: none 加载。当点击可见链接上的链接时,它会移动并显示另一个。

我有第三个<div> 链接,我想直接在这些链接下方显示。因为他们都是position: absolute,所以我一直无法找到一种方法来做到这一点。我找到了各种解决方案,但其中大多数是使用绝对位置的解决方法。由于我的<div>s 需要显示在彼此之上,我很遗憾无法删除绝对定位。

因此,我在三个<div>s 上尝试了position: absoluteposition: relative 的各种组合,但到目前为止没有任何效果。

JSFiddle 解决我的问题:https://jsfiddle.net/dagz9tLw/1/

<div> id linkbar 是需要在底部的那个。

另外两个<div>s 没有设置高度,所以margin-top 将不起作用。 linkbar 也需要在 <div>s 的下方,而不是在页面底部。

【问题讨论】:

  • 是否可以将所有<div>s 放入另一个<div> 并使那个一个绝对定位?还是我答错了问题?或者是否有可能将其中一些<div>s 组合在一起?
  • 当div移动时,链接是应该跟着下移还是div应该和链接重叠?
  • @Xufox 可以,但是当它可见时,后面的 div 也位于前面 div 的下方。
  • @RobertCordes 链接应该下移是的,但不正确

标签: javascript jquery html css css-position


【解决方案1】:

我体验到使用div 充当buffer 非常有用且易于实现。您只需将其设置在您的 div#linkbar 上方并在加载时调整它的高度以及当 div#front 重新定位时:

$("#topBuffer").css("height", $("#front").offset().top + $("#front").height());

$("#showLink").click(function() {
  if (!$("#back").is(":visible")) {
    $("#back").show();

    $("#front").animate({
      'marginLeft': "+=30px"
    });
    $("#front").animate({
      'marginTop': "+=20px"
    });
    $("#topBuffer").animate({
      'height': "+=20px"
    });
  }

  return true;
});
.front {
  width: 400px;
  display: block;
  border: 2px solid #000000;
  text-align: center;
  position: absolute;
  margin-top: 20px;
  z-index: 10;
  background-color: white;
}
.back {
  display: none;
  width: 400px;
  border: 2px solid #000000;
  text-align: center;
  position: absolute;
  z-index: 1;
  margin-top: 20px;
  background-color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="front" class="front">
  <a id="showLink" href="javascript:void(0);">front</a>
</div>
<div id="back" class="back">
  <a href="">back</a>
</div>
<div id="topBuffer"></div>
<div id="linkbar">
  <a href="">test</a>
  <a href="">test</a>
  <a href="">test</a>
</div>

【讨论】:

  • @Vinc Btw:如果你想要元素向下滑动,你可以把$("#front").animate({ 'marginTop': "+=20px" }); $("#topBuffer").animate({ 'height': "+=20px" });放在一个匿名回调函数中,实现向右滑动的动画
  • firebug 目前正在使用 jQuery 1.11.0 和 jQuery UI 1.10.3 显示 TypeError: $(...).offset(...) is undefined im,但在 jsfiddle 中使用该版本有效,我错过了什么
  • 没关系修复它在文档准备好之前运行$("#topBuffer").css("height", $("#front").offset().top + $("#front").height()); 行。这很好用,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多