Ok, he leído muchas respuestas en la web y finalmente armé una demostración que funcionó. Estoy usando PHP para crear 50 filas en la tabla, pero también puedes codificar fácilmente los datos. En esencia, creo cuatro cuadrantes (div.q1, div.q2, div.q3 y div.q4), donde el cuarto cuadrante contiene la tabla de datos real. Usé jquery para copiar la tabla en el cuarto cuadrante en el segundo y tercer cuadrante antes de sincronizar sus barras de desplazamiento. Utilicé una combinación de desbordamiento CSS, ancho, alto y propiedades de visualización para ocultar elementos TD innecesarios en cada uno de los cuadrantes. Aquí está un ejemplo de trabajo completo:
<html>
<head>
<style>
body {width:350px;}
.q1, .q2, .q3, .q4 {overflow:hidden; display:block; float:left;}
.q1 {width:50px; height: 30px;}
.q2 {width:300px; height: 30px;}
.q3 {width:50px; height: 100px;}
.q4 {width:300px; height: 100px; overflow:auto;}
.q2 .firstCol, .q3 thead, .q4 thead, .q4 .firstCol {display:none;}
.q2 td {background-color:#999;}
.q3 td {background-color:#999;}
.container {width:9999px;}
</style>
<script src="http://code.jquery.com/jquery-1.7.min.js"></script>
<script>
$(document).ready(function(){
$('.q4').bind('scroll', fnscroll);
$('.q2').html($('.q4').html());
$('.q3').html($('.q4').html());
});
function fnscroll(){
$('.q2').scrollLeft($('.q4').scrollLeft());
$('.q3').scrollTop($('.q4').scrollTop());
}
</script>
</head>
<body>
<div class="q1"><div class="container"></div></div>
<div class="q2"><div class="container"></div></div>
<div class="q3"><div class="container"></div></div>
<div class="q4">
<div class="container">
<table>
<thead>
<tr>
<td class="firstCol"></td>
<td>Col</td>
<td>Col</td>
<td>Col</td>
<td>Col</td>
<td>Col</td>
<td>Col</td>
<td>Col</td>
<td>Col</td>
</tr>
</thead>
<tbody>
<?php for($c=0; $c<50; $c++) { ?>
<tr>
<td class="firstCol">Row</td>
<td>this is some content</td>
<td>hello world!<br/>This is good</td>
<td>Row</td>
<td>adjfljaf oj eoaifj </td>
<td>ajsdlfja oije</td>
<td>alsdfjaoj f</td>
<td>jadfioj</td>
<td>jalsdjf oai</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</body>
</html>
esto es muy bueno. acabo de agregar un violín para esto aquí http://jsfiddle.net/9NcnH/ – dotnetcoder
¿cómo podemos ajustar el ancho de q3 de forma dinámica en función del contenido en lugar de establecerlo en 50px? – dotnetcoder