Мне нужно создать таблицу html (или что-то подобное) с фиксированным заголовком и фиксированным первым столбцом.
В каждом решении, которое я видел до сих пор, используется Javascript или jQuery
установка scrollTop / scrollLeft, но оно не работает плавно в мобильных браузерах, поэтому я ищу решение на чистом CSS.
Я нашел здесь решение для фиксированного столбца: jsfiddle.net/C8Dtf/20/, но я не знаю, как его улучшить, чтобы зафиксировать и заголовок.
Я хочу, чтобы он работал в браузерах webkit или использовал какие-то css3
функции, но повторяю, я не хочу использовать Javascript
для прокрутки.
РЕДАКТИРОВАТЬ: это пример поведения, которого я хочу достичь: https://web.archive.org/web/20130829032141/http://datatables.net/release-datatables/extras/FixedColumns/css_size.html
position
поведение к строкам и ячейкам, но не совсем понимаю, где это применимо или нет.Ответы:
Реальное решение на чистом CSS с фиксированной строкой заголовка и первым столбцом
Мне пришлось создать таблицу с фиксированным заголовком и фиксированным первым столбцом, используя чистый CSS, и ни один из ответов здесь не был тем, что я хотел.
position: sticky
Свойство поддерживает как прилипание к вершине (как я видел , как это используется самый) и в сторону в современных версиях Chrome, Firefox, и Edge. Это может быть объединено с ,div
который имеетoverflow: scroll
свойство , чтобы дать вам таблицу с фиксированными заголовками , которые могут быть размещены в любом месте на странице:Поместите свой стол в контейнер:
Используйте
overflow: scroll
на своем контейнере для включения прокрутки:Как указала Дагмар в комментариях, контейнер также требует a
max-width
иmax-height
.Используйте ,
position: sticky
чтобы ячейки таблиц прилипают к краю иtop
,right
или ,left
чтобы выбрать , какой край придерживаться:Как упоминал MarredCheese в комментариях, если ваш первый столбец содержит
<td>
элементы вместо<th>
элементов, вы можете использоватьtbody td:first-child
в своем CSS вместоtbody th
Чтобы заголовок в первом столбце оставался слева, используйте:
Показать фрагмент кода
https://jsfiddle.net/qwubvg9m/1/
источник
width
своего первого столбца, вы можете использовать егоposition: sticky
в ячейках второго столбца соleft
значением, равным значению первого столбцаwidth
: jsfiddle.net/wvypo83c/794<td>
элементы вместо<th>
элементов, вы можете использоватьtbody td:first-child
в своем CSS вместоtbody th
.В настоящее время этого можно добиться с помощью CSS только с помощью
position: sticky
свойства.Вот отрывок:
(jsFiddle: https://jsfiddle.net/hbqzdzdt/5/ )
По поводу совместимости. Он работает во всех основных браузерах, но не в IE. Есть полифилл для,
position: sticky
но я никогда не пробовал.источник
Это нелегкий подвиг.
Следующая ссылка - на рабочую демонстрацию:
Ссылка Обновлено в соответствии с комментарием lanoxx
http://jsfiddle.net/C8Dtf/366/
Просто не забудьте добавить это:
я не вижу другого способа добиться этого. Особенно с использованием только css.
Это через многое предстоит пройти. Надеюсь это поможет :)
источник
"bFilter": false
"bInfo" : false
в.dataTable()
звонокthead
в своей таблице , которая не связана с изменениямиtd
элементов, так что если текст клетка длинная,th
ширина не будет корректировать соответствующим образом .Все эти предложения хороши и все такое, но они либо исправляют либо заголовок, либо столбец, а не оба сразу, либо используют javascript. Причина - они не верят, что это можно сделать на чистом CSS. Причина:
Если бы это было возможно, вам нужно было бы вложить несколько прокручиваемых div один в другой, каждый с прокруткой в другом направлении. Затем вам нужно будет разделить вашу таблицу на три части - фиксированный заголовок, фиксированный столбец и остальные данные.
Хорошо. Но теперь проблема - вы можете сделать так, чтобы один из них оставался на месте при прокрутке, но другой вложен в область прокрутки первого и, следовательно, сам скроллируется вне поля зрения, поэтому не может быть исправлен на месте на экран. «Ага, - скажете вы, - но я могу как-то использовать для этого абсолютное или фиксированное положение» - нет, вы не можете. Как только вы это сделаете, вы потеряете возможность прокручивать этот контейнер. Это ситуация с курицей и яйцом - вы не можете иметь и то и другое, они нейтрализуют друг друга.
Я считаю, что единственное решение - через javascript. Вам нужно полностью разделить три элемента и синхронизировать их позиции с помощью javascript. Есть хорошие примеры в других сообщениях на этой странице. Это тоже стоит посмотреть:
http://tympanus.net/codrops/2014/01/09/sticky-table-headers-columns/
источник
Я внес некоторые изменения в jsfiddle. Возможно, это то, что вы пытаетесь сделать.
Я жестко запрограммировал названия так:
И еще я добавил несколько стилей.
Надеюсь, это то, что вы хотите :)
источник
Пример с использованием только CSS:
источник
div
. Это то,div
что позволяет прокручивать строку, пока заголовок остается на том же месте. Этот подход сработал для моих нужд.Я нашел отличное решение этой проблемы от Пола О'Брайена и хотел бы поделиться ссылкой: https://codepen.io/paulobrien/pen/LBrMxa
Я удалил стиль нижнего колонтитула:
источник
Чтобы исправить как заголовки, так и столбцы, вы можете использовать следующий плагин:
Обновлено в июле 2019 г.
Недавно появилось также чистое решение CSS , основанное на свойстве CSS
position: sticky;
( здесь для более подробной информации), применяемом к каждомуTH
элементу (вместо их родительского контейнера).источник
Недавно мне пришлось создать решение с фиксированной группой заголовков и фиксированным первым столбцом. Я разделил свою таблицу на div и использовал jquery для захвата прокрутки окна.
http://jsfiddle.net/TinT/EzXub/2346/
источник
Мы с коллегой только что выпустили новый проект GitHub, который предоставляет директиву Angular, которую вы можете использовать для украшения таблицы фиксированными заголовками: https://github.com/objectcomputing/FixedHeader
Он полагается только на css и angular, с директивой, которая добавляет некоторые div. Не требуется jQuery.
Эта реализация не так полнофункциональна, как некоторые другие реализации, но если вам нужно просто добавить фиксированные таблицы, мы думаем, что это может быть хорошим вариантом.
источник
После двух дней борьбы с Internet Explorer 9 + Chrome + Firefox (Windows) и Safari (Mac) я нашел систему, которая
Результат:
HTML:
CSS:
источник
div.cost_center table{border-collapse: collapse;}
и третья подпись должна соответствовать 60 пикселей (в этом примере)Существующие ответы подойдут большинству людей, но для тех, кто хочет добавить тени под фиксированным заголовком и справа от первого (фиксированного) столбца, вот рабочий пример (чистый css):
http://jsbin.com/nayifepaxo/1/edit?html,output
Основная хитрость в том, чтобы заставить это работать, заключается
::after
в добавлении тени справа от каждой из первыхtd
в каждомtr
:Мне потребовалось время (слишком долго ...), чтобы все заработало, поэтому я решил, что поделюсь с теми, кто находится в подобной ситуации.
источник
Показать фрагмент кода
нужно исправить нижний колонтитул верхнего колонтитула
источник
Что-то вроде этого может сработать для вас ... Возможно, вам потребуется установить ширину столбцов для строки заголовка.
http://jsfiddle.net/vkhNC/
Обновить:
Я не уверен, что приведенный вами пример возможен только с использованием CSS. Я хотел бы, чтобы кто-нибудь доказал, что я неправ. Вот что у меня есть на данный момент . Это еще не законченный продукт, но он может стать для вас началом. Я надеюсь, что это укажет вам в полезном направлении, где бы это ни было.
источник
Другое решение - использовать AngularJS. В модуле AngularUI есть директива,
ng-grid
которая поддерживает функцию закрепления столбцов. Это не 100% чистый CSS, как и другие решения.http://angular-ui.github.io/ng-grid/#columnPinning
источник
Пример чистого CSS:
http://jsfiddle.net/cCarlson/L98m854d/
Недостаток: фиксированная структура / логика заголовка в значительной степени зависит от конкретных размеров, поэтому абстракция, вероятно, не является жизнеспособным вариантом .
источник
Position: sticky не работает для некоторых элементов, таких как (thead), в Chrome и других браузерах webkit, таких как safari.
Но он отлично работает с (th)
Или посетите мой пример кода :
источник
Думаю, это вам поможет: https://datatables.net/release-datatables/extensions/FixedHeader/examples/header_footer.html
Вкратце, если вы знаете, как создать dataTable, вам просто нужно добавить эту строку jQuery внизу:
bottom: true // для фиксации нижнего заголовка.
источник
Если вы хотите использовать только чистый HTML и CSS, у меня есть решение вашей проблемы:
в этом jsFiddle вы можете увидеть решение без сценария, которое предоставляет таблицу с фиксированным заголовком. Также не должно быть проблем адаптировать разметку для фиксированного первого столбца. Вам просто нужно создать таблицу с абсолютным позиционированием для первого столбца внутри
hWrapper
-div и переместитьvWrapper
-div.Предоставление динамического контента не должно быть проблемой при использовании заманчивых движков на стороне сервера или на стороне браузера, мое решение хорошо работает во всех современных браузерах и более старых браузерах, начиная с IE8.
источник
Просто нужно изменить стиль как
Демо: https://plnkr.co/edit/Qxy5RMJBXmkaJAOjBtQn?p=preview
источник