【问题标题】:Center absolute div inside relative parent with dynamic width [duplicate]在具有动态宽度的相对父级内居中绝对 div [重复]
【发布时间】:2020-10-06 10:07:03
【问题描述】:

我需要在相对容器(蓝色)内居中(从左到右)绝对元素(绿色)。子元素(绿色)需要具有动态/未设置的宽度。我宁愿不使用 JavaScript(仅限 CSS 和 html)。

代码:

.relativeParent {
  width: 100px;
  height: 100px;
  background: blue;
  position: relative;
  overflow: visible;
  display: block;
  margin-left: 100px;
  margin-bottom: 20px;
}

.absoluteChild {
  display: block;
  background: green;
  position: absolute;
}
<div class="App">
  <div class='relativeParent'>
    <div class='absoluteChild'>test</div>
  </div>
  <div class='relativeParent'>
    <div class='absoluteChild'>asd asdf asdf asdf asdfa sdf</div>
  </div>
</div>

【问题讨论】:

  • 我的解决方案是transform: translate(calc(-50% + 50px) , 0);。这只有效,因为我假设父级的 with 将是 100px 并且不会改变。

标签: html css css-position absolute


【解决方案1】:

left: 50%;top: 50%;transform: translate(-50%, -50%); 添加到绝对div。

.relativeParent {
  width: 100px;
  height: 100px;
  background: blue;
  position: relative;
  overflow: visible;
  display: block;
  margin-bottom: 20px;
}

.absoluteChild {
  display: block;
  width: 100%;
  background: green;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}

.flexParent {
  background: green;
  display: flex;
  flex-wrap: wrap;
  width: 100px;
  min-height: 100px;
  justify-content: center;
  align-items: center;
  padding: 12px 0;
}

.flexParent .child {
  background: blue;
  padding: 8px;
}
<div class="App">
  <div class='relativeParent'>
    <div class='absoluteChild'>test</div>
  </div>
  <div class='relativeParent'>
    <div class='absoluteChild'>asd asdf asdf asdf asdfa sdf</div>
  </div>
  <div class='flexParent'>
    <div class='child'>asd asdf asdf asdf asdfa sdf asd asdf asdf asdf asdfa sdfasd asdf asdf asdf asdfa sdfasd asdf asdf asdf asdfa sdfasd asdf asdf asdf asdfa sdf</div>
  </div>
</div>

【讨论】:

  • 唯一的问题是绿色不能填满蓝色容器的宽度。这可能就是您将蓝色框的宽度增加到 200 像素的原因。
  • 我已经修改了代码。请检查。如果您认为子 div 的内容可以更父,那么您将不得不使用 javascript 设置父 div。在这种情况下,最好的选择是display: flex;,我已经在答案中添加了示例代码
  • 现在“test”没有动态宽度。我想你看到了这个问题。这最终为我工作。变换:翻译(计算(-50% + 50px),0);
猜你喜欢
  • 2016-02-02
  • 2011-08-04
  • 2015-04-10
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多