绝对定位元素的最大宽度

Max width of absolute positioned element

我有一个居中 div(使用绝对定位和 transform:translate(-50%,-50%),如 here 所述)。当 child div 的内容很短时,一切正常。当内容很长时,那么 child div 宽度被限制在容器的 50% div (可能是因为 left 设置为 50%)。

有没有办法让child div只有在内容很长的时候才展开到全宽?

.container {
  position: relative;
  display: inline-block;
  width: 200px;
  height: 200px;
  margin-left: auto; 
  margin-right: auto;
  border: 2px solid black;
}

.child {
  position: absolute;
  transform: translate(-50%, -50%);
  left:50%;
  top:50%;
  background:lightgreen;
}
<div class="container">
  <div class="child">short</div>
</div>

<div class="container">
  <div class="child">long long long long long long long</div>
</div>

编辑:我在 this 答案中找到了帮助我解决这个问题的解释。

只需将 display: table 添加到 child div,这应该会得到您想要的结果。

.container {
  position: relative;
  display: inline-block;
  width: 200px;
  height: 200px;
  margin-left: auto; 
  margin-right: auto;
  border: 2px solid black;
}

.child {
  display: table;
  position: relative;
  transform: translate(-50%, -50%);
  left: 50%;
  top: 50%;
  background:lightgreen;
}
<div class="container">
  <div class="child">short</div>
</div>

<div class="container">
  <div class="child">long long long long long long long</div>
</div>

如果你可以使用 flexbox 你也可以这样做:

.container {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  vertical-align: top;

  width: 200px;
  height: 200px;
  border: 2px solid black;
}

.child {
  background:lightgreen;
}
<div class="container">
  <div class="child">short</div>
</div>
<div class="container">
  <div class="child">long long long long long long long</div>
</div>

添加一个额外的嵌套元素,让您更好地控制相关元素的动态定位和缩放。

.container {
  position: relative;
  display: inline-block;
  width: 200px;
  height: 200px;
  margin-left: auto; 
  margin-right: auto;
  border: 2px solid black;
  box-sizing: border-box;
}

.child {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    text-align: center;
}

.child-inner {
    background: lightgreen;
    left: 0;
    right: 0;
    display: inline-block;
}
<div class="container">
  <div class="child"><div class="child-inner">short</div></div>
</div>

<div class="container">
  <div class="child"><div class="child-inner">long long long long long long long</div></div>
</div>