TL;DR
Si vous ciblez les navigateurs modernes et n'ont pas extravagant besoins: http://jsfiddle.net/dPixie/byB9d/3/ ... Bien que les quatre grands de la version est assez doux aussi cette version gère fluide largeur beaucoup mieux.
Bonne nouvelle tout le monde!
Avec les avancées de HTML5 et CSS3 c'est désormais possible, au moins pour les navigateurs modernes. Légèrement hackish mise en œuvre, je suis venu avec peut être trouvé ici: http://jsfiddle.net/dPixie/byB9d/3/. Je l'ai testé dans FX 25, Chrome 31 et IE 10 ...
HTML concernés (insérer un doctype HTML5 en haut de votre document tout de même):
<section class="positioned">
<div class="container">
<table>
<thead>
<tr class="header">
<th>
Table attribute name
<div>Table attribute name</div>
</th>
<th>
Value
<div>Value</div>
</th>
<th>
Description
<div>Description</div>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>align</td>
<td>left, center, right</td>
<td>Not supported in HTML5. Deprecated in HTML 4.01. Specifies the alignment of a table according to surrounding text</td>
</tr>
<tr>
<td>bgcolor</td>
<td>rgb(x,x,x), #xxxxxx, colorname</td>
<td>Not supported in HTML5. Deprecated in HTML 4.01. Specifies the background color for a table</td>
</tr>
<tr>
<td>border</td>
<td>1,""</td>
<td>Specifies whether the table cells should have borders or not</td>
</tr>
<tr>
<td>cellpadding</td>
<td>pixels</td>
<td>Not supported in HTML5. Specifies the space between the cell wall and the cell content</td>
</tr>
<tr>
<td>cellspacing</td>
<td>pixels</td>
<td>Not supported in HTML5. Specifies the space between cells</td>
</tr>
<tr>
<td>frame</td>
<td>void, above, below, hsides, lhs, rhs, vsides, box, border</td>
<td>Not supported in HTML5. Specifies which parts of the outside borders that should be visible</td>
</tr>
<tr>
<td>rules</td>
<td>none, groups, rows, cols, all</td>
<td>Not supported in HTML5. Specifies which parts of the inside borders that should be visible</td>
</tr>
<tr>
<td>summary</td>
<td>text</td>
<td>Not supported in HTML5. Specifies a summary of the content of a table</td>
</tr>
<tr>
<td>width</td>
<td>pixels, %</td>
<td>Not supported in HTML5. Specifies the width of a table</td>
</tr>
</tbody>
</table>
</div>
</section>
Avec ce CSS:
html, body{
margin:0;
padding:0;
height:100%;
}
section {
position: relative;
border: 1px solid #000;
padding-top: 37px;
background: #500;
}
section.positioned {
position: absolute;
top:100px;
left:100px;
width:800px;
box-shadow: 0 0 15px #333;
}
.container {
overflow-y: auto;
height: 200px;
}
table {
border-spacing: 0;
width:100%;
}
td + td {
border-left:1px solid #eee;
}
td, th {
border-bottom:1px solid #eee;
background: #ddd;
color: #000;
padding: 10px 25px;
}
th {
height: 0;
line-height: 0;
padding-top: 0;
padding-bottom: 0;
color: transparent;
border: none;
white-space: nowrap;
}
th div{
position: absolute;
background: transparent;
color: #fff;
padding: 9px 25px;
top: 0;
margin-left: -25px;
line-height: normal;
border-left: 1px solid #800;
}
th:first-child div{
border: none;
}
Mais comment?!
Pour faire simple vous avez un tableau d'en-tête, que vous visuellement cacher en le rendant 0px haut, qui contient également les divs utilisé comme en-tête fixe. La table du conteneur laisse assez de place en haut pour permettre le positionnement absolu de l'en-tête, et le tableau avec les barres de défilement apparaissent comme vous le souhaitez.
Le code ci-dessus utilise la placé de classe à la position de la table absolument (je l'utilise dans une fenêtre de dialogue style) mais vous pouvez l'utiliser dans le flux du document, par la suppression de l' positioned
de la classe à partir du conteneur.
Mais ...
Il n'est pas parfait. Firefox refuse de faire la ligne d'en-tête 0px (au moins je n'ai pas trouver de toute façon), mais obstinément le garde au minimum 4px ... C'est pas un énorme problème, mais en fonction de votre style qu'il mess avec vos frontières, etc.
La table est également à l'aide d'une fausse colonne approche où la couleur d'arrière-plan du conteneur lui-même est utilisé comme arrière-plan de l'en-tête de la vrd, qui sont transparents.
Résumé
Dans l'ensemble il peut être le style de questions en fonction de vos exigences, en particulier des frontières ou des complexes de milieux. Il peut également y avoir des problèmes avec la compilation, je n'ai pas vérifié dans une grande variété de navigateurs encore (s'il vous plaît commentaire avec vos expériences si vous l'essayer), mais je n'ai pas trouver quelque chose comme ça donc j'ai pensé qu'il valait la peine de poster de toute façon ...