Я придумала решение, которое объединяет два ранее упомянутых. Он использует jQuery и две таблицы, одну для заголовка и одну для содержимого. Таблица заголовков имеет ширину 100% без ширины столбца. В нижней части таблицы содержимого есть строка, определенная для сопоставления таблицы заголовков с установленной шириной столбца. Эта строка скрыта, поэтому она не отображается, но сохраняет ширину столбца.
Для этого примера я дал своей строке заголовка идентификатор «Header1», а нижнюю строку и идентификатор «Header2». Также я обернул таблицу содержимого внутри div с идентификатором scrollTable.
Я установил стили в своем CSS-файле для идентификатора scrollTable, см. Ниже:
#scrollTable {
height:250px;
overflow-x:hidden;
overflow-y:scroll;
}
Теперь для части jQuery. В основном то, что я здесь делаю, - это брать ширину нижних столбцов строки и настраивать соответствующие столбцы заголовков. Я растягиваю ширину последнего столбца заголовка, чтобы он помещался поверх полосы прокрутки. Смотрите код ниже:
$(document).ready(function(){
var maxWidth = $('#Header1').width(); // Get max row Width
$('#Header2 th').each(function(i) { // Set col headers widths to to match col widths
var width = $(this).width();
$('#Header1 th').eq(i).width(width);
});
var blankSpace = maxWidth - $('#Header1').width(); // Calculate extra space
$('#Header1 th:last').width( $('#Header1 th:last').width() + blankSpace ); // Stretch last header column to fill remaining space
});
Я успешно проверил это в IE 6, 7 и 8, Firefox 3.0.1.4, Chrome 3.0.195.25, Opera 10 и Safari 3.2.2 в Windows XP.