我如何创建一个固定/冻结左列和可滚动主体的HTML表格?

如何创建一个固定/冻结左列和可滚动主体的HTML表格?

我需要一个简单的解决方案 我知道它与其他一些问题类似,例如:

  • 带有固定标题和固定列的HTML表格?
  • 如何在滚动时锁定表格的第一行和第一列,可能使用JavaScript和CSS?
  • 但是我只需要将一列左列冻结,我宁愿使用简单的脚本解决方案。


    如果你想要一个只有列水平滚动的表,你可以position: absolute第一列(并明确指定它的宽度),然后将整个表包装在overflow-x: scroll块中。 不要打扰在IE7中尝试这个,但是...

    相关的HTML和CSS:

    table {
      border-collapse: separate;
      border-spacing: 0;
      border-top: 1px solid grey;
    }
    
    td, th {
      margin: 0;
      border: 1px solid grey;
      white-space: nowrap;
      border-top-width: 0px;
    }
    
    div {
      width: 500px;
      overflow-x: scroll;
      margin-left: 5em;
      overflow-y: visible;
      padding: 0;
    }
    
    .headcol {
      position: absolute;
      width: 5em;
      left: 0;
      top: auto;
      border-top-width: 1px;
      /*only relevant for first row*/
      margin-top: -1px;
      /*compensate for top border*/
    }
    
    .headcol:before {
      content: 'Row ';
    }
    
    .long {
      background: yellow;
      letter-spacing: 1em;
    }
    <div>
    <table>
            <tr><th class="headcol">1</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
            <tr><th class="headcol">2</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
            <tr><th class="headcol">3</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
            <tr><th class="headcol">4</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
            <tr><th class="headcol">5</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
            <tr><th class="headcol">6</th><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td><td class="long">QWERTYUIOPASDFGHJKLZXCVBNM</td></tr>
    </table>
    </div>

    是一个有趣的jQuery插件,可以创建固定的标题和/或 。 在演示页面上切换固定列为true,以查看它的实际操作。


    在固定宽度左栏的情况下,Eamon Nerbonne提供了最佳解决方案。

    如果可变宽度左列,我发现的最佳解决方案是制作两个相同的表格,并将一个表格推向另一个表格。 演示:http://jsfiddle.net/xG5QH/6/。

    <!DOCTYPE html>
    <html>
    <head>
    <style type="text/css">
    /* important styles */
    
    .container {
       /* Attach fixed-th-table to this container,
          in order to layout fixed-th-table
          in the same way as scolled-td-table" */
       position: relative;
    
       /* Truncate fixed-th-table */
       overflow: hidden;
    }
    
    .fixed-th-table-wrapper td,
    .fixed-th-table-wrapper th,
    .scrolled-td-table-wrapper td,
    .scrolled-td-table-wrapper th {
       /* Set background to non-transparent color
          because two tables are one above another.
        */
       background: white;
    }
    .fixed-th-table-wrapper {
       /* Make table out of flow */
       position: absolute;
    }
    .fixed-th-table-wrapper th {
        /* Place fixed-th-table th-cells above 
           scrolled-td-table td-cells.
         */
        position: relative;
        z-index: 1;
    }
    .scrolled-td-table-wrapper td {
        /* Place scrolled-td-table td-cells
           above fixed-th-table.
         */
        position: relative;
    }
    .scrolled-td-table-wrapper {
       /* Make horizonal scrollbar if needed */
       overflow-x: auto;
    }
    
    
    /* Simulating border-collapse: collapse,
       because fixed-th-table borders
       are below ".scrolling-td-wrapper table" borders
    */
    
    table {
        border-spacing: 0;
    }
    td, th {
       border-style: solid;
       border-color: black;
       border-width: 1px 1px 0 0;
    }
    th:first-child {
       border-left-width: 1px;
    }
    tr:last-child td,
    tr:last-child th {
       border-bottom-width: 1px;
    }
    
    /* Unimportant styles */
    
    .container {
        width: 250px;
    }
    td, th {
       padding: 5px;
    }
    </style>
    </head>
    
    <body>
    <div class="container">
    
    <div class="fixed-th-table-wrapper">
    <!-- fixed-th-table -->
    <table>
        <tr>
             <th>aaaaaaa</th>
             <td>ccccccccccc asdsad asd as</td>
             <td>ccccccccccc asdsad asd as</td>
        </tr>
        <tr>
             <th>cccccccc</th>
             <td>xxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzz</td>
             <td>xxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzz</td>
        </tr>
    </table>
    </div>
    
    <div class="scrolled-td-table-wrapper">
    <!-- scrolled-td-table
         - same as fixed-th-table -->
    <table>
        <tr>
             <th>aaaaaaa</th>
             <td>ccccccccccc asdsad asd as</td>
             <td>ccccccccccc asdsad asd as</td>
        </tr>
        <tr>
             <th>cccccccc</th>
             <td>xxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzz</td>
             <td>xxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyy zzzzzzzzzzzzz</td>
        </tr>
    </table>
    </div>
    
    </div>
    </body>
    </html>
    
    链接地址: http://www.djcxy.com/p/88189.html

    上一篇: how do I create an HTML table with fixed/frozen left column and scrollable body?

    下一篇: Colspan all columns