How to make html table vertically scrollable

see jsbin

I need to make my html table scroll vertically.
I used below code on tbody tag, but its not working for me

  <tbody style="height: 100px; overflow: auto"> 
+44
jquery html css
Jun 22 2018-12-12T00
source share
9 answers

Why don't you put your table in a div?

 <div style="height:100px;overflow:auto;"> ... Your code goes here ... </div> 
+73
Jun 22 2018-12-12T00:
source share
β€” -

Just add a display: block in thead> tr and tbody. check the example below

http://www.imaputz.com/cssStuff/bigFourVersion.html

+16
Jun 22 '12 at 8:15
source share

Try this ... It works ... here is JSBIN

 table tbody { height:300px; overflow-y:scroll; display:block; } table thead { display:block; } 
+9
Jun 22 '12 at 8:15
source share

The best way to do this is to strictly divide the table into two different tables - the header and body:

 <div class="header"> <table><tr><!-- th here --></tr></table> </div> <div class="body"> <table><tr><!-- td here --></tr></table> </div> .body { height: 100px; overflow: auto } 

If your table has a large width (more than the screen width), you need to add scroll events to horizontally scroll the title and body synchronously.

You should never touch table tags (table, tbody, thead, tfoot, tr) with CSS display and overflow properties. Working with DIV wrappers is much preferable.

+4
Jun 22 2018-12-12T00:
source share

The jQuery plugin is probably the best option. http://farinspace.com/jquery-scrollable-table-plugin/

To fix the title, you can check this message

Fixing a GridView or HtmlTable header (maybe the problem is that this should only work in IE)

CSS to fix the header

 div#gridPanel { width:900px; overflow:scroll; position:relative; } div#gridPanel th { top: expression(document.getElementById("gridPanel").scrollTop-2); left:expression(parentNode.parentNode.parentNode.parentNode.scrollLeft); position: relative; z-index: 20; } <div height="200px" id="gridPanel" runat="server" scrollbars="Auto" width="100px"> table.. </div> 

or

Very nice post here from this

How to freeze columns using Javascript and HTML.

or

No, this is not possible, but you can use div and put table in div

 <div style="height: 100px; overflow: auto"> <table style="height: 500px;"> ... </table> </div> 
+3
Jun 22 2018-12-12T00:
source share

Hi, try with this overflow-y: scroll. Hope this helps you.

+2
Jun 22 2018-12-12T00:
source share

Here is my solution (in Spring with Thymeleaf and jQuery):

HTML:

 <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:tiles="http://www.thymeleaf.org"> <body> <div id="objects" th:fragment="ObjectList"> <br/> <div id='cap'> <span>Objects</span> </div> <div id="hdr"> <div> <div class="Cell">Name</div> <div class="Cell">Type</div> </div> </div> <div id="bdy"> <div th:each="object : ${objectlist}"> <div class="Cell" th:text="${object.name}">name</div> <div class="Cell" th:text="${object.type}">type</div> </div> </div> </div> </body> </html> 

CSS

 @CHARSET "UTF-8"; #cap span { display: table-caption; border:2px solid; font-size: 200%; padding: 3px; } #hdr { display:block; padding:0px; margin-left:0; border:2px solid; } #bdy { display:block; padding:0px; margin-left:0; border:2px solid; } #objects #bdy { height:300px; overflow-y: auto; } #hdr div div{ margin-left:-3px; margin-right:-3px; text-align: right; } #hdr div:first-child { text-align: left; } #bdy div div { margin-left:-3px; margin-right:-3px; text-align: right; } #bdy div div:first-child { text-align: left; } .Cell { display: table-cell; border: solid; border-width: thin; padding-left: 5px; padding-right: 5px; } 

JavaScript:

 $(document).ready(function(){ var divs = ['#objects']; divs.forEach(function(div) { if ($(div).length > 0) { var widths = []; var totalWidth = 0; $(div+' #hdr div div').each(function() { widths.push($(this).width()) }); $(div+' #bdy div div').each(function() { var col = $(this).index(); if ( $(this).width() > widths[col] ) { widths[col] = $(this).width(); } }); $(div+' #hdr div div').each(function() { var newWidth = widths[$(this).index()]+5; $(this).css("width", newWidth); totalWidth += $(this).outerWidth(); }); $(div+' #bdy div div').each(function() { $(this).css("width", widths[$(this).index()]+5); }); $(div+' #hdr').css("width", totalWidth); $(div+' #bdy').css("width", totalWidth+($(div+' #bdy').css('overflow-y')=='auto'?15:0)); } }) }); 
+2
Dec 03 '14 at 15:59
source share

This is a job.

http://jsfiddle.net/JJV59/2/

[EDIT]

 <!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>JS Bin</title> <!--[if IE]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> </head> <body> <table cellspacing="1" width="100%" bgcolor="#cccccc"> <thead> <tr> <td bgcolor="#ffffff" width="70px"> </td> <td class="csstablelisttd" width="70px"> <b>Time Slot&nbsp;</b> </td> <td class="csstablelisttd"> <b>&nbsp;Patient Name</b> </td> </tr> </thead> </table> <!-- THIS GIVES THE SCROLLER --> <div style="height: 500px; overflow-y: auto"> <table id="tableAppointment" cellspacing="1" width="100%" bgcolor="#cccccc"> <tbody> <tr> <td class="csstablelisttd" valign="top" width="70px"> 8:00AM </td> <td class="csstablelisttd" width="70px"> 0 </td> <td class="csstablelisttd"> <span>Name 1</span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 9:00AM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 10:00AM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 11:00AM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 12:00PM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 01:00PM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 02:00PM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 03:00PM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 04:00PM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 05:00PM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 06:00PM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 07:00PM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 15 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 30 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd"> </td> <td class="csstablelisttd"> 45 </td> <td class="csstablelisttd"> <span></span> </td> </tr> <tr> <td class="csstablelisttd" valign="top" width="90px"> 08:00PM </td> <td class="csstablelisttd"> 0 </td> <td class="csstablelisttd"> <span></span> </td> </tr> </tbody> </table> </div> </body> </html> 
+1
Jun 22 '12 at 8:10
source share

I fought this for a while. My goal was to have a table with headers, where the width of each column of the header was the same as the corresponding column of the body, and was the minimum size needed to fit the data. also body data were scrollable under the heading.

I solved this using divs, not tables. Each β€œtable” was a div with a heading being a div div and the body a div div. I used the style as @sushil stated above. I added a bit of javascript / jQuery to balance the columns. Maybe 20-30 lines.

Unfortunately, I lost the code and have to rebuild it. I know this is a little outdated, but maybe it will help someone else.

0
Nov 30 '14 at 12:48
source share



All Articles