【问题标题】:Max width of absolute positioned element绝对定位元素的最大宽度
【发布时间】:2017-09-26 22:37:15
【问题描述】:

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

有没有办法让子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 答案中找到了一个解释,帮助我解决了这个问题。

【问题讨论】:

    标签: css css-position absolute


    【解决方案1】:

    只需在子 div 中添加 display: table,这应该会给您想要的结果。

    .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>

    【讨论】:

    • 将位置更改为相对于在 Firefox 中的工作,但不知道这是否是您想要的。
    【解决方案2】:

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

    .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>

    【讨论】:

    • 您的解决方案没有垂直居中。
    • 我的解决方案不打算垂直居中,只是为了解决 OP 最初的担忧:“绝对定位元素的最大宽度” - 它有。我不认为你的反对意见是合理的。
    • 感谢您对意图的描述,我删除了反对票并让 OP 决定。
    • 欣赏它@cyrix
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多