Вы можете использовать код Lobstrosity с небольшим изменением: position: fixed
вместо absolute
.
position: fixed
теперь широко используется всеми браузерами, включая IE8 и более поздние. Кстати, на мобильных и планшетных устройствах фиксированный рендеринг гораздо лучше, чем position: absolute
.
Я обнаружил, что в таблице с динамической шириной для каждого столбца абсолютно позиционированный
потерял бы ширину остальных столбцов, поэтому чтобы исправить это, я придумал следующий код:
Этот код выполняет следующие действия:
Определяет ширину каждого столбца в вашей таблице, ища ширину CSS первой строки
и сохраняя ее в массиве для дальнейшего использования. Когда пользователь прокручивает, класс 'fixed' добавляется к (поведение браузера по умолчанию изменит ширину и не будет совпадать с . Поэтому, чтобы исправить это, мы задним числом установите ширину равной значениям, которые мы прочитали ранее.
В любом случае вот код:
CSS
table.entries {width: 100%;border-spacing: 0px;margin:0;}
table.entries thead.fixed {position:fixed;top:0;}
HTML
<table class="entries" id="entriestable">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Location</th>
<th>DOB</th>
<th>Opt in</th>
<th>Added</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name">Ricky Bobby</td>
<td>ricky.bobby@email.com</td>
<td class="addy"><i>Kent, GB</i></td>
<td class="dob">20/08/1984</td>
<td>Yes</td>
<td class="date">4 hours ago</td>
</tr>
</tbody>
</table>
JavaScript
TableThing = function(params) {
settings = {
table: $('#entriestable'),
thead: []
};
this.fixThead = function() {
// empty our array to begin with
settings.thead = [];
// loop over the first row of td's in <tbody> and get the widths of individual <td>'s
$('tbody tr:eq(1) td', settings.table).each( function(i,v){
settings.thead.push($(v).width());
});
// now loop over our array setting the widths we've got to the <th>'s
for(i=0;i<settings.thead.length;i++) {
$('thead th:eq('+i+')', settings.table).width(settings.thead[i]);
}
// here we attach to the scroll, adding the class 'fixed' to the <thead>
$(window).scroll(function() {
var windowTop = $(window).scrollTop();
if (windowTop > settings.table.offset().top) {
$("thead", settings.table).addClass("fixed");
}
else {
$("thead", settings.table).removeClass("fixed");
}
});
}
}
$(function(){
var table = new TableThing();
table.fixThead();
$(window).resize(function(){
table.fixThead();
});
});