固定宽度列的表格如何在容器中自适应扩展

10

显然这是一个经典问题,但我找到的“解决方案”都没有起作用,包括stackoverflow上其他相关问题。

如果我的表格比其容器更宽,我希望我的表格单元格宽度保持固定,不会重新调整以适应容器大小。

可复现的 HTML 代码(<td>由 PHP 生成):

<html>
  <head></head>

  <body>
    <table>
      <tr>
        <?php for($i=0;$i<15;$i++) { 
           echo "<td style='width:150px;border-right:1px solid black;'>".($i+1)."</td>"; 
        } ?>
      </tr>
    </table>
    <div style='background:chartreuse;width:150px'>This is 150px wide.</div>
  </body>
</html>

我尝试过:

  • table-layout:fixed
  • 使用设置为display:inline-block容器
  • 使用内联块级元素div容器

看起来应该有一种简单的方式让上述代码生成一个超出页面边界的表格。

有人能帮忙吗?

编辑

从我的先前措辞可能不清楚,但我想要自己指定列宽。

我正在尝试在不为表格指定显式宽度的情况下实现这一点。只有TD将强制表格变宽,这样会(?)强制容器变宽。

此外,内联CSS仅用于示例目的。


table-layout:fixed 会解决问题。请删除您为 td 提供的内联样式。您正在指定一个宽度。当您不为 td 指定宽度时,td 会根据内容调整大小,并且使用 table-layout fixed 不会根据内容调整大小。 - Bala
@Bala - 请看编辑。我希望<td>具有固定的宽度。如果我不在<td>上设置宽度,则问题将被消除。 - Ben
你可以分享生成的HTML代码,或者告诉我它是否可以在线查看。 - Bala
本帖的未来读者:我的问题中的源HTML已在下面的答案中复制,并附有可行的解决方案(再次感谢Bala)。 - Ben
2个回答

11
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<div style="margin: 0pt auto; width: 980px;">
  <div style="500px;overflow:scroll">
    <table style="width: 100%; table-layout: fixed;">
      <tbody>
        <tr>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
        </tr>
      </tbody>
    </table>
    <div style="background:chartreuse;width:150px">This is 150px wide.</div>
  </div>
</div>
</body>
</html>

那就是它,谢谢。我知道有一个简单的解决方案 :p 我漏掉了width:100%。干杯!以下是我的可重现代码,带有正确的 CSS。 - Ben

0

使用我在问题中的HTML,这是正确的标记,感谢@Bala。

<html>

  <head></head>

  <body>
    <table style='table-layout:fixed;width:100%'>
      <tr>
        <?php for($i=0;$i<15;$i++) { echo "<td style='width:150px;border-right:1px solid black;'>".($i+1)."</td>"; } ?>
      </tr>
    </table>
    <div style='background:chartreuse;width:150px'>This is 150px wide.</div>
  </body>

</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接