I am trying to make tbody overflow hidden for y and auto for x but no success, i tried few techniques here,
http://jsfiddle.net/wxdgf4pr/2
http://jsfiddle.net/wxdgf4pr
http://jsfiddle.net/wxdgf4pr/1
but none worked, I want to make tbody scroll this way thead will stay where it is.
HTML
<div id="fruitcratebody" style="height: 300px; width: 500px; background:red;">
<div id="fruitcrateContainer">
<table id="fruitcrateTable" class="tablesorter" style="display: table;">
<thead>
<tr>
<th class="header">Column1</th>
<th class="header">Column2</th>
<th class="header">Column3</th>
<th class="header">Column4</th>
<th class="header">Column5</th>
<th class="header">Column6</th>
<th class="header">Column7</th>
</tr>
</thead>
<tbody id="fruitcrateTBody">
<tr>
<td>0</td>
<td>Calculate1</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
</tbody>
</table>
</div>
</div>
CSS
tbody{
position:relative;
overflow:hidden;
height:300px;
}
I want something like this, but now I am having trouble lining up column widths,
To use the CSS overflow property with its "hidden" value on the HTML <td> element, you need to set the table-layout property with the "fixed" value and an appropriate width on the <table> element. Then, you need to add the overflow property set to "hidden" and white-space property set to "nowrap" on the table cell.
If you want tbody to show a scrollbar, set its display: block; . Set display: table; for the tr so that it keeps the behavior of a table. To evenly spread the cells, use table-layout: fixed; . Anyhow, to set a scrollbar, a display reset is needed to get rid of the table-layout (which will never show scrollbar).
In order to make <tbody> element scrollable, we need to change the way it's displayed on the page i.e. using display: block; to display that as a block level element. Since we change the display property of tbody , we should change that property for thead element as well to prevent from breaking the table layout.
There is no easy way to do this because tables are formatted so as to display all the content, which means that table-cell widths and heights are adjusted to show the content, which also means that the table height and width will adjust accordingly. Any specified width and height tend to be treated as minimum values.
To get the effect that you want, you need to use two tables as shown below.
You place the headers in one table and the data in the second. Both tables have the same width and you need to make sure all the table-cells have the same width and use table-display: fixed
.
Around the second table (for data), wrap a block level div
with the scrolling enabled.
Note: There is at least one jQuery plug-in that deals with sticky table headers, see for example, http://www.fixedheadertable.com
Also, table-sort will not work in this two-table layout without some extra programming.
There is a jQuery plugin that seems to have both sorting and sticky headers:
http://mottie.github.io/tablesorter/docs/index.html
but you would need to try it out.
.fruitcrateTable {
border: 1px dotted blue;
width: 520px;
}
.fruitcrateTable table {
width: 500px;
table-layout: fixed;
}
.fruitcrateTable table th, .fruitcrateTable table td {
width: 15%;
border: 1px dotted gray;
}
.fruitcrateTable .table-body-scroll {
height: 300px;
overflow-y: auto; /* Trigger vertical scroll */
overflow-x: hidden; /* Hide the horizontal scroll */
}
<div class="fruitcrateTable">
<table class="header-table">
<thead>
<tr>
<th class="header">Column1</th>
<th class="header">Column2</th>
<th class="header">Column3</th>
<th class="header">Column4</th>
<th class="header">Column5</th>
<th class="header">Column6</th>
<th class="header">Column7</th>
</tr>
</thead>
</table>
<div class="table-body-scroll">
<table>
<tbody>
<tr>
<td>0</td>
<td>Calculate1</td>
<td>Calculate1</td>
<td>Calculate1</td>
<td>Calculate1</td>
<td>Calculate1</td>
<td>Calculate1</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
<tr>
<td>0</td>
<td>Calculate2</td>
</tr>
</tbody>
</table>
</div>
</div>
you can put overflow property on its parent
#fruitcrateContainer {
height: 100px;
overflow-y: scroll;
background:red;
}
try this: http://jsfiddle.net/wxdgf4pr/12/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With