显示 Flex 单元格 IE10 内的断字/自动换行

rbs*_*hlm 2 css flexbox internet-explorer-10

在 IE10 中显示 flex 的单元格内出现断字问题。它在 chrome 上正确运行,比较 chrome 中的小提琴以查看预期的行为。

在该示例中,表格中的第一个单元格应该分词,而不是流入下一个单元格。

我尝试了多个断字和自动换行(在 chrome/mozilla 中都不需要),但它们在 IE 中不起作用。

任何帮助表示赞赏。

js小提琴

HTML:

<div class="container">
    <div class="table">
        <div class="table-row">
            <div class="table-row-cell">Long string input that we want to word break and not overflow into other cell</div>
            <div class="table-row-cell">short</div>
            <div class="table-row-cell">short</div>
            <div class="table-row-cell">short</div>
        </div>
        <div class="table-row">
            <div class="table-row-cell">normal length</div>
            <div class="table-row-cell">short</div>
            <div class="table-row-cell">short</div>
            <div class="table-row-cell">short</div>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

html, body { padding: 0; margin: 0; }
.container {
    width: 400px;
}
.table {
    display: -webkit-box;
    display: -moz-box;
    display: box;
    display: -webkit-flex;
    display: -moz-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-flex-flow: column nowrap;
    -moz-flex-flow: column nowrap;
    flex-flow: column nowrap;
    -ms-flex-direction: column;
    -ms-flex-wrap: nowrap;
    -webkit-box-pack: justify;
    -moz-box-pack: justify;
    -ms-flex-pack: justify;
    box-pack: justify;
    -webkit-justify-content: space-between;
    -moz-justify-content: space-between;
    -ms-justify-content: space-between;
    -o-justify-content: space-between;
    justify-content: space-between;  
}
.table-row {
    display: -webkit-box;
    display: -moz-box;
    display: box;
    display: -webkit-flex;
    display: -moz-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-flex-flow: row nowrap;
    -moz-flex-flow: row nowrap;
    flex-flow: row nowrap;
    -ms-flex-direction: row;
    -ms-flex-wrap: nowrap;
}
.table-row-cell {
    display: -webkit-box;
  display: -moz-box;
  display: box;
  display: -webkit-flex;
  display: -moz-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-grow: 1;
  -moz-flex-grow: 1;
  flex-grow: 1;
  -ms-flex-positive: 1;
  -webkit-flex-basis: 0;
  -moz-flex-basis: 0;
  flex-basis: 0;
  -ms-flex-preferred-size: 0;
  /*  word-wrap: break-word;
  overflow-wrap: break-word;
  word-break: break-all;
  word-break: break-word;
  -ms-word-wrap: break-word;
  -ms-overflow-wrap: break-word;
  -ms-word-break: break-all;
  -ms-word-break: break-word;*/
  padding: 0.5em;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*bon 5

这实际上是 IE 10 和 11 中 flexbox 的一个已知错误(https://github.com/philipwalton/flexbugs#12-inline-elements-are-not-treatment-as-flex-items)。

我能够想出的可能有助于解决您的问题的唯一解决方法是将溢出的内容包装在块级元素中,然后在该元素上设置最大宽度:

<div class="table-row-cell">
  <p style="display: block; max-width: 100px;">
    Long string input that we want to word break and not overflow into other cell
  </p>
</div>
Run Code Online (Sandbox Code Playgroud)

此解决方案的结果:

IE 表演