【问题标题】:add scroll bar to table body向表格主体添加滚动条
【发布时间】:2013-07-01 07:29:59
【问题描述】:

我想在不使用任何其他库的情况下尽可能轻松地做到这一点。

在我很长的表格中,我想在<tbody> 标签中添加一个滚动条,以便头部始终可见,但它不起作用。你能帮忙吗?

小提琴:http://jsfiddle.net/Hpx4L/

<table border="1">
  <thead>
    <tr>
      <th>Month</th>
      <th>Savings</th>
    </tr>
  </thead>
  <tfoot>
    <tr>
      <td>Sum</td>
      <td>$180</td>
    </tr>
  </tfoot>
  <tbody style="overflow-y:scroll; height:100px;"> <!-- wont work -->
    <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
          <tr>
      <td>January</td>
      <td>$100</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
    </tr>
  </tbody>
</table>

【问题讨论】:

标签: html css


【解决方案1】:

如果您不想在任何 div 下包装表​​格:

table{
  table-layout: fixed;
}
tbody{
      display: block;
    overflow: auto;
}

【讨论】:

    【解决方案2】:

    这些解决方案通常存在标题列与正文列对齐的问题,并且在调整大小时可能无法正常工作。我知道你不想使用额外的库,但如果你碰巧使用 jQuery,这个库真的很小。它支持固定页眉、页脚、列跨度 (colspan)、水平滚动、调整大小以及在滚动开始前显示的可选行数。

    jQuery.scrollTableBody (GitHub)

    只要您有一个正确的&lt;thead&gt;&lt;tbody&gt; 和(可选)&lt;tfoot&gt; 的表,您需要做的就是:

    $('table').scrollTableBody();
    

    【讨论】:

    • 这是我能找到的唯一不需要搞砸表格的 HTML/CSS 的解决方案。谢谢!
    • @Sevin7 如果您查看此 jQuery 插件的代码,它实际上是在您的表格中添加了额外的 html / css。所以它为你搞砸了 html / css,而不是你必须自己做。
    【解决方案3】:

    这是因为您在表中的&lt;td&gt; 之前添加了&lt;tbody&gt; 标签,如果没有&lt;td&gt;,您将无法打印任何数据。

    因此,您必须使用position: fixed; 来创建&lt;div&gt;#header

     header
     {
          position: fixed;
     }
    

    创建另一个&lt;div&gt;,它将充当&lt;tbody&gt;

    tbody
    {
        overflow:scroll;
    }
    

    现在您的标题已固定,正文将滚动。并且标题将保留在那里。

    【讨论】:

      【解决方案4】:

      您可以将&lt;tbody&gt; 的内容包装在可滚动的&lt;div&gt; 中:

      html

      ....
      <tbody>
        <tr>
          <td colspan="2">
            <div class="scrollit">
              <table>
                <tr>
                  <td>January</td>
                  <td>$100</td>
                </tr>
                <tr>
                  <td>February</td>
                  <td>$80</td>
                </tr>
                <tr>
                  <td>January</td>
                  <td>$100</td>
                </tr>
                <tr>
                  <td>February</td>
                  <td>$80</td>
                </tr>
                ...
      

      css

      .scrollit {
          overflow:scroll;
          height:100px;
      }
      

      查看我的 jsfiddle,从你的分支:http://jsfiddle.net/VTNax/2/

      【讨论】:

      • 我不敢相信我浪费了数小时试图修复由于使用&lt;tbody style="display: block;"&gt; 而导致的损坏的布局,而解决方案就像将&lt;tbody&gt; 放入可滚动的&lt;div&gt; 一样简单。感谢您的解决方案!
      • @braican 好像不适合我,请看一下。
      • @sparkyShorts 不同的浏览器尺寸不应该有任何问题(尽管我认为手机尺寸需要一些工作)。假设您的表设置为响应不同的浏览器大小,则所有内容都应适当级联。
      • table &gt; div &gt; tbody 是无效的 HTML 语法
      • 这对可访问性有何影响?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2015-04-05
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      相关资源
      最近更新 更多