使元素相对于另一个元素居中

时间:2016-12-29 06:08:10

标签: javascript html css flexbox centering

我有一个元素应该水平居中于另一个元素。中心元素的CSS是这样的(我删除了不必要的代码):

#center-element{
    display: flex;
    flex-direction: column;
    align-items: stretch;
    position: absolute;
}

我必须使用vanilla JS这样做。我试过了:

var targetPos = target.getBoundingClientRect();
centerDiv.style.top = (targetPos.top + targetPos.height) + "px";
centerDiv.style.left = (targetPos.left + (targetPos.width  / 2)) + "px";

但那是关闭的。有什么想法吗?

JSFiddle

2 个答案:

答案 0 :(得分:1)

//Somehow center the div here
var target = document.getElementById("target");
var centerDiv = document.getElementById("centerDiv");
var targetPos = target.getBoundingClientRect();
centerDiv.style.top = targetPos.bottom + "px";
centerDiv.style.left = targetPos.left + (target.offsetWidth - centerDiv.offsetWidth) / 2 + "px";
#target {
  background-color: lightblue;
  text-align: center;
  width: 75%;
}
#centerDiv {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  position: absolute;
}
<div id="target">
  This is the div
</div>
<div id="centerDiv">
  This is supposed to be horizontally centered <em>to the div element above</em>
</div>

答案 1 :(得分:0)

您可以使用flexbox来完成。您可以将div包装在容器div中,并在该容器上应用display:flex;

#target {
  background-color: lightblue;
  text-align: center;
  width: 100%;
}
#centerDiv {
  /* display: flex;
  flex-direction: column;
  align-items: stretch;
  position: absolute; */
  text-align:center;
}
.container{
  display:flex;
  width:75%;
  flex-direction:column;
  align-items:center;
  justify-content:center;
}
<div class="container"><div id="target">
  This is the div
</div>
<div id="centerDiv">
  This is supposed to be horizontally centered <em><br/>to the div element above</em>
</div>
</div>