javascript - 如何在给定的 div 下方,在其他 div 之上创建一个 div,但不改变其他 div 的位置?

标签 javascript jquery html css

如何在不移动位置的情况下创建一个 div,就在给定的 div 下面但在页面中所有其他 div 之上?这是一个例子:

  ---------------------------------------------
  |               |          |                |
  |    div1       |   div2   |         div3   |
  |               |          |                |
  ---------------------------------------------
  |                     |                     |
  |    div4             |         div5        |
  |                     |                     |    
  ---------------------------------------------
  |... some more divs...

我想在 div2 的 onClick 处理程序中创建一个 div,这样当单击 div2 时,将显示新创建的 div,它与 div2 左对齐,位于 div2 下方,但位于下方其他 div 之上。页面的新外观将是:

  ---------------------------------------------
  |               |          |                |
  |    div1       |   div2   |         div3   |
  |               |          |                |
  ---------------------------------------------
  |               |                  |        |
  |    div4       |     Newly        |  div5  |
  |               |     Created      |        | 
  -----------------     Div          ----------
  | ...some more..|                  |        | 
  |  ...divs...   |                  |        | 
  |               |                  |        | 
  |               |                  |        | 
  |               |                  |        | 
  ---------------------------------------------

解决方案必须是通用的。例如,Javascript 函数将是:

 createDivBelow(css selector, height, width)

因此,给定任何 div 的 css 选择器,该函数将在其下方创建一个 div,左对齐并具有指定的高度和宽度。关键问题是它必须定位,以便下面或其他地方的其他 div 不会移动。新创建的 div 必须在最上面。我认为新的 div 必须是绝对定位的,可能相对于 body。但是怎么知道把它放在哪里呢?毕竟,div2 本身可能会嵌入到其他 div 中。

编辑以解决一些评论和提议的解决方案 我需要一个通用的解决方案,不考虑页面的结构。解决方案不能感知其他元素,更不用说依赖于其他元素的 CSS,而且 div2 本身可以放置在任何地方。

最佳答案

根据 OP 的评论更新

理论上你可以这样做:

  1. 当一个 div 被点击时,给它添加一个类,将它的位置设置为 static 以外的位置,例如position: relativez-index 的值大于其余 div 的值,它将位于顶部

  2. 将新创建的 div 附加到点击的那个,给它一个绝对位置,将它的 left 设置为 0 并且它的top100%,它将被定位为左/底对齐,没有任何其他元素移动,无论哪个 div 是点击。

有了上面的内容,它也会响应,如果用户改变屏幕宽度,它也会随之移动。


这是一个简单的演示。

堆栈片段

$("nav div").click(function () {

  $(this).toggleClass('haspopup');

  if ($(this).hasClass('haspopup')) { 
     $(this).append("<div class='popup'>Here is your popup</div>");
  } else {
     $(this).find('.popup').remove();
  }
  
});
nav {
margin-top: 50px;
  display: flex;
  counter-reset: demo;
}
nav div {
  border: 1px solid black;
  flex: 1;
  padding: 20px;
}
nav > div::before {
  content: 'DIV';
}
nav + div {
  background: lightgray;
  padding: 20px;
}

nav div.haspopup {
  position: relative;
  z-index: 1000;
}
nav div.haspopup .popup {
  position: absolute;
  left: 0;
  top: 100%;
  background: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<nav>
  <div></div>
  <div></div>
  <div></div>
</nav>

<div>This element won't move or be affected when the popup shows</div>

关于javascript - 如何在给定的 div 下方,在其他 div 之上创建一个 div,但不改变其他 div 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49585093/

相关文章:

javascript - 改变 Canvas 元素的颜色

javascript - 无法读取javascript中的对象属性

javascript - AngularJS 思考 - 在 AJAX 请求中修改 DOM 的正确方法是什么?

javascript - 仅用一个滚动条在 X 轴上移动三个表格

JavaScript 导致大量内存泄漏

javascript - 使用 Ryan Fait "Check All"自定义表单元素时的 's "函数”

javascript - 单击外部以关闭下拉头像菜单

javascript - 使用 JQuery 单击时不显示 Div(CSS - block /无)

javascript - 如何从复杂的 svg 正确生成 Canvas

javascript - 是否有 js 函数或 html 属性将文本格式化为输入区域?