ChatGPT解决这个技术问题 Extra ChatGPT

向 HTML 表格添加水平滚动条

有没有办法在 HTML 表格中添加水平滚动条?我实际上需要它可以垂直和水平滚动,具体取决于表格的增长方式,但我无法让任一滚动条出现。

...想过把整个表放在一个 div 中吗? ...然后将滚动添加到 div?
也许是时候改变哪个答案成为公认的答案了?

S
Serge Stroobandt

首先,做一个显示:你的桌子块

然后,将 overflow-x: 设置为 auto

table {
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}

干净整洁。没有多余的格式。

这是来自我网站上的一个页面的more involved examples with scrolling table captions

如果出现有关单元格未填充整个表格的问题,请附加以下附加 CSS 代码:

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

这在 Chrome 中对我有用,但只有在将所有内容压缩在一起之后。 white-space: nowrap; 有助于立即看到滚动条。
我以前真的试过这个。唯一的问题是表格单元格不再填满表格的整个宽度。
正如其他人所说,这不能正常工作:表格行不填满表格宽度。
@collimarco 注意我必须使用 max-width: 100% 作为 inline-block 选项。
如果您使用 并且规则 'table tbody, table thead' 列和标题不匹配。我没有使用'display:table' 声明并将列大小放在 中(在 内)。
p
pasine

您是否尝试过 CSS overflow 属性?

overflow: scroll; /* Scrollbar are always visible */
overflow: auto;   /* Scrollbar is displayed as it's needed */

更新正如其他用户所指出的,这不足以添加滚动条。因此,请查看并支持下面的评论和答案。


根据我自己的尝试以及我在互联网上阅读的所有其他内容,这根本行不通。当然,您可以溢出包装元素,但不能溢出表本身。
@bloudermilk 如果您添加display: block,您可以。
不要在表上设置 display: block - 令人惊讶的是它会剥夺它们的语义!这会损害可访问性并使屏幕阅读器用户的生活变得困难。看这里developer.paciellogroup.com/blog/2018/03/…
哇...所以我很难在移动视图中显示一个表格,因为它弄乱了我的整个手机布局。谢谢@CeesTimmerman。它解决了我的问题
C
Colin M

将表格包装在 DIV 中,设置为以下样式:

div.wrapper {
  width: 500px;
  height: 500px;
  overflow: auto;
}

看来这里的 overflow:auto 是不必要的。你知道无论如何在不设置宽度的情况下实现这一点......这似乎总是 html 中的解决方案 - 硬编码一些宽度或高度,但这似乎破坏了拥有布局引擎的意义!
o
ochomoswill

这是对 Serge Stroobandt's 答案的改进,并且效果很好。它解决了列数较少时表格无法填满整个页面宽度的问题。

<style> 
 .table_wrapper{
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}
</style>

<div class="table_wrapper">
<table>
...
</table>
</div>

white-space: nowrap; 似乎是可选的。
出色的!样式化 div 包装而不是表格,解决了表格少列时无法填满整个页面宽度的问题。
似乎不需要display: block;
@BrunoElo 出于某种原因,我的表格不会在不显示的情况下滚动:块
R
Roger Willcocks

为此,请使用 CSS 属性“overflow”。

简短的摘要:

overflow: visible|hidden|scroll|auto|initial|inherit;

例如

table {
    overflow: scroll;
}

提供的链接已损坏
从上面的评论中引用@WickyNillams:>不要在表格上设置 display: block - 令人惊讶的是它剥夺了它们的语义!这会损害可访问性并使屏幕阅读器用户的生活变得困难。看这里tpgi.com/…
M
Mary7678

编辑:@WickyNilliams 注意到在表格主体上设置 display: block 会剥离语义表格,因此由于可访问性问题,这不是一个好的解决方案。

我在@Serge Stroobandt 提出的解决方案上取得了很好的成功,但我遇到了@Shevy 的问题,即单元格没有填满表格的整个宽度。我可以通过向 tbody 添加一些样式来解决此问题。

table {
  display: block;
  overflow-x: auto;
  white-space: nowrap;
}

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

这在 Mac 上的 Firefox、Chrome 和 Safari 中对我有用。


不要在表上设置 display: block - 令人惊讶的是它会剥夺它们的语义!这会损害可访问性并使屏幕阅读器用户的生活变得困难。看这里developer.paciellogroup.com/blog/2018/03/…
哎呀,不知道!感谢您提供信息,@WickyNilliams。
这是非常令人惊讶的行为!
您应用的表格 tbody 样式将使得表格 thead cols 的宽度与 tbody cols 不匹配。
table tbody{...} 样式没有应用到我的垫子表...有人有类似的问题吗?
m
mpen

我无法使上述任何解决方案起作用。但是,我发现了一个 hack:

身体{背景颜色:#ccc; } .container { 宽度:300px;背景颜色:白色; } 表 { 宽度:100%;边框折叠:折叠; } td { 边框:1px 纯黑色; } /* 尝试删除下面的“hack”,看看表格如何溢出 .body */ .hack1 { display: table;表格布局:固定;宽度:100%; } .hack2 { 显示:表格单元;溢出-x:自动;宽度:100%; }

table 或其他任意内容 会导致你的页面拉伸
不可控制 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


以上都没有对我有用,但确实如此。不错的,谢谢
@Gábriel 很高兴它对你有用。我刚才在 Firefox 中再次尝试了它,但它似乎没有正确呈现 :-( i.imgur.com/BcjSaCV.png Chrome 看起来仍然不错。
奇怪的;我完全在 Firefox 上使用它并且它在那里工作 - 尽管不是在这个确切的设置中。我想渲染一个由 10 x 10 px div 组成的大网格,其中包含折叠的边框和最大宽度 + overflow-x: auto 似乎是关键。有了这些,一切看起来都很完美。另外,我根本不使用 ,只使用 div,显示:table、table-row 和 table-cell。
J
Josh

我遇到了同样的问题。我发现了以下解决方案,该解决方案仅在 Chrome v31 中进行了测试:

table {
    table-layout: fixed;
}

tbody {
    display: block;
    overflow: scroll;
}

tbody {...} 样式似乎不适用于我的垫子表。知道为什么吗?
M
Mark Rotteveel

将表格插入到 div 中,因此表格将占据全长

HTML

<div class="scroll">
 <table>  </table>
</div>   

CSS

.scroll{
    overflow-x: auto;
    white-space: nowrap;
}

这对我有用。我通常会避免更改 HTML,但在这种情况下会容易得多
F
Forrest

带引导程序

 <div class="table-responsive">
   <table class="table">
     ...
   </table>
 </div>

G
George

我根据 previous solution and it's comment 找出了这个答案,并添加了我自己的一些调整。这在响应式表上对我有用。

table {
  display: inline-block;
  overflow-x: auto;
  white-space: nowrap;
  // make fixed table width effected by overflow-x
  max-width: 100%;
  // hide all borders that make rows not filled with the table width
  border: 0;
}
// add missing borders
table td {
  border: 1px solid;
}

@Saeed您的意思是html结构之类的吗?
我的错,我的意思是添加更多解释,以帮助更好地理解它
希望这个版本更加清晰。
P
Peps

桌子上的“超过 100% 的宽度”真的很适合我。

.table-wrap { 宽度:100%;溢出:自动; } 表 { 表布局:固定;宽度:200%; }


R
Riki krismawan

使用 style="overflow-x:auto" 将标签表添加到 div 元素

<div style="overflow-x:auto">
<table class="table table-bordered">
    <thead>
        <tr>
            <th><b>Name</b></th>
            <th><b>Username</b></th>
            <th><b>Email</b></th>
            <th><b>Avatar</b></th>
            <th><b>Status</b></th>
            <th><b>Action</b></th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>

M
Mugetsu

这对我有用

.wrapper {
  overflow-x: auto;
  white-space: nowrap;
}

.wrapper table {
  width: auto;
  min-width: 100%;
}

<div class="wrapper">
   <table>...</table>
</div>

K
Khaled

对于它的价值,我找到的最佳答案在这里:https://github.com/filamentgroup/tablesaw/issues/58#issuecomment-63966574

table.tablesaw
{
    table-layout: fixed;
    max-width: none;
    width: auto;
    min-width: 100%;
}

s
sarfrazanwar

我尝试了上述所有解决方案,但遇到了一些问题。

如果我们将 display: 'block' 添加到表格中,则单元格不会占据整个宽度。如果我们将它添加到表格包装器中,您的自定义表格标题(如搜索、过滤器等)也会滚动,看起来很糟糕。

通过将 overflow-x: auto 添加到表格的主体包装中,我能够实现预期的行为。

即使列较少,单元格也会占据全宽,并且会根据需要自动显示滚动条。


G
George Chond

如前所述,在桌子上使用 display:block; 是不好的。我尝试了此线程中的大多数答案,但没有一个按我的意愿工作。如果您的 HTML 结构如下:

<div>
  <table>
    <tbody>

并且您希望父 div 可以水平滚动,您可以尝试以下操作:

.text-left {text-align:left;} /* 忽略 */ .x-auto { overflow-x: auto; } .table { 文本对齐:左;表格布局:固定;宽度:100%;空白:nowrap; } .table tbody { 显示:表;宽度:100%; }

Head1 Head2
一些短文本! 一些非常长的文本,就像真的真的真的真的真的真的真的真的真的真的真的真的真的真的很长!


k
kinzzy goel
//Representation of table
<div class="search-table-outter">
<table class="table table-responsive search-table inner">
</table>
</div>

//Css to make Horizontal Dropdown

<style>

    .search-table{table-layout: auto; margin:40px auto 0px auto; }
    .search-table, td, th {
        border-collapse: collapse;
    }
th{padding:20px 7px; font-size:15px; color:#444;}
td{padding:5px 10px; height:35px;}
    .search-table-outter { overflow-x: scroll; }
th, td { min-width: 200px; }


</style>

如果您打算演示某些内容,缩进和示例数据会有所帮助。另外,您的意思是“滚动条”而不是“下拉菜单”吗?