【问题标题】:inline flex container width not growing内联弹性容器宽度没有增长
【发布时间】:2018-03-23 01:59:32
【问题描述】:

考虑以下布局:

<div class="div">
  <span class="span1">test</span>
  <span class="span2">test test test test test</span>
</div>

和css:

.div{
   display:inline-flex;
   background-color:lightgray;
}
.span1{
   flex:0 0 100px;
}
.span2{
   white-space:nowrap;
}

为什么 div 没有拉伸到足以覆盖两个跨度?这发生在 FF 和 Chrome 中。在 IE 11/Edge 中它可以工作(正如我所期望的那样) 这是小提琴https://jsfiddle.net/p18h0jxt/

PS:如果我使用以下样式,它无处不在:

.span1{
   flex:0 0 auto;
   width:100px;
}

谢谢。

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    您在当前示例中引用的100px 指的是flex-basis,而不是元素宽度。

    【讨论】:

    • 我知道,但是在初始宽度计算时使用 flex-basis 作为宽度(如果 flex-direction 是行)。
    • 是的,但是将您的父级 div 设置为 inline-flex 会否定这一点
    【解决方案2】:

    来自this SO answer

    影响所有主要浏览器的错误,IE 11 和 Edge 除外:

    正如您所说 - 显然 flex-basis 在嵌套的弹性容器中不受尊重。

    因此,flex: 0 0 100px; 中的 100px flex-basis 无法正常工作(具有讽刺意味的是,在 IE 11 和 Edge 中除外)。

    解决方法(也提到here)是使用width 而不是flex-basis,如下所示:

    .div {
      display: inline-flex;
      background-color: lightgray;
    }
    
    .span1 {
      width: 100px;
    }
    
    .span2 {
      white-space: nowrap;
    }
    <div class="div">
      <span class="span1">test</span>
      <span class="span2">test test test test test</span>
    </div>

    您可以使用flex 代替inline-flex,但您的div 将呈现为块元素,即它将占据可用的全部宽度,而不是局限于您的内容。

    我假设您使用的是inline-flex,因此背景仍然局限于内容。

    【讨论】:

    • 谢谢!我认为这个错误是在 IE 中。事实上,具有讽刺意味的是,IE 在这一点上是正确的。大声笑
    • 没问题 :) 直到你提到它,我才知道这个错误,所以谢谢!
    • 虽然问题看起来确实是一个错误,但我不确定您的错误参考是否适用。在该参考文献中,问题出现在嵌套的弹性容器中。在这种情况下,弹性容器没有嵌套。它是主要且唯一的容器。
    • 我也注意到nested 的引用。我找不到此错误的文档,但您的答案是最接近的。似乎使用inline-flex 设置的主容器遇到了这个问题,并且flex-basis 不能可靠地用于孩子。我再看看。 This link 表示有人在尝试对 inline-flex 容器的子级使用 flex-basis 时遇到类似问题。
    • 我将此错误添加到引用的答案中。另外,最重要的是,您的回答确实解决了问题。
    猜你喜欢
    • 1970-01-01
    • 2015-05-07
    • 2019-06-30
    • 2017-03-01
    • 2020-03-03
    • 2017-03-14
    • 1970-01-01
    相关资源
    最近更新 更多