Я хотел бы иметь возможность «настроить» презентацию HTML-таблицы, чтобы добавить одну функцию: при прокрутке страницы вниз, чтобы таблица находилась на экране, но строки заголовков находились вне экрана, я бы хотел, чтобы заголовки оставались видимый в верхней части области просмотра.
Концептуально это будет похоже на функцию «стоп-панели» в Excel. Однако HTML-страница может содержать несколько таблиц, и я хотел бы, чтобы это происходило только для той таблицы, которая просматривается в данный момент, только пока она находится в поле зрения.
Примечание. Я видел одно решение, в котором область данных таблицы сделана прокручиваемой, а заголовки не прокручиваются. Это не решение, которое я ищу.
html
html-table
Крейг МакКуин
источник
источник
Ответы:
Посмотрите jQuery.floatThead ( доступны демоверсии ), который очень классный, может работать и с DataTables , и даже может работать внутри
overflow: auto
контейнера.источник
Я сделал пробное решение, используя jQuery .
Посмотреть образец здесь.
Теперь я получил этот код в репозитории Mercurial Bitbucket . Основной файл есть
tables.html
.Мне известна одна проблема с этим: если таблица содержит якоря и если вы открываете URL-адрес с указанным якорем в браузере, при загрузке страницы строка с якорем, вероятно, будет скрыта плавающим заголовком.
Обновление 2017-12-11: я вижу, что это не работает с текущими Firefox (57) и Chrome (63). Не уверен, когда и почему это перестало работать, или как это исправить. Но теперь я думаю, что принятый ответ Хенди Ираван выше.
источник
floatingHeaderRow.css("top", Math.min(scrollTop - offset.top, $(this).height() - floatingHeaderRow.height()) + "px");
чтобы ,floatingHeaderRow.css("top", scrollTop + "px");
как с кодом вы имели заголовок таблицы прыгал дальше вниз страницы , чтобы в конце концов исчезнуть со страницы.// Copy cell widths from original header
Часть кода). @Craig McQueen, пожалуйста, отредактируйте свой ответ, чтобы никто больше не делал эту ошибку.Крейг, я немного усовершенствовал ваш код (среди прочего, он теперь использует position: fixed) и обернул его как плагин jQuery.
Попробуйте это здесь: http://jsfiddle.net/jmosbech/stFcx/
И получите источник здесь: https://github.com/jmosbech/StickyTableHeaders
источник
Если вы ориентируетесь на современные css3-совместимые браузеры ( поддержка браузера: https://caniuse.com/#feat=css-sticky ), вы можете использовать его
position:sticky
, который не требует JS и не нарушит неправильное выравнивание таблицы. и тд того же столбца. Также не требуется фиксированная ширина столбца для правильной работы.Пример для отдельной строки заголовка:
Для theads с 1 или 2 рядами вы можете использовать что-то вроде этого:
Возможно, вам придется немного поиграть со свойством top последнего потомка, изменив количество пикселей в соответствии с высотой первой строки (+ поле + граница + отступы, если есть), поэтому вторая строка придерживается только вниз ниже первый.
Кроме того, оба решения работают, даже если у вас есть более одной таблицы на одной странице:
th
элемент каждого из них становится липким, когда его верхняя позиция совпадает с указанным в определении css, и просто исчезает, когда вся таблица прокручивается вниз. Так что, если есть больше таблиц, все прекрасно работают одинаково.Зачем использовать последний ребенок до и first-child после в css?
Поскольку правила CSS отображаются браузером в том же порядке, в каком вы их записываете в файл CSS, и из-за этого, если у вас есть только 1 строка в элементе thead, первая строка одновременно является последней строкой, а правило first-child необходимо переопределить последний ребенок. Если нет, у вас будет смещение строки в 30 пикселей от верхнего поля, которое, я полагаю, вам не нужно.
Известная проблема position: sticky состоит в том, что она не работает с элементами thead или строками таблицы: вы должны использовать th-элементы. Эта проблема будет решена в будущих версиях браузера.
источник
thead tr+tr th
чтобы предназначаться для второго ряда.Возможные альтернативы
JS-плавающей таблицы-заголовки
JS-плавающей таблицы-заголовки (Google Code)
В Друпале
У меня есть сайт Drupal 6. Я был на странице администратора "Модули", и заметил, что таблицы имеют именно эту функцию!
Глядя на код, кажется, что он реализован с помощью файла с именем
tableheader.js
. Это применяет функцию на всех таблицах с классомsticky-enabled
.Для сайта Drupal я бы хотел использовать этот
tableheader.js
модуль как есть для пользовательского контента.tableheader.js
кажется, не присутствует на страницах контента пользователя в Drupal. Я опубликовал сообщение на форуме, чтобы спросить, как изменить тему Drupal, чтобы она была доступна. Согласно ответу,tableheader.js
может быть добавлен в тему Drupal, используя следующиеdrupal_add_js()
темыtemplate.php
:источник
Я столкнулся с этой проблемой совсем недавно. К сожалению, мне пришлось сделать 2 таблицы, одну для заголовка и одну для тела. Это, вероятно, не самый лучший подход, но здесь идет:
Это сработало для меня, это, вероятно, не элегантный способ, но это работает. Я буду исследовать, чтобы увидеть, могу ли я сделать что-то лучше, но это позволяет использовать несколько таблиц.
Перейдите к разделу « Переполнение», чтобы узнать, подходит ли он вам.
источник
Это действительно сложная вещь - иметь липкий заголовок на столе. У меня было такое же требование, но с asp: GridView а затем я обнаружил, что действительно думал, что у gridview есть липкий заголовок. Есть много доступных решений, и мне потребовалось 3 дня, чтобы попробовать все решения, но ни одно из них не могло удовлетворить.
Основной проблемой, с которой я столкнулся в большинстве этих решений, была проблема выравнивания. Когда вы пытаетесь сделать заголовок плавающим, выравнивание ячеек заголовка и ячеек тела каким-то образом сбивается с пути.
С некоторыми решениями у меня также возникла проблема перекрытия заголовка с первыми несколькими строками тела, из-за чего строки тела скрывались за плавающим заголовком.
Так что теперь мне пришлось реализовать свою собственную логику, чтобы достичь этого, хотя я также не считаю это идеальным решением, но это также может быть полезно для кого-то,
Ниже приведен пример таблицы.
Примечание . Таблица помещается в DIV с атрибутом класса, равным «table-holder».
Ниже приведен скрипт JQuery, который я добавил в заголовок своей HTML-страницы.
и, наконец, ниже класс CSS для немного раскраски.
Таким образом, вся идея этой логики состоит в том, чтобы поместить таблицу в div держателя таблицы и создать клон этого держателя на стороне клиента при загрузке страницы. Теперь скройте тело таблицы внутри держателя клона и поместите оставшуюся часть заголовка в исходный заголовок.
То же решение также работает для asp: gridview, вам нужно добавить еще два шага для достижения этого в gridview,
В событии OnPrerender объекта gridview на веб-странице установите для раздела таблицы строки заголовка значение TableHeader.
И заверните свою сетку в
<div class="table-holder"></div>
.Примечание : если ваш заголовок имеет интерактивные элементы управления, вам может понадобиться добавить еще несколько сценариев jQuery для передачи событий, вызванных в клонированном заголовке, в исходный заголовок. Этот код уже доступен в плагине jQuery sticky-header, созданном jmosbech
источник
Использование
display: fixed
вthead
разделе должно работать, но для того, чтобы оно работало только с текущей таблицей, вам понадобится помощь JavaScript. И это будет непросто, потому что нужно будет определить места прокрутки и расположение элементов относительно области просмотра, что является одной из основных областей несовместимости браузера.Посмотрите на популярные JavaScript-фреймворки (jQuery, MooTools, YUI и т. Д.), Чтобы узнать, могут ли они либо делать то, что вы хотите, либо облегчать выполнение того, что вы хотите.
источник
position: fixed
. Извините, это не сработало в Chrome.Если вы используете полноэкранную таблицу, вас может заинтересовать настройка отображения th: исправлено; и сверху: 0; или попробуйте очень похожий подход через CSS.
Обновить
Просто быстро создайте рабочее решение с помощью iframes (html4.0). Этот пример НЕ соответствует стандарту, однако вы легко сможете это исправить:
outer.html
test.html
источник
Самый простой ответ только с использованием CSS: D !!!
источник
То подтверждение концепции, которое вы сделали, было великолепно! Однако я также нашел этот плагин jQuery, который, кажется, работает очень хорошо. Надеюсь, поможет!
источник
Расстраивает то, что то, что прекрасно работает в одном браузере, не работает в других. Следующее работает в Firefox, но не в Chrome или IE:
источник
px
? Является ли это тем устаревшим устройством, которое использовалось людьми 90-х годов, когда использовалось устройство отображения с разрешением 72 dpi?