J'ai essayé de trouver un moyen de créer un tableau avec une première colonne fixe (et le reste du tableau avec un débordement horizontal). J'ai vu un message qui comportait une question similaire. mais le bit de colonne fixe ne semblait pas être résolu. Aidez-moi?
J'ai un tableau similaire de la manière suivante:
<table style="width:100%; table-layout:fixed">
<tr>
<td style="width: 150px">Hello, World!</td>
<td>
<div>
<pre style="margin:0; overflow:scroll">My preformatted content</pre>
</div>
</td>
</tr>
</table>
Que diriez-vous:
table {
table-layout: fixed;
width: 100%;
*margin-left: -100px; /*ie7*/
}
td, th {
vertical-align: top;
border-top: 1px solid #ccc;
padding: 10px;
width: 100px;
}
.fix {
position: absolute;
*position: relative; /*ie7*/
margin-left: -100px;
width: 100px;
}
.outer {
position: relative;
}
.inner {
overflow-x: scroll;
overflow-y: visible;
width: 400px;
margin-left: 100px;
}
<div class="outer">
<div class="inner">
<table>
<tr>
<th class=fix></th>
<th>Col 1</th>
<th>Col 2</th>
<th>Col 3</th>
<th>Col 4</th>
<th class="fix">Col 5</th>
</tr>
<tr>
<th class=fix>Header A</th>
<td>col 1 - A</td>
<td>col 2 - A (WITH LONGER CONTENT)</td>
<td>col 3 - A</td>
<td>col 4 - A</td>
<td class=fix>col 5 - A</td>
</tr>
<tr>
<th class=fix>Header B</th>
<td>col 1 - B</td>
<td>col 2 - B</td>
<td>col 3 - B</td>
<td>col 4 - B</td>
<td class=fix>col 5 - B</td>
</tr>
<tr>
<th class=fix>Header C</th>
<td>col 1 - C</td>
<td>col 2 - C</td>
<td>col 3 - C</td>
<td>col 4 - C</td>
<td class=fix>col 5 - C</td>
</tr>
</table>
</div>
</div>
Vous pouvez le tester dans ce jsbin: http://jsbin.com/uxecel/4/edit
Utilisez le plug-in jQuery DataTables, il prend en charge les en-têtes et les colonnes fixes. Cet exemple ajoute un support de colonne fixe à la table html "exemple":
http://datatables.net/extensions/fixedcolumns/
Pour deux colonnes fixes:
http://www.datatables.net/release-datatables/extensions/FixedColumns/examples/two_columns.html
Sur la base de l'approche de skube, j'ai découvert que l'ensemble minimal de CSS dont j'avais besoin était le suivant:
.horizontal-scroll-except-first-column {
width: 100%;
overflow: auto;
margin-left: 20em;
}
.horizontal-scroll-except-first-column > table > * > tr > th:first-child,
.horizontal-scroll-except-first-column > table > * > tr > td:first-child {
position: absolute;
width: 20em;
margin-left: -20em;
}
.horizontal-scroll-except-first-column > table > * > tr > th,
.horizontal-scroll-except-first-column > table > * > tr > td {
/* Without this, if a cell wraps onto two lines, the first column
* will look bad, and may need padding. */
white-space: nowrap;
}
avec HTML:
<div class="horizontal-scroll-except-first-column">
<table>
...
</table>
</div>
Jetez un coup d'oeil à ce plugin JQuery:
Il ajoute vertical (rangée d'en-tête fixe) ou horizontal (première colonne fixe) le défilement vers un tableau HTML existant. Il y a une démo que vous pouvez vérifier pour les deux cas de défilement.