Ну, вот вам следующий пост о скучной таблице прокрутки с фиксированным верхним и нижним колонтитулами. Эта тема происходит от жесткой структуры HTML. Исходная проблема состояла в том, чтобы показать действительно огромную таблицу, переполняющую ширину экрана как высоту. Мое желание было также исправить заголовок в верхней части таблицы и, следовательно, его копию в нижней части таблицы.
После интенсивного поиска и проверки большого количества гарантированных кодов я обнаружил следующие глубокие проблемы: - верхний и нижний колонтитулы не сохраняют интервал между ячейками тела таблицы, пока tbody прокручивается отдельно - строки tbody перезаписываютзаголовок - вертикальная прокрутка tbody вряд ли может сочетаться с горизонтальной прокруткой всей таблицы (включая верхний и нижний колонтитулы).
Я начал писать какой-то хак для его преодоления, но это также зависит от используемого браузера.
<html><head><meta charset="utf-8"><title>pokus</title><script>var tab=
[{"id":"1","uuid":"b25202a1-c732-f5e4-c976-f725092a9f02","count":"19622","hash":"fddf1277943af21b9282bd6a4ff53bc19168854e","diff":"151621","timestamp":"2017-08-23 14:31:26","speed":"29553600"}
,{"id":"2","uuid":"ade0f2a7-6838-d1f3-646c-7c238a9383a9","count":"24794","hash":"2b52c53b1775c7729d873db22d23adc38d13c99f","diff":"151622","timestamp":"2017-05-25 14:12:34","speed":"29685192"}
,{"id":"3","uuid":"1040a7f3-aee2-69cd-7be8-97683c1dd406","count":"64495","hash":"585421d85d3bc6f068cb1b0da2a3587f585bdd9e","diff":"151623","timestamp":"2017-08-23 14:31:24","speed":"51766808"}
,{"id":"4","uuid":"f2bc0ef7-bc05-d425-1b73-451ba5b08011","count":"71693","hash":"150c32da8771141b1d3ed4725389ee3496d6218f","diff":"151624","timestamp":"2017-08-23 14:31:24","speed":"53923592"}
,{"id":"5","uuid":"763153c1-ce21-db34-f98a-703457575ce0","count":"92657","hash":"db82a3cfc601db58d0a41f9928e371dfe40067fa","diff":"151625","timestamp":"2017-08-23 14:31:24","speed":"29923912"}
,{"id":"6","uuid":"ddf160de-a052-7404-cfcc-36605c5a01ce","count":"57471","hash":"8edc173bb8e9cc89f0525e59bfa17c486aefd9d9","diff":"151626","timestamp":"2017-08-23 14:31:24","speed":"53787840"}
,{"id":"7","uuid":"3aa65601-7834-a62e-fe5d-fbd0b4e703c7","count":"79016","hash":"0f8c4ce07af5730c60550d64e3160950bd1994e0","diff":"151627","timestamp":"2017-08-23 14:31:24","speed":"20422664"}
,{"id":"8","uuid":"16bee402-b87d-8172-daf3-f918b0d9f2ff","count":"8929","hash":"ec563d631f981a5770dea4bf7390b79eb3e649ce","diff":"151628","timestamp":"2017-05-25 14:12:34","speed":"43552496"}
,{"id":"9","uuid":"3b1b3e69-0ad0-4c9c-f786-ca6fc30c6f65","count":"9863","hash":"89c20f5552fb74461c67ba9a3bc13ec8b66bf6b3","diff":"151531","timestamp":"2017-05-25 14:12:34","speed":"272836232"}
,{"id":"10","uuid":"b64d86b0-fcab-2120-18cc-a6efaabbafe0","count":"2893","hash":"e0fb5a4dad9f7804e8d7c51f3f1c49f17e21e45a","diff":"151658","timestamp":"2017-05-25 14:12:34","speed":"35025144"}
,{"id":"11","uuid":"df8dd8bd-c9df-a8fc-977e-0f89c6a2e017","count":"9952","hash":"1f89b65e230f0525ea41b27b7e3548daedb5b1a8","diff":"151532","timestamp":"2017-05-25 14:12:34","speed":"274418184"}
,{"id":"12","uuid":"53f39083-5999-dddf-30e2-4b53d1bf3fa4","count":"346","hash":"eb7f5723b9ed7239ecbf951ea51b3c8927c29b72","diff":"151659","timestamp":"2017-05-25 14:12:34","speed":"0"}
,{"id":"13","uuid":"af2bde11-bce2-f032-877b-129e7bc866a3","count":"61041","hash":"a513d5bec7fe514ec76083d299b8d71a9c7781fb","diff":"151660","timestamp":"2017-08-23 14:31:24","speed":"35088848"}
,{"id":"14","uuid":"e43a1bb1-d369-8f21-0f10-306c3c259952","count":"48343","hash":"8d8c0fa097c7f52b766b17c09ca14475add4753a","diff":"151661","timestamp":"2017-05-25 14:12:32","speed":"35113504"}
,{"id":"15","uuid":"660f22da-06fd-3794-6876-5f90718ea73c","count":"25185","hash":"27057106809aafcc4cfe3d2b93d394f07c0d06d1", "diff":"151662","timestamp":"2017-05-25 14:12:32","speed":"8068040"}
,{"id":"16","uuid":"8bd5be38-7a78-aed8-d123-fabf2eb56d7c","count":"2873","hash":"d95f01753799d34551e434343e4fcb04d0df1151","diff":"151631","timestamp":"2017-05-25 14:12:34","speed":"80558744"}
,{"id":"17","uuid":"dbbb3ca5-5fcc-844c-20e8-fd38ef74dbde","count":"48255","hash":"193a3132b41ccfefde9b91dadb196ae184ab5fb3","diff":"151663","timestamp":"2017-08-23 14:31:24","speed":"35001152"}
,{"id":"18","uuid":"73807ab9-b253-d804-5ea6-8d702a81ca51","count":"14286","hash":"f797c0a6f201db68df69136085954758e0b637c7","diff":"151674","timestamp":"2017-05-25 14:12:34","speed":"43866360"}
,{"id":"19","uuid":"8c5aaf9e-11e4-08d5-76ad-8c65ea62faf2","count":"80511","hash":"81bae19474f4ebb309765c9cb1147269117b4538", "diff":"151669","timestamp":"2017-08-23 14:31:24","speed":"62409648"}
,{"id":"20","uuid":"bbc42163-ffab-66b2-58dc-3d310c9a69bd","count":"26971","hash":"05d09c340ee28bbfc0f6ebc00620220b87be0f78","diff":"151670","timestamp":"2017-08-23 14:31:24","speed":"35116608"}
,{"id":"21","uuid":"46c0f5e8-90ee-1b0b-38bd-958cda7469f5","count":"83311","hash":"8af8ca1f5912a157cca0d333c38e439b036f671d", "diff":"151671","timestamp":"2017-08-23 14:31:24","speed":"34999840"}
,{"id":"22","uuid":"8df0d389-a377-b96b-f52d-b9c80bb67050","count":"30633","hash":"d13ebcc7579cee7f94ed75e11105fa2a88dcc5d0","diff":"151672","timestamp":"2017-08-23 14:31:24","speed":"21122312"}
,{"id":"23","uuid":"03c68084-9fe9-0f72-41d1-39a0cb3cb779","count":"33989","hash":"2b15ae3e8a60e88a9f4ddff0c4599fe9d75b1e86","diff":"151673","timestamp":"2017-05-25 14:12:32","speed":"32835424"}
,{"id":"24","uuid":"5713d483-55a1-14a0-3ffa-11e3266ca036","count":"7848","hash":"12fb05be8bfbecdd63c308a2e90c187e2e42ace7","diff":"151675","timestamp":"2017-05-25 14:12:34","speed":"41465896"}
,{"id":"25","uuid":"a25bb497-4172-cb53-2fed-12139fc2de9f","count":"359","hash":"14d5c1105b0f5e24bbf28c8a519b3f5d0606d97a","diff":"151676","timestamp":"2017-05-25 14:12:34","speed":"0"}
,{"id":"26","uuid":"ca38be26-78f7-5e7f-b1cd-51fcfcb9c711","count":"418","hash":"0e72c5d8e3156c6832c0d1acdc2e27dbd1fb0faa","diff":"151677","timestamp":"2017-05-25 14:12:34","speed":"0"}
,{"id":"27","uuid":"4f51aad3-5c1d-b52d-2a65-fa95d2b8c5c8","count":"393","hash":"a01b90a813230b5faeaf6010d847be1ab65cf9b7","diff":"151684","timestamp":"2017-05-25 14:12:34","speed":"0"}
,{"id":"28","uuid":"bfa8b76e-c159-1d20-475c-33d617480e88","count":"373","hash":"72cacce09e5ae1c9f7d5c0d9bbbf8dd1e21ed11f","diff":"151685","timestamp":"2017-05-25 14:12:34","speed":"0"}
,{"id":"29","uuid":"f7014ffd-e5b3-3854-cf34-e8cec902c684","count":"156604","hash":"d12efcfc16f83d347a9a04d7547aa947a02dff9c","diff":"151686","timestamp":"2017-05-25 14:12:32","speed":"35023128"}
,{"id":"30","uuid":"6bda4364-6952-12f1-3e11-2687c501a08a","count":"1024","hash":"4776e8f8df67537a4bc357ae5407486befa36eea","diff":"151687","timestamp":"2017-05-25 14:12:34","speed":"43956480"}
]; var _tr_ =document.createElement('tr');var _td_ =document.createElement('td');
function fill_table()
{ var thd=document.getElementById('hot'); var tbd=document.getElementById('bot');
var poc=tab.length;var hada=thd.firstChild.firstChild;var dada=tbd.firstChild.firstChild;
for(var klic in tab[0]){ var hela=document.createElement("th"); hela.innerHTML=klic; hada.appendChild(hela);};
for(var i=0;i< poc;i++) // after header assembled the table rows are cloned and filled
{ var ntr=_tr_.cloneNode(false); // clone free row
for( klic in tab[i]) // with each table row clone free cell and fill it
{ var ntd=_td_.cloneNode(false); ntd.innerHTML=tab[i][klic]; ntr.appendChild(ntd);
} tbd.firstElementChild.appendChild(ntr); // show next row
} var lol=tbd.rows[0].cells.length; var maxirka=0;
for (var k=0;k < lol;k++){ maxirka += thd.rows[0].cells[k].style.width=tbd.rows[0].cells[k].offsetWidth;};
thd.style.width=maxirka;
var tfd=document.getElementById('iak').appendChild(thd.cloneNode(true));tfd.id='fot';
var tfh=tfd.offsetHeight; var tih=document.getElementById('iak').offsetHeight;
tbd.style.height=tih-tfh-tfh-15;tbd.firstElementChild.style.height=tih-tfh-tfh-20;
}
</script></head><body onLoad="fill_table()"><br>
<div id="iak" style="overflow:scroll;overflow-y:hidden; width:60%; height:60%;border:#888888 1px solid; " >
<table id="hot" border="1" cellpadding="0" cellspacing="0" style="table-layout:fixed;border-collapse:collapse;"><thead><tr></tr></thead></table>
<table id="bot" border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse; height:200px; white-space: nowrap;">
<tbody style="display:block; width:100%; height:200px; overflow:scroll; overflow-x:hidden;"></tbody></table>
</div>
</body>
</html>
Решение основано на создании трех таблиц: таблицы заголовков, таблицы данных, таблицы нижнего колонтитула (клон таблицы заголовков), заключенных в горизонтально прокручиваемый DIV. После того, как таблица заголовков и таблица данных построены, автоматически сгенерированная ячейка таблицы данных копируется в соответствующую ячейку таблицы заголовков. Некоторым недостатком является то, что вертикальная полоса прокрутки скрыта с правой стороны таблицы, но вы можете вертикально прокрутить колесиком мыши или показать полосу горизонтальной прокруткой в полное правое положение. Может, здесь кто-то покажет какое-нибудь лучшее решение на основе CSS, что будет действительно хорошо, но было бы лучше, если бы группа W3C добавила нормальное поведение прокрутки определения в следующую версию HTML.
Хм, этот постбыл написан как функциональный образец html прокручиваемой таблицы с фиксированным верхним и нижним колонтитулом. Ни меньше, ни больше, ни красивое украшение. И основной задачей было написать это как можно проще. Поскольку эта таблица предназначена для того, чтобы быть частью более сложной HTML-страницы с формулами и другими таблицами, следовательно, глобальные CSS не включены. После интенсивного развития функций HTML в последние 30 лет W3C я ожидал что-то вроде:
<table style="overflow:scroll; overflow-y:hidden; display:@in_parent_element_only">
<thead style="'header cells corresponding with table cells'">
<row><!--single row header --></row></thead>
<tbody style="overflow:scroll; overflow-x:hidden; 'full_view_table'">
<row><!--lot of rows --></row></tbody>
<tfoot ><row><!--copy of header --></row></tfoot>
</table>
К сожалению, это слишком простой способ - действительно, я тестировал множество комбинаций стилей, но либоячейки THEAD и TBODY не связаны (почему?), или строки THEAD, TBODY, TFOOT пересекаются или смещаются, и наоборот.
Я знаю, что очень хороший результат может быть достигнут тяжелыми вычислениями, позиционированием и стилизацией, но я настаиваю на простоте и функциональности, предпочитая информацию орнаментам.
Если кто-то знает, какая комбинация встроенных style=".."
может гарантировать хороший результат независимо от типа браузера, попробуйте написать здесь фрагмент с хорошим комментарием. Не только для меня, но и для сообщества, как я показал здесь свой примитивный путь.