Is there a css3 way to fix a on the y-axis, let it scroll on the x-axis?

前端 未结 2 1870
再見小時候
再見小時候 2021-01-13 13:33

This has been asked a zillion times: here, there, and the other place just on SO. Yet there\'s no real good answer that I can find.

Often I have tables

相关标签:
2条回答
  • 2021-01-13 13:48

    a dirty way would be to put the header table in a separate div like:

    <div class="header">
    <table>
        <thead><tr><td>#</td><td>v</td></tr></thead>
    </table>
    </div>
    

    Then body in the another div like:

    <div class="body">
        <table>
            <tbody>
                <tr><td>1</td><td>a</td></tr>
                <tr><td>1</td><td>a</td></tr>
                <tr><td>1</td><td>a</td></tr>
                <tr><td>1</td><td>a</td></tr>
                <tr><td>1</td><td>a</td></tr>         
        </tbody>
    </table> 
    </div>
    

    Now you can give a fixed height to body div and set oveflow to auto. like:

    table{border:0px solid #ccc;height:30px;}
    table tr td{border:1px solid #ccc;padding:5px;}
    div.body{height:70px;overflow:auto;border-bottom:1px solid #ccc;}
    

    here is a working example I did in jsfiddle

    0 讨论(0)
  • 2021-01-13 13:55

    I ended up modeling the "solution" on the suggestion of @Naveed Ahmad. I put the data part of the table in a <tbody>; and made a fake <thead> that I filled in at onLoad time by referring to the widths and offsets of the <td>s in the first table row, like this:

    function position_col_heads ( ) {
      // get all the TD child elements from the first row
      var tds = main_tbody.children[0].getElementsByTagName('TD'); 
      for ( var i = 0; i < tds.length; ++i ) {
        thead.children[i].style.left =
          parseFloat( tds[i].offsetLeft ) + 'px';
        thead.children[i].style.width = 
          parseFloat( tds[i].scrollWidth ) + 'px';
      }
    }
    

    This works more or less OK on this page.

    0 讨论(0)
提交回复
热议问题