【问题标题】:Break Table Cell Content when max-width is reached达到最大宽度时打破表格单元格内容
【发布时间】:2019-07-21 23:57:20
【问题描述】:

我有一个这样的 HTML 表格:

div {
  width: 100%;
  overflow-x: auto;
}

table {
  white-space: nowrap;
}

td {
  border: 1px solid gray;
  padding: 5px 10px;
  
  min-width: 100px;
  max-width:40vw;
}
<div>
  <table style="width: 100%;">
    <tr>
      <td class="block">1</td>
      <td class="block">A table cell content</td>
      <td class="block">This should be a text that breaks after 200px Lorem ipsum dolor sit amet</td>
      <td class="block">A table cell content</td>
      <td class="block">A table cell content</td>
      <td class="block">A table cell content</td>
      <td class="block">A table cell content</td>
    </tr>
  </table>
</div>

结果:

问题是,当到达max-width 时,文本应该换行。我知道white-space: nowrap 会导致这个问题,但如果没有,文本会在到达max-width 之前换行。

【问题讨论】:

    标签: css html-table css-tables


    【解决方案1】:

    JsFiddle

    td {
      border: 1px solid gray;
      padding: 5px 10px;
      min-width: 100px;
      max-width:40vw;
      white-space: pre-wrap
    }
    

    td 中添加white-space: pre-wrap 或在table 中删除white-space: nowrap

    你能在td中添加span标签来实现这个输出吗?

    span {
      white-space: pre-wrap
    }
    

    JsFiddle 2

    但是,您在 table 中设置了 width:100%。我已经将它设置在 px 中,例如 width:1500px。如果您在表格中设置 100% 宽度,剩余的列将在达到其最大宽度之前换行这些文本。

    JsFiddle 2 with Width:100%

    您可以检查上面的小提琴,我在table 中设置了width:100% 并删除了最后两列。现在,冗长的文本列将适应40vw,而其余列将不会预先包装文本。所以,这也取决于你的父表宽度。

    【讨论】:

    • 我澄清了这个问题:问题是,在到达max-width 之前,文本应该换行
    • @Koopakiller 你能检查一下我的第二把小提琴吗?
    • 这不是我想要的...我希望看到表格尽可能小,但如果需要根据vw 在每列中增长到max-width。意味着:我对表格内容一无所知,但用户应该能够尽可能轻松地阅读内容,这意味着我不喜欢指定表格的宽度我不知道它有多少列有
    【解决方案2】:

    因为您有 white-space: nowrap;,它不会中断,但您可以将类添加到您想要中断的 td,希望这对您有所帮助,谢谢。

    .no-white-space{
    white-space: normal;
    }
    

    div {
      width: 100%;
      overflow-x: auto;
    }
    
    table {
      white-space: nowrap;
    }
    
    td {
      border: 1px solid gray;
      padding: 5px 10px;
      
      min-width: 100px;
      max-width:40vw;
    }
    
    .no-white-space{
    white-space: normal;
    }
    <div>
      <table>
        <tr>
          <td class="block">1</td>
          <td class="block">A table cell content</td>
          <td class="block no-white-space">This should be a text that breaks after 200px Lorem ipsum dolor sit amet</td>
          <td class="block">A table cell content</td>
          <td class="block">A table cell content</td>
          <td class="block">A table cell content</td>
          <td class="block">A table cell content</td>
        </tr>
      </table>
    </div>

    【讨论】:

    • 我想避免我必须以任何方式处理文本。添加另一个类并不像普通的 CSS 解决方案那么容易实现
    • @Koopakiller,这个答案似乎没有处理文本。你的第二句话是什么意思?添加一个类是一个简单的 CSS 解决方案。
    • 我对单元格内容一无所知,尤其是文本的长度,这就是为什么我无法在不进一步处理文本的情况下添加类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2011-10-26
    • 1970-01-01
    • 2023-03-23
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多