Як визначити висоту таблиці таким чином, щоб з’явилася вертикальна смуга прокрутки?


100

На своїй сторінці у мене є таблиця з багатьма рядками. Я хотів би встановити висоту таблиці, скажімо, для 500px, так що якщо висота таблиці більша за цю, з'явиться вертикальна смуга прокрутки. Я намагався використовувати heightатрибут CSS на table, але це не працює.


1
Можливо, використовувати max-heightзамість того, heightяк останній змусить висоту столу бути500px
Фред

1
Можливо, ви захочете задати друге запитання щодо запобігання прокручування рядка заголовка. ;)
Білл Бінгем

Відповіді:


173

Спробуйте скористатися overflowвластивістю CSS. Існують також окремі властивості для визначення поведінки просто горизонтального переливу ( overflow-x) та вертикального переливу ( overflow-y).

Оскільки вам потрібна лише вертикальна прокрутка, спробуйте це:

table {
  height: 500px;
  overflow-y: scroll;
}

Редагувати:

Мабуть, <table>елементи не поважають overflowвластивість. Це, мабуть, тому, що <table>елементи не відображаються display: blockза замовчуванням (вони фактично мають власний тип відображення). Ви можете змусити overflowвластивість працювати, встановивши <table>елемент типу блоку:

table {
  display: block;
  height: 500px;
  overflow-y: scroll;
}

Зауважте, що це призведе до того, що елемент матиме 100% ширину, тому якщо ви не хочете, щоб він займав всю горизонтальну ширину сторінки, вам також потрібно вказати явну ширину для елемента.


3
Однак це не обмежує висоту.
Фред

6
Ні, це так, вам просто потрібно display:blockна столі, щоб він поводився як div jsfiddle.net/TSGSA/1
Фред

2
@Fred: Великі розуми думають однаково. Я оновив свою відповідь, поки ви коментували. :)
AgentConundrum

1
Ця відповідь мені справді допомогла, але замість того, щоб застосувати її до тегу таблиці, це слід зробити tbody, щоб заголовок залишався статичним під час прокрутки. Тоді є декілька стилів, щоб розібратися щодо області в теді, що знаходиться над смужкою прокрутки.
Девід

7
Якщо ви збираєтеся використовувати це на tbody, переконайтесь, що ви додали display: block до thead (і, мабуть, tfoot), інакше вони можуть трохи зійти з розуму. Проблема, здається, полягає в тому, що, коли ви це зробите, ви порушили зв’язок між тедом і тілом: стовпці перших не знають про ширину останнього. Тож ви проклеюєте це і вниз по слизькому схилу, який ви йдете. "Я вмер за красу ..."
Cuse70

59

Вам потрібно обернути таблицю всередині іншого елемента і встановити висоту цього елемента. Приклад з вбудованим css:

<div style="height: 500px; overflow: auto;">
 <table>
 </table>
</div>

9
Це не дозволить утримувати теда на місці, поки тіло прокручується.
Девід

21
Ця вимога відсутня в первісному питанні.
Темний сокіл

2
Крім того, інша (прийнята) відповідь також не утримує теду на місці.
Брок Адамс

Ви все ще можете зробити так, що за допомогою цього методу з'являється заголовок. Ви ховаєте заголовок таблиці, а потім створюєте другу таблицю над першою таблицею, в якій є заголовок. Потім сформулюйте обидві таблиці, щоб вони мали display:table;свої рядки, display:table-row;а їхні комірки мали, display:table-cell;і дві таблиці збігатимуться і, здається, будуть одна. (ПРИМІТКА: це не працює з дуже великими таблицями; в основному він відповідає їм, коли може. Я використовував цю техніку кілька разів.)
levininja

1
Звичайно. Розмір батьків повинен бути вказаний, щоб використовувати відносні розміри. Наприклад: jsfiddle.net/hz8wy
Темний сокіл

1

щоб встановити висоту таблиці, потрібно спочатку встановити властивість css "display: block", потім ви можете додати властивості "width / height". Я вважаю цю статтю Mozilla дуже гарним ресурсом для того, щоб навчитися стилювати таблиці: Посилання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.