【问题标题】:Flexbox - fluid column with "no wrap" textFlexbox - 带有“无换行”文本的流体列
【发布时间】:2016-11-16 11:05:08
【问题描述】:

我正在尝试设置一个包含三列的 flexbox 布局。左列和右列具有固定宽度。中心列具有可变宽度以填充可用空间,但它包含一个长文本,不应将其换行并使用省略号。

不幸的是,非换行文本无法让列占用可用空间并将整个布局推到父元素的边界之外。

img {
    max-width: 100%;
}
#container {
    display: flex;
    max-width: 900px;
}
.column.left {
    width: 350px;
    flex: 0 0 350px;
}
.column.right {
    width: 350px;
    flex: 0 0 350px;
}
.column.center {
   // fluid width required
}

h1 {
 white-space: nowrap;
 overflow: hidden;
 text-overflow: ellipsis;
}
<div id="container">
  <div class="column left">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150" alt="">
  </div>
  <div class="column center">
    <h1>
     This is long text. If overflow use ellipsis
    </h1>
  </div>
  <div class="column right">
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150" alt="">
  </div>
</div>

小提琴链接: http://jsfiddle.net/2Lp8d80n/

感谢任何帮助。

【问题讨论】:

    标签: html css flexbox nowrap


    【解决方案1】:

    您可以在.center 列上添加flex: 1overflow: hidden

    同样当你设置flex: 0 0 350px;时,不需要定义width,宽度固定为350px,或者在这种情况下是flex-basis

    img {
      max-width: 100%;
    }
    #container {
      display: flex;
      max-width: 900px;
    }
    .column.left {
      flex: 0 0 350px;
    }
    .column.right {
      flex: 0 0 350px;
    }
    .column.center {
      flex: 1;
      overflow: hidden;
    }
    h1 {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    <div id="container">
      <div class="column left">
        <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150" alt="">
      </div>
      <div class="column center">
        <h1>
         LONG LONG TEXT LONG LONG TEXT LONG LONG TEXT
        </h1>
      </div>
      <div class="column right">
        <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150" alt="">
      </div>
    </div>

    【讨论】:

    • 按照您的建议,您可以在左右列中使用 css 属性 flex-basis: 350px; 而不是 flex: 0 0 350px;:)
    • @RicardoRuiz,如果您使用flex-basis 而不是flex,那么flex-shrink 默认为1。但是 OP 想要flex-shrink: 0。正如规范所建议的那样,最好使用flex 属性来覆盖初始值。请在此处查看 flex-shrink 因素stackoverflow.com/a/34355447/3597276
    猜你喜欢
    • 2015-03-09
    • 2015-12-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多