Cuando utilizamos tablas muy grandes en altura y con muchos datos en nuestras páginas puede que nos resulte muy útil este truco del que vamos a hablar.
En este artículo vamos a comentar cómo transformar nuestras viejas y aburridas tablas en otras con cabecera fija y scroll utilizándo únicamente CSS. Muy útil para aquellas tablas que tienen mucha altura ya que nos permiten no perder de vista la cabecera en ningún momento y ahorrar espacio en la página.
Comenzamos con el ejemplo para que podáis ver el resultado final:
| uno | dos | tres |
|---|---|---|
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
| aaaa | bbbb | cccc |
Es bastante sencillo. En primer lugar, necesitaremos incluir los estilos siguientes en la hoja de estilos de nuestra web o en la página donde va la tabla con cabecera fija.
1 <style type="text/css"> 2 div.fixedHeaderTable { 3 position: relative; 4 } 5 div.fixedHeaderTable table { 6 width:100%; 7 } 8 div.fixedHeaderTable tbody { 9 height: 200px; 10 overflow-y: auto; 11 overflow-x: hidden; 12 } 13 div.fixedHeaderTable table th { 14 background-color:#CCCCCC;font-weight:bold 15 } 16 div.fixedHeaderTable table td { 17 background-color:#EEEEEE 18 } 19 div.fixedHeaderTable thead td, div.fixedHeaderTable thead th { 20 position:relative; 21 } 22 23 /* IE7 hacks */ 24 div.fixedHeaderTable { 25 *position: relative; 26 *height: 200px; 27 *overflow-y: scroll; 28 *overflow-x: hidden; 29 *padding-right:16px; 30 } 31 32 div.fixedHeaderTable thead tr { 33 *position: relative; 34 _position: absolute; 35 *top: expression(this.offsetParent.scrollTop-2); 36 *background:none; 37 background-color:#FFFFFF 38 } 39 40 div.fixedHeaderTable tbody { 41 *height: auto; 42 *position:absolute; 43 *top:50px; 44 } 45 46 /* IE6 hacks */ 47 div.fixedHeaderTable { 48 _width:expression(this.offsetParent.clientWidth-20); 49 _overflow: auto; 50 _overflow-y: scroll; 51 _overflow-x: hidden; 52 } 53 div.fixedHeaderTable thead tr { 54 _position: relative 55 } 56 </style>
El código parece algo complejo. El motivo de esto es que no hay una manera única de hacer esto en todos los navegadores.
En segundo lugar tenemos que modificar ligeramente el código de nuestras tablas. Hay que incluir la cabecera dentro de una sección thead y el resto de la tabla en una sección tbody y después introducir la tabla dentro de un div con clase fixedHeaderTable.
<div class="fixedHeaderTable">
<table>
<thead>
<tr><th>uno</th><th>dos</th><th>tres</th></tr>
</thead>
<tbody>
<tr><td>aaaa</td><td>bbbb</td><td>cccc</td></tr>
<tr><td>aaaa</td><td>bbbb</td><td>cccc</td></tr>
...
...
...
<tr><td>aaaa</td><td>bbbb</td><td>cccc</td></tr>
<tr><td>aaaa</td><td>bbbb</td><td>cccc</td></tr>
</tbody>
</table>
</div>
Y eso es todo amigos.