Существует ли кросс-браузерная техника CSS / JavaScript для отображения длинной таблицы HTML, при которой заголовки столбцов остаются фиксированными на экране и не прокручиваются вместе с телом таблицы. Подумайте об эффекте «стоп-панели» в Microsoft Excel.
Я хочу иметь возможность прокручивать содержимое таблицы, но всегда иметь возможность видеть заголовки столбцов в верхней части.
javascript
css
html-table
Cheekysoft
источник
источник
thead th { position: sticky; top: 0; }
. Safari нужен префикс поставщика:-webkit-sticky
Ответы:
Некоторое время я искал решение для этого и обнаружил, что большинство ответов не работают или не подходят для моей ситуации, поэтому я написал простое решение с помощью jQuery.
Вот схема решения:
Ниже приведен код в работающей демоверсии.
Это решение работает в Chrome и IE. Поскольку он основан на jQuery, он должен работать и в других браузерах, поддерживаемых jQuery.
источник
Это может быть чисто решено в четырех строках кода.
Если вы заботитесь только о современных браузерах, то с помощью CSS-преобразований гораздо проще добиться фиксированного заголовка. Звучит странно, но прекрасно работает:
Поддержка CSS-преобразований широко доступна, за исключением Internet Explorer 8-.
Вот полный пример для справки:
Показать фрагмент кода
источник
$(this).addClass('border')
изменяет остальную часть таблицы со шрифтами, размером, цветом, которые я передаю в классе границы. Но, не добавляет строки в фиксированный заголовок. Цените любые входные данные о том, как это исправитьЯ только что закончил собирать плагин jQuery, который будет принимать действительную единственную таблицу с использованием действительного HTML (должен иметь thead и tbody) и выводить таблицу с фиксированными заголовками, необязательным фиксированным нижним колонтитулом, который может быть клонированным или любым другим. контент, который вы выбрали (нумерация страниц и т. д.). Если вы хотите воспользоваться преимуществами более крупных мониторов, он также изменит размер таблицы при изменении размера браузера. Еще одна добавленная возможность - возможность боковой прокрутки, если столбцы таблицы не могут все вписываться в вид.
http://fixedheadertable.com/
на github: http://markmalek.github.com/Fixed-Header-Table/
Его чрезвычайно легко настроить, и вы можете создать свои собственные стили для него. Он также использует закругленные углы во всех браузерах. Имейте в виду, что я только что выпустил его, так что технически он все еще бета и у меня очень мало мелких проблем, которые я сглаживаю.
Он работает в Internet Explorer 7, Internet Explorer 8, Safari, Firefox и Chrome.
источник
Я также создал плагин, который решает эту проблему. Мой проект - jQuery.floatThead существует уже более 4 лет и является очень зрелым.
Он не требует внешних стилей и не ожидает, что ваша таблица будет стилизована каким-либо конкретным способом. Он поддерживает Internet Explorer9 + и Firefox / Chrome.
В настоящее время (2018-05) он имеет:
Многие (не все) ответы здесь являются быстрыми взломами, которые, возможно, решили проблему, с которой столкнулся один человек, но будут работать не для каждой таблицы.
Некоторые из других плагинов старые и, вероятно, отлично работают с Internet Explorer, но будут работать с Firefox и Chrome.
источник
TL; DR
Если вы ориентируетесь на современные браузеры и не нуждаетесь в экстравагантных стилях: http://jsfiddle.net/dPixie/byB9d/3/ ... Хотя версия « большой четверки» довольно приятна, эта версия намного лучше справляется с шириной флюида.
Хорошие новости всем!
Благодаря достижениям HTML5 и CSS3 это стало возможным, по крайней мере, для современных браузеров. Немного хакерскую реализацию, с которой я столкнулся, можно найти здесь: http://jsfiddle.net/dPixie/byB9d/3/ . Я проверил это в FX 25, Chrome 31 и IE 10 ...
Соответствующий HTML (хотя вставьте HTML5-тип документа в верхней части документа):
Но как?!
Проще говоря, у вас есть заголовок таблицы, который вы визуально скрываете, делая его высотой 0px, который также содержит элементы div, используемые в качестве фиксированного заголовка. Контейнер таблицы оставляет достаточно места наверху, чтобы обеспечить абсолютно позиционированный заголовок, и таблица с полосами прокрутки выглядит так, как вы ожидаете.
Приведенный выше код использует позиционированный класс для абсолютного позиционирования таблицы (я использую его во всплывающем диалоговом окне), но вы также можете использовать его в потоке документа, удалив
positioned
класс из контейнера.Но ...
Это не идеально. Firefox отказывается сделать строку заголовка 0px (по крайней мере, я не нашел никакого способа), но упрямо удерживает ее на уровне не менее 4px ... Это не огромная проблема, но в зависимости от вашего стиля она будет портить ваши границы и т. Д.
В таблице также используется подход с использованием искусственного столбца, в котором цвет фона самого контейнера используется в качестве фона для заголовков div, которые являются прозрачными.
Резюме
В общем, могут возникнуть проблемы с оформлением в зависимости от ваших требований, особенно границ или сложного фона. Могут также быть проблемы с вычислимостью, я еще не проверял его во множестве браузеров (пожалуйста, прокомментируйте ваш опыт, если вы попробуете это), но я не нашел ничего подобного, поэтому я подумал, что это стоит опубликовать тем не мение ...
источник
<section>
элемент, должен быть ограничен по высоте только для того, чтобы заставить его переполниться и показать прокрутку. Любой макет, который сделает переполнение контейнера будет работать. Если вы обнаружите случай, когда он не появится, пожалуйста, оставьте ссылку на скрипку.padding-top
значение также означает, что если текст заголовка таблицы занимает более одной строки, он будет отображаться поверх ячеек таблицы. Жаль, потому что это работает как очарование большую часть времени. Действительно хороший трюк сdiv
вth
обойти вопрос колонка проклейки большинства других решений есть.Все попытки решить эту проблему вне спецификации CSS являются бледной тенью того, что мы действительно хотим: поставка под подразумеваемым обещанием THEAD.
Эта проблема «замороженных заголовков для таблицы» уже давно является открытой раной в HTML / CSS.
В идеальном мире было бы чисто CSS-решение для этой проблемы. К сожалению, похоже, что нет хорошего.
Соответствующие обсуждения стандартов на эту тему включают в себя:
ОБНОВЛЕНИЕ : Firefox поставляется
position:sticky
в версии 32. Все побеждают!источник
thead th { position: sticky; top: 0; }
. Можем ли мы обновить этот ответ, чтобы четко заявить об этом?Вот плагин jQuery для фиксированных заголовков таблиц. Это позволяет прокручивать всю страницу, замораживая заголовок, когда он достигает вершины. Он хорошо работает с таблицами Twitter Bootstrap .
Репозиторий GitHub: https://github.com/oma/table-fixed-header
Он не прокручивает только содержимое таблицы. Посмотрите на другие инструменты для этого, как один из этих других ответов. Вы сами решаете, что подходит вашему делу лучше всего.
источник
Большинство решений, размещенных здесь, требуют jQuery. Если вы ищете независимое от фреймворка решение, попробуйте Grid: http://www.matts411.com/post/grid/
Он размещен на Github здесь: https://github.com/mmurph211/Grid
Он не только поддерживает фиксированные верхние колонтитулы, но также поддерживает фиксированные левые и нижние колонтитулы, среди прочего.
источник
Свойство CSS
position: sticky
имеет большую поддержку в большинстве современных браузеров (у меня были проблемы с Edge, см. Ниже).Это позволяет нам легко решить проблему фиксированных заголовков:
Safari необходим префикс поставщика:
-webkit-sticky
.Для Firefox мне пришлось добавить
min-height: 0
к одному из родительских элементов. Я точно забыл, зачем это было нужно.К сожалению, реализация Microsoft Edge кажется только полуработающей. По крайней мере, у меня были некоторые мерцающие и смещенные ячейки таблицы в моем тестировании. Стол был еще пригоден для использования, но имел значительные эстетические проблемы.
источник
position: sticky;
с таблицей внутри DIV , который имеетoverflow: scroll;
,overflow-x: scroll;
илиoverflow-y: scroll;
. представляется лучшим и самым простым решением для фиксированных заголовков таблиц и столбцов в современных браузерах. Этот ответ должен быть поставлен на голосование.Более изысканная таблица прокрутки с чистым CSS
Все чистые CSS-решения, которые я видел до сих пор - хотя они и могут быть умными - не имеют определенного уровня полировки или просто не работают должным образом в некоторых ситуациях. Итак, я решил создать свой собственный ...
Особенности:
Вот несколько скрипок, которые показывают параметры жидкости и автоматической ширины:
Ширина и высота жидкости (адаптируется к размеру экрана): jsFiddle (обратите внимание, что полоса прокрутки отображается только при необходимости в этой конфигурации, поэтому вам может потребоваться уменьшить рамку, чтобы увидеть ее)
Автоматическая ширина, фиксированная высота (проще интегрировать с другим контентом): jsFiddle
Конфигурация с автоматической шириной и фиксированной высотой, вероятно, имеет больше вариантов использования, поэтому я опубликую код ниже.
Метод замораживания строки заголовка, который я использовал, похож на метод d-Pixie, поэтому обратитесь к его сообщению за разъяснениями. В этой технике было множество ошибок и ограничений, которые можно было исправить только кучами дополнительного CSS и дополнительным контейнером div или двумя.
источник
Простой плагин jQuery
Это вариант решения Махеса. Вы можете назвать это как
$('table#foo').scrollableTable();
Идея заключается в следующем:
thead
иtbody
на отдельныеtable
элементыtable
вdiv.scrollable
div.scrollable
прокруткуCSS может быть:
Предостережения
Тем не менее, это работает для моих целей, и вы можете взять и изменить его.
Вот плагин:
источник
:)
Не очень чистое, но чистое решение HTML / CSS.
Обновлен для примера IE8 + JSFiddle
источник
Поддержка фиксированного нижнего колонтитула
Я расширил функцию Натана, чтобы он также поддерживал фиксированный нижний колонтитул и максимальную высоту. Кроме того, функция установит сам CSS, и вам нужно только поддерживать ширину.
Использование:
Фиксированная высота:
Максимальная высота (если браузер поддерживает опцию CSS 'max-height'):
Автор сценария:
источник
Каким-то образом я закончил
Position:Sticky
работать нормально на моем случае:источник
Два div, один для заголовка, один для данных. Сделайте прокрутку данных div и используйте JavaScript, чтобы установить ширину столбцов в заголовке, равную ширине данных. Я думаю, что ширина столбцов данных должна быть фиксированной, а не динамической.
источник
Я понимаю, что вопрос разрешает JavaScript, но я разработал чистое CSS-решение, которое также позволяет горизонтальному расширению таблицы. Он был протестирован с Internet Explorer 10 и последними браузерами Chrome и Firefox. Ссылка на jsFiddle находится внизу.
HTML:
И CSS:
http://jsfiddle.net/HNHRv/3/
источник
Для тех, кто попробовал хорошее решение, данное Максимилианом Хилсом, и не смог заставить его работать с Internet Explorer, у меня была такая же проблема (Internet Explorer 11), и я выяснил, в чем проблема.
В Internet Explorer 11 преобразование стиля (по крайней мере, с переводом) не работает
<THEAD>
. Я решил это, применив стиль ко всему<TH>
циклу. Это сработало. Мой код JavaScript выглядит так:В моем случае таблица была GridView в ASP.NET. Сначала я подумал, что это потому, что его не было
<THEAD>
, но даже когда я заставил его иметь его, он не работал. Тогда я узнал, что я написал выше.Это очень хорошее и простое решение. В Chrome он идеален, в Firefox немного вялен, а в Internet Explorer еще более вялен. Но в целом хорошее решение.
источник
Я бы хотел найти решение @ Марка раньше, но я пошел и написал свое собственное, прежде чем увидел этот ТАК вопрос ...
Mine - очень легкий плагин jQuery, который поддерживает фиксированный верхний и нижний колонтитулы, охват столбцов (colspan), изменение размера, горизонтальную прокрутку и необязательное количество строк для отображения перед началом прокрутки.
jQuery.scrollTableBody (GitHub)
До тех пор , пока у вас есть таблица с собственно
<thead>
,<tbody>
и ( по желанию)<tfoot>
, все , что вам нужно сделать , это:источник
Я нашел этот обходной путь - переместить строку заголовка в таблицу выше таблицы с данными:
источник
Применяя плагин StickyTableHeaders jQuery к таблице, заголовки столбцов будут прилипать к верхней части области просмотра при прокрутке вниз.
Пример:
источник
Мне нравится ответ Максимиллиана Хилса, но у меня были некоторые проблемы:
Чтобы избавиться от мерцания, я использую тайм-аут, чтобы подождать, пока пользователь не закончит прокрутку, затем я применяю преобразование - таким образом, заголовок не виден во время прокрутки.
Я также написал это, используя jQuery, одно преимущество в том, что jQuery должен обрабатывать префиксы вендоров для вас
Таблица обернута в div с классом
table-container-fixed
.Я устанавливаю border-collapse для разделения, потому что в противном случае мы теряем границы во время перевода, и я удаляю границу на таблице, чтобы содержимое не появлялось чуть выше ячейки, где была граница при прокрутке.
Я делаю
th
фон белым, чтобы покрыть ячейки снизу, и добавляю границу, которая соответствует границе таблицы - которая стилизована с помощью Bootstrap и прокручивается вне поля зрения.источник
Используйте последнюю версию jQuery и включите следующий код JavaScript.
источник
Это не точное решение для строки фиксированного заголовка, но я создал довольно оригинальный метод повторения строки заголовка по всей длинной таблице, но при этом сохраняю возможность сортировки.
Этот аккуратный маленький вариант требует плагина jQuery
tablesorter
. Вот как это работает:HTML
Очевидно, что моя таблица имеет гораздо больше строк, чем эта. 193, если быть точным, но вы можете видеть, где повторяется строка заголовка. Повторяющаяся строка заголовка устанавливается этой функцией:
JQuery
источник
Многие люди, кажется, ищут этот ответ. Я нашел это скрытым в ответе на другой вопрос здесь: синхронизация ширины столбца между таблицами в двух разных фреймах и т. Д.
Из десятков методов, которые я пробовал, это единственный метод, который я нашел, который надежно работает, чтобы позволить вам иметь прокручиваемую нижнюю таблицу с таблицей заголовков, имеющей одинаковую ширину.
Вот как я это сделал, сначала я улучшил jsfiddle выше, чтобы создать эту функцию, которая работает на обоих
td
иth
(в случае, если отключает других, которые используютth
для стилизации своих строк заголовка).Затем вам нужно создать две таблицы. ПРИМЕЧАНИЕ. В таблице заголовков должна быть дополнительная таблица,
TD
чтобы оставить место в верхней таблице для полосы прокрутки, например:Затем сделайте что-то вроде:
Это единственное решение, которое я нашел в Переполнении стека, которое работает на основе множества похожих вопросов и работает во всех моих случаях.
Например, я попробовал плагин jQuery stickytables, который не работает с durandal, и проект Google Code здесь https://code.google.com/p/js-scroll-table-header/issues/detail?id=2
Другие решения, связанные с клонированием таблиц, имеют низкую производительность или отстой и работают не во всех случаях.
Нет необходимости в этих слишком сложных решениях. Просто создайте две таблицы, как в примерах ниже, и вызовите функцию setHeaderTableWidth, как описано здесь, и boom, все готово .
Если это не работает для вас, вы, вероятно, играете со своим свойством CSS для определения размера блока, и вам нужно установить его правильно. Это легко испортить ваш CSS-контент случайно. Есть много вещей, которые могут пойти не так, так что будьте осторожны. Этот подход работает для меня .
источник
Вот решение, с которым мы в конечном итоге работали (для того, чтобы справиться с некоторыми крайними случаями и старыми версиями Internet Explorer, мы в конечном итоге также исчезли в строке заголовка при прокрутке, а затем вернули ее обратно, когда прокрутка заканчивается, но в браузерах Firefox и WebKit это решение просто работает и предполагает границу коллапс: коллапс.
Ключом к этому решению является то, что как только вы примените border-collapse , CSS преобразует работу над заголовком, так что это просто вопрос перехвата событий прокрутки и правильной настройки преобразования. Вам не нужно ничего дублировать. Если это поведение не реализовано должным образом в браузере, трудно представить более легкое решение.
JSFiddle: http://jsfiddle.net/podperson/tH9VU/2/
Он реализован в виде простого плагина jQuery. Вы просто привязываете свою теаду к вызову типа $ ('thead'). Sticky (), и они будут зависать. Это работает для нескольких таблиц на странице и заголовках разделов на полпути больших таблиц.
источник
border: 2px solid red;
кth
, свитка, и вы увидите эту проблему. Я сам придумал это более простое решение: jsfiddle.net/x6pLcor9/19Вот улучшенный ответ на ответ Максимилиана Хилса .
Этот работает в Internet Explorer 11 без мерцания:
источник
Я разработал простой облегченный плагин jQuery для преобразования хорошо отформатированной таблицы HTML в прокручиваемую таблицу с фиксированным заголовком таблицы и столбцами.
Плагин хорошо работает, чтобы сопоставить положение пикселя в пикселях фиксированной секции с прокручиваемой секцией. Кроме того, вы также можете зафиксировать количество столбцов, которые будут всегда отображаться при горизонтальной прокрутке.
Демонстрация и документация: http://meetselva.github.io/fixed-table-rows-cols/
Репозиторий GitHub: https://github.com/meetselva/fixed-table-rows-cols
Ниже приведено использование простой таблицы с фиксированным заголовком.
источник
источник
Дополнительно к @Daniel Waltrip answer. Таблицу нужно заключить в div
position: relative
для работы сposition:sticky
. Поэтому я хотел бы опубликовать мой пример кода здесь.CSS
HTML
демонстрация
источник