Я пытаюсь создать HTML-таблицу, в которой заголовок будет оставаться наверху страницы, когда И ТОЛЬКО, когда пользователь прокручивает его вне поля зрения. Например, таблица может быть на 500 пикселей ниже страницы, как я могу сделать так, чтобы, если пользователь прокручивает заголовок вне поля зрения (браузер как-то обнаруживает, что его больше нет в окне Windows), он останется наверху ? Кто-нибудь может дать мне решение Javascript для этого?
<table>
<thead>
<tr>
<th>Col1</th>
<th>Col2</th>
<th>Col3</th>
</tr>
</thead>
<tbody>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
</tbody>
</table>
Поэтому в приведенном выше примере я хочу <thead>
прокрутить страницу, если она выходит из поля зрения.
ВАЖНО: Я НЕ ищу решение, где <tbody>
будет полоса прокрутки (переполнение: авто).
jquery
html
html-table
Сэм Дюфель
источник
источник
Ответы:
Вы могли бы сделать что-то подобное, нажав на
scroll
обработчик событийwindow
и используя другойtable
с фиксированной позицией, чтобы отобразить заголовок вверху страницы.HTML:
CSS:
JavaScript:
Это покажет заголовок таблицы, когда пользователь прокрутит вниз достаточно далеко, чтобы скрыть исходный заголовок таблицы. Он снова скроется, когда пользователь снова прокрутит страницу вверх.
Рабочий пример: http://jsfiddle.net/andrewwhitaker/fj8wM/
источник
window
. mkoryak.github.io/floatThead предлагает более общее решение.Чистый CSS (без поддержки IE11):
источник
-webkit-sticky
как недопустимое значение дляposition
.-webkit-sticky
для Safari (для настольных ПК и iOS), а не для Chrome.position: sticky
работает в Chrome с версии 56. Вы должны установить ОБА правила:-webkit-sticky
иsticky
точно в том же порядке, что и в моем примере кода. Safari получаетwebkit-sticky
и все другие браузеры перезаписывают егоsticky
.position: sticky
будет работать с элементами таблицы.Ну, я пытался получить тот же эффект, не прибегая к столбцам фиксированного размера или имея фиксированную высоту для всей таблицы.
Решение, которое я придумал, - взломать. Он состоит из дублирования всей таблицы, затем скрытия всего, кроме заголовка, и создания фиксированной позиции.
HTML
CSS
Javascript
Посмотреть здесь: http://jsfiddle.net/QHQGF/7/
Редактировать: обновил код, чтобы thead мог получать события указателя (чтобы кнопки и ссылки в заголовке все еще работали). Это решает проблему, о которой сообщили Лухфлух и Джо М.
Новый jsfiddle здесь: http://jsfiddle.net/cjKEx/
источник
visibility: hidden
. Вы можете скрыть только#clone tbody
и после этого вы можете установить границу ... Рабочая скрипка: jsfiddle.net/QHQGF/1707Я написал плагин, который делает это. Я работаю над этим уже около года, и думаю, что он хорошо справляется со всеми угловыми делами:
Вот несколько демонстраций / документов:
http://mkoryak.github.io/floatThead/
источник
Мне удалось исправить проблему с изменением ширины столбца. Я начал с решения Эндрю выше (большое спасибо!), А затем добавил один маленький цикл, чтобы установить ширину клонированных ТД:
Это решает проблему без клонирования всей таблицы и скрытия тела. Я новичок в JavaScript и jQuery (и для переполнения стека), поэтому любые комментарии приветствуются.
источник
На сегодняшний день это лучшее решение, которое я нашел для фиксированного заголовка таблицы.
ОБНОВЛЕНИЕ 5/11: Исправлена ошибка горизонтальной прокрутки, как указано Керри Джонсон
Codepen: https://codepen.io/josephting/pen/demELL
источник
outerWidth
наwidth
в определении функции resizeFixed ().z-index
к некоторому положительному числу в.fixed
классе, чтобы объекты, отображаемые после загрузки страницы в таблице, не плавали поверх фиксированного заголовка при прокрутке.Лучшее решение - использовать этот плагин jquery:
https://github.com/jmosbech/StickyTableHeaders
Этот плагин отлично сработал для нас, и мы попробовали много других решений. Мы проверили это в IE, Chrome и Firefox
источник
Здесь уже есть много действительно хороших решений. Но одно из самых простых CSS-решений, которые я использую в этих ситуациях, заключается в следующем:
Поскольку нет необходимости в JavaScript, это значительно упрощает ситуацию. Вы должны сосредоточиться на втором правиле CSS, которое содержит условия для обеспечения того, чтобы заголовок таблицы оставался сверху независимо от места прокрутки.
Детально проработать каждое из правил.
position
предназначено для указания браузеру, что объект head, его строка и его ячейки должны придерживаться вершины. Это обязательно должно сопровождатьсяtop
, что указывает браузеру, что голова будет придерживаться верхней части страницы или области просмотра. Кроме того, вы можете добавитьz-index
чтобы содержимое заголовка всегда оставалось сверху.Цвет фона просто для иллюстрации сути. Вам не нужно использовать какой-либо дополнительный JavaScript, чтобы получить этот эффект. Это поддерживается в большинстве основных браузеров после 2016 года.
источник
Я нашел простую библиотеку jQuery под названием Sticky Table Headers. Две строки кода, и он сделал именно то, что я хотел. Приведенные выше решения не управляют шириной столбцов, поэтому, если у вас есть ячейки таблицы, которые занимают много места, результирующий размер постоянного заголовка не будет соответствовать ширине вашей таблицы.
http://plugins.jquery.com/StickyTableHeaders/
Информация об использовании здесь: https://github.com/jmosbech/StickyTableHeaders
источник
Ну, после обзора всех доступных решений я написал плагин, который может заморозить любую строку (не только th) вверху страницы или контейнера. Это очень просто и очень быстро. Не стесняйтесь использовать его. http://maslianok.github.io/stickyRows/
источник
Вы можете использовать этот подход, чистый HTML и CSS не нужны JS :)
источник
Я нашел простое решение без использования JQuery и CSS только .
Вы должны поместить фиксированное содержимое в теги th и добавить CSS
Позиции, z-index и top достаточно. Но вы можете применить остальное, чтобы дать для лучшего обзора.
источник
Я тоже испытывал те же проблемы с тем, что форматирование границ не показывалось с помощью кода entrophy, но было несколько небольших исправлений, и теперь таблица расширяется и отображает все правила стилей CSS, которые вы можете добавить.
к css добавить:
тогда вот новый javascript:
источник
Вот решение, основанное на принятом ответе. Он корректирует: ширину столбцов, соответствующий стиль таблицы и время прокрутки таблицы в контейнере div.
использование
Убедитесь, что в вашей таблице есть
<thead>
тег, потому что будет исправлено только содержание.Javasript
источник
$sp.scrollLeft()
который получает сумму, прокручиваемую слева, поэтому при прокрутке вниз фиксированная таблица расположена правильно. Также добавлена проверка при горизонтальной прокрутке, если виден фиксированный стол, чтобы отрегулировать левое положение. Еще одна проблема, которую я не мог решить, - когда таблица выходит за область просмотра, она должна скрываться до тех пор, пока пользователь не выполнит прокрутку назад.Uncaught TypeError: $table.scrollParent is not a function
Это поможет вам иметь фиксированный заголовок, который также можно прокручивать по горизонтали с данными.
источник
Это мое решение
источник
Немного опоздал на вечеринку, но здесь есть реализация, которая работает с несколькими таблицами на одной и той же странице и бесплатно (с использованием requestAnimationFrame). Также нет необходимости указывать ширину столбцов. Горизонтальная прокрутка работает также.
Заголовки определены в,
div
так что вы можете добавить любую разметку (например, кнопки), если это необходимо. Это все, что нужно HTML:https://jsfiddle.net/lloydleo/bk5pt5gs/
источник
В этом решении фиксированный заголовок создается динамически, контент и стиль клонируются из THEAD.
все, что вам нужно, это две строки, например:
var $myfixedHeader = $("#Ttodo").FixedHeader(); //create fixed header $(window).scroll($myfixedHeader.moveScroll); //bind function to scroll event
Мой плагин jquery FixedHeader и getStyleObject, представленные ниже, вы можете поместить в файл .js.
источник
Создайте дополнительную таблицу с тем же заголовком, что и основная таблица. Просто поместите thead в новую таблицу с одним рядом и всеми заголовками в ней. Делайте положение абсолютного и белого фона. Для основной таблицы поместите его в div и используйте некоторую прокрутку по высоте и переполнению. Таким образом, наша новая таблица преодолеет заголовок главной таблицы и останется там. Окружите все в div. Ниже приведен приблизительный код для этого.
источник
Демо: демоверсия фиксированного заголовка таблицы css
источник
Исправьте эту проблему с этим
источник
Это может быть достигнуто с помощью преобразования свойства стиля. Все, что вам нужно сделать, это обернуть вашу таблицу в некоторый div с фиксированной высотой и переполнением, установленным на auto, например:
И затем вы можете присоединить к нему обработчик onscroll, здесь у вас есть метод, который находит каждую таблицу, завернутую в
<div class="tableWrapper"></div>
:И вот рабочий пример этого в действии (я использовал bootstrap, чтобы сделать его красивее): fiddle
Для тех, кто также хочет поддерживать IE и Edge, вот фрагмент:
В IE и Edge прокрутка немного запаздывает ... но работает
Вот ответ, который помогает мне узнать это: ответ
источник
Я испробовал большинство из этих решений и в итоге нашел (IMO) лучшее современное решение:
CSS сетки
С помощью CSS-сеток вы можете определить «сетку» и, наконец, создать красивое кросс-браузерное решение без использования JavaScript для таблицы с фиксированным заголовком и прокручиваемого содержимого. Высота заголовка может быть даже динамической.
CSS : отобразить в виде сетки и установить количество
template-rows
:HTML : создайте контейнер сетки и определите количество
rows
:Вот рабочий пример:
CSS
HTML
источник
Я пробовал это с помощью преобразования: перевод . Хотя он хорошо работает в Firefox и Chrome, в IE11 просто нет функции. Нет двойных полос прокрутки. Поддерживает таблицу tfoot и заголовок. Чистый Javascript, нет JQuery.
http://jsfiddle.net/wbLqzrfb/42/
источник
Я нашел решение без jquery
HTML
CSS
Вы можете увидеть это работает здесь: https://jsfiddle.net/lexsoul/fqbsty3h
Источник: https://medium.com/@vembarrajan/html-css-tricks-scroll-able-table-body-tbody-d23182ae0fbc
источник