css 表宽100%,带溢出滚动

lf3rwulv  于 2022-12-15  发布在  其他
关注(0)|答案(3)|浏览(174)

我将网页上的表格设置为width:100%。这会在需要时将表格拉伸到页面的全宽,或者在页面太窄时使表格内容换行。表格中的所有内容都保留在网格中。
不幸的是,如果表中存在长字,则会出现一些问题,这会阻止td变窄。当这种情况发生时,页面开始开发一个水平滚动条来容纳表,把其他元素放在页面上,比如段落,保持原页面的宽度。
我试着将表格设置为overflow:scroll以防止网页变宽,将其限制在表格中,但这并没有解决问题。我甚至试着将表格设置为overflow:hidden以查看它是否会响应,但我无法让它工作。
如果我将表设置为display:block,那么溢出就可以工作,但是我无法使表行和表数据单元格在整个表中伸展并保持其类似于表的外观。
有没有可能总是让一个表的宽度是一个页面的100%,并使用溢出滚动,如果表超过这个宽度?
我在下面添加了这个例子。它工作得很好,除了当页面变窄的时候,比如这个例子中的150px。表格单元格变窄了,以至于它不能再换行了。我想让表格溢出,但是整个页面溢出了。

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent finibus nulla et lorem imperdiet, eu malesuada enim viverra. Fusce sit amet nisi sed ante semper porta non in velit. Aenean euismod finibus nibh id mollis. Duis finibus, urna eu gravida posuere, nisl tortor condimentum dui, sed suscipit ante lacus et augue. Vestibulum ut leo hendrerit, convallis lectus quis, mollis purus. Mauris vitae libero aliquam, porttitor nisi vitae, pellentesque odio. Mauris vestibulum lacinia sem. Aenean sit amet nulla ipsum. Mauris pellentesque dui feugiat odio feugiat, vel egestas eros pellentesque. Cras porttitor metus eu porttitor lacinia.</p>
<table style="width:100%;overflow:scroll;background:#555">
<tr><td>column one</td><td>column two</td><td>column three</td></tr>
</table>
nmpmafwu

nmpmafwu1#

您不能仅通过更改表的display来实现这一点,但有几种方法可以实现这一点。

1.添加“滚动”容器div

您可以在容器div中向上放置标准表,并给予 it 指定overflow: auto;,这样它就有了滚动条。

table          { width: 100%; }
.scrollwrapper { overflow: auto; }

这意味着即使表格本身不够宽,它也会拉伸到至少100%的宽度,如果内容使其宽度超过100%,则div会得到一个滚动条。

工作示例:

x一个一个一个一个x一个一个二个x

2.带显示器的表格:块

这并不符合您的要求,但让我们看看为什么...
当你给table的display:block属性赋值时,如果表格的宽度超过了可用空间,那么它会给表格添加滚动条,但是正如你所注意到的,如果表格的宽度没有达到可用空间的宽度,那么width:100%不会让列拉伸到足够的宽度:

工作示例显示:表格上的块

一个三个三个一个
正如我们在上面的例子中所看到的,表格实际上被拉伸到了100%,然而这是因为表格行和单元格没有填满表格。这是我发现tbody黑客攻击的时候...

3.带显示的表格:块和tbody“hack”

请注意,这是一个非常黑客,我不知道如何以及支持它可能!

在处理这个问题时,我意识到问题是行和单元格没有作为正常的行和单元格,因为它们不在具有display:table的父对象中。
这时我发现,当我将display:table添加到tbody时,它为行和单元格提供了一个具有正确显示类型的父对象,并且它工作了!

table       { display: block; overflow: auto; }
table tbody { display: table; width: 100%; }

即使tbody没有显式地添加到html中,它似乎也能工作。
tbody hack的工作示例

table {
  border: 1px solid blue;
  overflow: auto;
  display: block;
}

table tbody {
  display: table;
  width: 100%;
}

td {
  border: 1px solid #aaa;
}
<h3>Tbody "Hack" - Wide Table</h3>

<table>
  <tr>
    <td>thisisoneverylongwordthatwillnotwrapinthetablecell</td>
    <td>thisisoneverylongwordthatwillnotwrapinthetablecell</td>
    <td>thisisoneverylongwordthatwillnotwrapinthetablecell</td>
  </tr>
  <tr>
    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent finibus nulla et lorem imperdiet, eu malesuada enim viverra.</td>
    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent finibus nulla et lorem imperdiet, eu malesuada enim viverra.</td>
    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent finibus nulla et lorem imperdiet, eu malesuada enim viverra.</td>
  </tr>
</table>

<h3>Tbody "Hack" - Narrow Table</h3>

<table class="tbody-hack">
  <tr>
    <td>Column 1</td>
    <td>Column 2</td>
    <td>Column 3</td>
  </tr>
  <tr>
    <td>Short text</td>
    <td>Short text</td>
    <td>Short text</td>
  </tr>
</table>
pgky5nke

pgky5nke2#

如果表的宽度大于<div>的宽度,则会弹出溢出

<div id="table" style="width:200px">

  <table style="width:100%; overflow:auto;display:block">
    <tr>
      <th>header</th>
      <th>header</th>
      <th>header</th>
      <th>header</th>
      <th>header</th>
      <th>header</th>
    </tr>

    <tr>
      <td>body</td>
      <td>body</td>
      <td>body</td>
      <td>body</td>
      <td>body</td>
      <td>body</td>
    </tr>

  </table>

</div>
pgky5nke

pgky5nke3#

使用CSS网格。

.table-wrapper {
  display: grid;
  grid-template-columns: repeat(1, minmax(0, 1fr));
  overflow: auto;
  white-space: nowrap;
}
<div class="table-wrapper">
<table>
  <thead>
    <tr>
        <th>Head 1</th>
        <th>Head 2</th>
        <th>Head 3</th>
        <th>Head 4</th>
        <th>Head 5</th>
        <th>Head 1</th>
        <th>Head 2</th>
        <th>Head 3</th>
        <th>Head 4</th>
        <th>Head 5</th>
        <th>Head 1</th>
        <th>Head 2</th>
        <th>Head 3</th>
        <th>Head 4</th>
        <th>Head 5</th>
        <th>Head 1</th>
        <th>Head 2</th>
        <th>Head 3</th>
        <th>Head 4</th>
        <th>Head 5</th>
    </tr>
  </thead>
  <tbody>
    <tr>
        <td>Content 1</td>
        <td>Content 2</td>
        <td>Content 3</td>
        <td>Content 4</td>
        <td>Content 5</td>
        <td>Content 1</td>
        <td>Content 2</td>
        <td>Content 3</td>
        <td>Content 4</td>
        <td>Content 5</td>
        <td>Content 1</td>
        <td>Content 2</td>
        <td>Content 3</td>
        <td>Content 4</td>
        <td>Content 5</td>
        <td>Content 1</td>
        <td>Content 2</td>
        <td>Content 3</td>
        <td>Content 4</td>
        <td>Content 5</td>
    </tr>
  </tbody>
</table>
</div>

相关问题