【问题标题】:Increase width for fixed height HTML table data cell?增加固定高度 HTML 表格数据单元格的宽度?
【发布时间】:2016-08-14 09:43:40
【问题描述】:

类似Fixed Height and Changing Width for Header (HTML Table) 的问题 - 除了我想问:除了使用  而不是空格之外,还有其他方法可以实现这一点吗?基本上,我想增加表格数据单元格中的文本内容以保持单元格高度固定,而不是增加单元格宽度..

下面是一个最小的 HTML 示例,它在更改浏览器 (Firefox 43) 宽度时的行为如下:

如您所见,无论 CSS 中的 height/max-height 规范如何,表格 td 字段都会增加它们的高度,同时减小宽度。

我希望在这种情况下,td 单元格的指定高度 - 和相应的宽度 - 在浏览器宽度发生变化时保持不变,而变化的是底部滚动条。

有什么方法可以用 CSS 甚至 JS 来实现吗?


回复@tgallimore的问题:

  • 你能给表格一个固定的宽度吗? - 不,我希望它根据内容调整宽度
  • 你知道你希望每个单元格保持多宽吗? - 不,我希望它有一个固定的宽度,然后如果它足以容纳两行文本,这些应该调整为最佳宽度(即每一行的文本数量大致相同)
  • 可以为每个单元格指定此宽度吗? - 不,单元格将具有不同的文本内容,如示例中所示

回应@Leothelion 的帖子:我想指定一个固定高度2em(或者说,2.5em),因为我希望它能够为最多两行提供足够的垂直空间的文本。所以我想要实现的是: * 如果单元格中的文本很短(即一个单词),则没有换行,文本为单行,单元格高度为2.5em * 如果单元格中的文本很长(一个完整的句子),那么我希望布局能够确定在2.5em 的单元格高度中,它最多可以容纳两行文本;此后它会尝试打破文本,使两行中的字符数量大致相同(所以现在我们有一个“段落”;最后它将单元格的宽度设置为这个新换行的宽度“段落”。

换句话说,我想要这样的布局:

...不管我如何缩放浏览器宽度;如果浏览器宽度太小,则只调整水平滚动条。


示例 HTML 代码:

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <script type="text/javascript" src="../jquery-1.12.3.min.js"></script>
  <style type="text/css">
.mytbl,
.mytbl tr th,
.mytbl tr td {
  border-style: solid;
  border-color: #000;
  border-spacing: 0;
  border-collapse: collapse;
  padding: 4px;
  border-width: 1px;
  font: 12px helvetica,arial,sans-serif;
}
.mytbl tr td {
  height: 2em;
  max-height: 2em;
}
.mtytblwrap {
  border-width: 1px;
  border-color: #000;
  padding: 4px;
  overflow: auto;
  overflow-y: hidden;
}
  </style>
  <script type="text/javascript">
ondocready = function() {
  // placeholder - nothing for now...
}
$(document).ready(ondocready);
  </script>
</head>

<body>
  <h1>Hello World!</h1>

  <div id="wrapper1" class="mtytblwrap">
    <table id="table1" class="mytbl">
      <thead>
        <tr>
         <th> Dendrologist </th>
         <th> Iciness </th>
         <th> JoyfulDistortion </th>
         <th> Suburbicarian </th>
         <th> Ecballium </th>
         <th> AbulicNonviolence </th>
         <th> GrowlerTheocracy </th>
         <th> Necessitattion </th>
        </tr>
      </thead>
      <tbody>
        <tr>
         <td> A1 </td>
         <td> Just testing some longer content here, so long that it might not fit on a single line </td>
         <td> Molybdenum </td>
         <td> D1 </td>
         <td> Scanty Distensibility </td>
         <td> Arithmetical </td>
         <td> G1 </td>
         <td> Hypallelomorph </td>
        </tr>
      </tbody>
    </table>
  </div>

</body>
</html>

【问题讨论】:

    标签: html css html-table


    【解决方案1】:

    您需要的是媒体查询

    见我的UPDATED FIDDLE

    在不同的分辨率下(我只取了1,根据你的需要调整),固定宽度和table-layout: fixed;,你会得到你的解决方案。

    【讨论】:

    • 非常感谢@Leothelion - 但据我所知,您的小提琴没有将单元格高度固定为 2em,而是修复表格宽度,然后设置每个单元格拥有相等的宽度 - 这是一个有趣的解决方案,但不完全是我正在寻找的......干杯!
    • oohh..对不起,如果它没有给你完美的答案:(
    • 没问题,@Leothelion - 参考您发布的解决方案仍然很好;干杯!
    • 再次感谢@Leothelion - 我想指定高度为 2em 的原因是我希望有足够的垂直空间将文本分成两行(和两行最大);你的小提琴发生的事情是你使用了nowrap,所以即使 td 单元格的高度正确,文本也只有一行。我更新了我的 OP 并进行了澄清。
    【解决方案2】:

    你能给表格一个固定的宽度吗? 你知道你希望每个单元保持多宽吗?可以给每个单元格这个宽度吗?

    如果内容不合适,表格单元格总是会扩展其高度,无论您是否设置了高度(因此在这种情况下,height 将作为min-height 工作)。

    另外,您可能需要使用.mytbl { table-layout: fixed; }。这告诉表格使用您定义的宽度,而不是尝试修复每个单元格中的内容。有关更多信息,请参阅:https://css-tricks.com/fixing-tables-long-strings/

    【讨论】:

    • 谢谢你,@tgallimore - 我已经更新了 OP 并回答了我们的问题;我一定会看看table-layout: fixed; 和你发送的链接。干杯!
    猜你喜欢
    • 2011-05-10
    • 2012-10-03
    • 2014-04-17
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多