LINUX.ORG.RU

Фиксация заголовка таблицы


0

1

Упрощенно страница состоит из двух div:
1) фиксированное верхнее меню - height: 77px; position: fixed;
2) нижняя часть для вывода текста и таблиц ввода - top: 77px; height: auto; position: absolute;

Нужно зафиксировать thead и прокручивать tbody таблицы из div2.
Размеры таблицы (thead, tbody) неизвестны, документов много.
Тестирую только в Firefox, поэтому совместимость с другими не важна.

.theadfix {
    position: fixed;
    width: 100%;
    height: auto;
    top: 77;
    left: 0;
    bottom: auto;
    z-index: 3;
}

Таблица разделилась на две части (фиксированную thead и скроллинг tbody).
Возникли проблемы:
* thead перекрывает содержимое tbody, первые строки находятся под заголовком таблицы
* ширина столбцов в обоих частях стала разная.

Что делал похожее:
Для режима просмотра сделал одну широкую таблицу и показываю постранично
через js куски таблицы (горизонтальная прокрутка).
Не совсем это удобно и требует дополнительной разметки.

★★

Последнее исправление: WinLin2 (всего исправлений: 10)

Полностью не вник, догадываюсь, что проблема из-за абсолютного и фиксированного позиционирований. Оба исключают элементы из общего потока документа. Почему бы не сделать релятивное позиционирование с оверфлоу: авто для блока с тбоди? Или предварительное вычисление с «visibility: hidden» необходимой заголовку высоты, на js, и соответствующее позиционирование блока с тбоди.

varchar
()

Буду вычислять высота thead через js.

Осталась проблема разной ширины колонок таблицы у thead и tbody из-за текста внутри колонок.
При задании ширины в px длинный текст может раздвинуть колонку.

WinLin2 ★★
() автор топика

А через две таблицы не проще? Одна таблица заголовок, одна контент.

anonymous
()
Ответ на: комментарий от anonymous

Документов много и таблицы в каждом свои.

В двух таблицах сложно совместить ширину колонок.
Пока придумал только через листание страниц.

WinLin2 ★★
() автор топика

Решение очень простое, если использовать жаваскрипт.

* thead перекрывает содержимое tbody, первые строки находятся под заголовком таблицы

Скриптом добавляем в тело таблицы строку с пустыми ячейками и ставим им высоту заголовка.

* ширина столбцов в обоих частях стала разная.

Скриптом каждой ячейке заголовка ставим ширину соответствующей ячейки первой строки тела таблицы.

Попробуй, должно сработать.

Apple-ch ★★
()
Ответ на: комментарий от WinLin2

На всякий случай: ставить заголовку position: fixed тоже лучше скриптом. Ведь заранее ширина ячеек неизвестна, т.е. нельзя сказать, в шапке или в теле находится значение, определяющее ширину каждой ячейки.

Поэтому лучше чтобы таблица сначала отрендерилась, потом ширина ячеек заголовка была зафиксирована, и только потом менять позиционирование.

Apple-ch ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.