Я пишу страницу, где мне нужна таблица HTML для поддержания заданного размера. Мне нужны заголовки в верхней части таблицы, чтобы они всегда оставались там, но мне также нужно прокручивать тело таблицы независимо от того, сколько строк добавлено в таблицу. Вспомните мини-версию Excel. Это кажется простой задачей, но почти каждое решение, которое я нашел в Интернете, имеет некоторый недостаток. Как я могу решить это?
javascript
html
css
html-table
мятный
источник
источник
Ответы:
Я должен был найти тот же ответ. Лучший пример, который я нашел, это http://www.cssplay.co.uk/menu/tablescroll.html - я обнаружил, что пример №2 хорошо сработал для меня. Вам придется установить высоту внутренней таблицы с помощью Java Script, остальное - CSS.
источник
Я нашел DataTables довольно гибким. Хотя его версия по умолчанию основана на jquery, есть также плагин AngularJs .
источник
Я увидел отличное решение Шона Хэдди для подобного вопроса и позволил себе внести некоторые изменения :
aria-hidden="false"
Шон сделал тяжелую работу, хотя. Спасибо Мэтту Берленду за то, что он указал на необходимость поддержки tfoot.
Пожалуйста, убедитесь сами на http://jsfiddle.net/jhfrench/eNP2N/
источник
Вы пробовали использовать thead и tbody и устанавливать фиксированную высоту на tbody с помощью overflow: scroll?
Какие у вас целевые браузеры?
РЕДАКТИРОВАТЬ: Это работало хорошо (почти) в Firefox - добавление вертикальной полосы прокрутки также вызвало необходимость горизонтальной полосы прокрутки - гадость. IE просто устанавливает высоту каждого td на то, что я указал высоту tbody. Вот лучшее, что я мог придумать:
источник
overflow-x: hidden;
аoverflow-y: auto
также помочь.Что вам нужно это:
1) иметь тело таблицы ограниченной высоты, поскольку прокрутка происходит только тогда, когда содержимое больше, чем окно прокрутки. Однако
tbody
размер не может быть измерен, и вы должны отобразить его какblock
:2) Повторно синхронизируйте ширину столбцов заголовка таблицы и тела таблицы, так как создание последнего
block
элемента a сделало его несвязанным элементом. Единственный способ сделать это - симулировать синхронизацию, применяя одинаковую ширину столбцов к обоим .Тем не менее, так как
tbody
сам по себе являетсяblock
сейчас, он больше не может вести себя какtable
. Поскольку вам все еще нужноtable
поведение для правильного отображения ваших столбцов, решение состоит в том, чтобы запросить отображение каждой из ваших строк в виде отдельныхtable
s:(Обратите внимание, что, используя эту технику, вы больше не сможете охватывать строки).
Как только это сделано, вы можете применять ширину столбцов , чтобы иметь такую же ширину , как
thead
иtbody
. Вы не могли этого:th, td { width: 20%; }
если у вас есть 5 столбцов), что более практично (нет необходимости устанавливать ширину для каждого экземпляра таблицы), но не может работать для любого количества столбцовЯ предпочитаю последний вариант, который требует добавления:
Смотрите демо здесь , разветвленный от ответа на этот вопрос .
источник
Изменить: Это очень старый ответ, и он здесь для процветания, просто чтобы показать, что он был когда-то поддержан еще в 2000-х годах, но отброшен, потому что стратегия браузеров в 2010-х годах заключалась в соблюдении спецификаций W3C, даже если некоторые функции были удалены: Таблица с прокруткой и фиксированным заголовком / Нижний колонтитул был неуклюже указан до HTML5.
Плохие новости
К сожалению, не существует элегантного способа обработки прокручиваемой таблицы с фиксированным
thead
/,tfoot
потому что спецификации HTML / CSS не очень ясны в отношении этой функции .Пояснения
Хотя спецификация HTML 4.01 гласит
thead
/tfoot
/tbody
используются (представлены?) Для прокрутки тела таблицы:Но функция рабочей прокручиваемой таблицы в FF 3.6 была удалена в FF 3.7, потому что считается ошибкой, потому что не соответствует спецификациям HTML / CSS. Смотрите это и это комментирует ошибки FF.
Совет разработчиков сети Mozilla
Ниже приведена упрощенная версия полезных советов по MDN для прокручиваемой таблицы,
см. Эту архивную страницу или текущую версию на французском языке.
Однако MDN также говорит, что это больше не работает на FF :-(
Я также проверил на IE8 => таблица также не прокручивается: - ((
источник
Не уверен, что кто-то все еще смотрит на это, но тот способ, которым я делал это ранее, состоит в том, чтобы использовать две таблицы для отображения одной исходной таблицы - первую - просто строку заголовка исходной таблицы и никаких строк тела таблицы (или пустую строку тела для это подтверждают).
Второй находится в отдельном элементе div и не имеет заголовка и содержит только исходные строки тела таблицы. Затем отдельный div становится прокручиваемым.
Вторая таблица в ее div расположена чуть ниже первой таблицы в HTML и выглядит как отдельная таблица с фиксированным заголовком и прокручиваемой нижней частью. Я проверял это только в Safari, Firefox и IE (последние версии каждой из них весной 2010 года), но он работал во всех из них.
Единственной проблемой было то, что первая таблица не будет проверяться без тела (валидатор W3.org - строгий XHTML 1.0), а когда я добавляю таблицу без содержимого, она вызывает пустую строку. Вы можете использовать CSS, чтобы сделать это невидимым, но оно все равно будет занимать место на странице.
источник
display: none;
, если вы не имеете в виду пространство в источнике ..?Это решение работает в Chrome 35, Firefox 30 и IE 11 (другие версии не тестировались)
Его чистый CSS: http://jsfiddle.net/ffabreti/d4sope1u/
Все настроено на отображение: блок, столу нужна высота:
источник
Это вызвало у меня огромную головную боль, пытаясь реализовать такую сетку для нашего приложения. Я испробовал все различные техники, но у каждого из них были проблемы. Самое близкое, что я нашел, - это использование плагина jQuery, такого как Flexigrid (см. Http://www.ajaxrain.com). альтернативы можно ), но, похоже, он не поддерживает таблицы шириной 100%, что мне и было нужно.
То, что я в итоге делал, катало меня; Firefox поддерживает
tbody
элементы прокрутки, поэтому я просматривал браузер и использовал соответствующий CSS (настройку высоты, переполнение и т. Д., Спрашиваю, хотите ли вы больше подробностей), чтобы сделать эту прокрутку, а затем для других браузеров я использовал две отдельные таблицы, настроенные на использованиеtable-layout: fixed
которые используют размер алгоритм, который гарантированно не переполняет указанный размер (обычные таблицы будут расширяться, когда содержимое слишком широкое, чтобы уместиться). Придав обеим таблицам одинаковую ширину, я смог выстроить их столбцы. Я обернул второй в наборе элементов для прокрутки, и немного поиграв в покер с полями и т. Д. Мне удалось получить тот внешний вид, который я хотел.Извините, если этот ответ звучит немного расплывчато; Я пишу быстро, потому что у меня мало времени. Оставьте комментарий, если вы хотите, чтобы я расширил его дальше!
источник
Вот код, который действительно работает для IE и FF (по крайней мере):
Я изменил исходный код, чтобы сделать его более понятным, а также чтобы он работал нормально в IE и FF.
Оригинальный код ЗДЕСЬ
источник
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Вот моя альтернатива. Он также использует различные DIV для заголовка, тела и нижнего колонтитула, но синхронизируется для изменения размера окна и с поиском, прокруткой, сортировкой, фильтрацией и позиционированием:
Мои списки CD
Нажмите на кнопки Jazz, Classical ..., чтобы увидеть таблицы. Он настроен так, что он адекватен, даже если JavaScript отключен.
Кажется, хорошо на IE, FF и WebKit (Chrome, Safari).
источник
Извините, я не прочитал все ответы на ваш вопрос.
Да, здесь то, что вы хотите (я уже сделал)
Вы можете использовать две таблицы с одинаковыми именами классов для одинакового стиля: одна только с заголовком таблицы, а другая с вашими строками. Теперь поместите эту таблицу в div с фиксированной высотой с помощью overflow-y: auto OR scroll.
источник
Основная проблема, с которой я столкнулся в связи с приведенными выше предложениями, заключалась в том, чтобы подключить tablesorter.js и иметь возможность перемещать заголовки для таблицы, ограниченной определенным максимальным размером. Я в конце концов наткнулся на плагин jQuery.floatThead, который предоставил плавающие заголовки и позволил сортировке продолжать работать.
У этого также есть хорошая страница сравнения, показывающая себя против подобных плагинов .
источник
Live JsFiddle
Это возможно только с HTML и CSS
источник
Если это нормально - использовать JavaScript, вот мое решение. Создайте таблицу фиксированной ширины для всех столбцов (пикселей!), Добавьте в таблицу класс Scrollify и добавьте этот javascript + jquery 1.4.x set height в css или style!
Протестировано в: Opera, Chrome, Safari, FF, IE5.5 ( сбой Epic script ), IE6, IE7, IE8, IE9
Редактировать: Фиксированная высота.
источник
Я делаю это с помощью JavaScript (без библиотеки) и CSS - тело таблицы прокручивается со страницей, и таблица не должна быть фиксированной ширины или высоты, хотя каждый столбец должен иметь ширину. Вы также можете продолжить сортировку.
В принципе:
В HTML создайте элементы div контейнера, чтобы расположить строку заголовка таблицы и тело таблицы, а также создайте div «mask», чтобы скрыть тело таблицы при ее прокрутке за заголовком.
В CSS преобразуйте части таблицы в блоки
В Javascript, получить ширину таблицы и соответствовать ширине маски ... получить высоту содержимого страницы ... измерить положение прокрутки ... манипулировать CSS, чтобы установить положение строки заголовка таблицы и высоту маски
Вот javascript и демонстрационная версия jsFiddle.
источник
Для меня ничего, связанного с прокруткой, действительно не работало, пока я не убрал ширину из таблицы CSS. Изначально таблица CSS выглядела так:
Как только я убрал ширину: 100%; все функции прокрутки начали работать.
источник
Если у вас достаточно низкие стандарты;) вы можете разместить таблицу, которая содержит только заголовок, прямо над таблицей, которая имеет только тело. Он не будет прокручиваться горизонтально, но если вам это не нужно ...
источник