2010-08-04 2 views
52

Я пытаюсь придумать способ сделать таблицу с фиксированным первым столбцом (и остальной частью таблицы с горизонтальным переполнением). Я видел сообщение, которое подобный вопрос. но бит фиксированного столбца, похоже, не был разрешен. Помогите?HTML-таблица с горизонтальной прокруткой (исправлена ​​первая колонка)

+0

I Я хотел бы немного расширить этот вопрос: мой друг хочет создать таблицу, которая не будет масштабироваться до более чем 100% страницы, но будет иметь более двух столбцов, которые вместе должны прокручиваться, если им нужно больше горизонтальное пространство, чем там является. По сути, это должно быть похоже на Frozen columns в MS Excel. Это возможно? –

+0

См. Мой ответ на аналогичный вопрос: http://stackoverflow.com/a/17557830/1763149 –

ответ

23

Я подобный стол в стиле так:

<table style="width:100%; table-layout:fixed"> 
    <tr> 
     <td style="width: 150px">Hello, World!</td> 
     <td> 
      <div> 
       <pre style="margin:0; overflow:scroll">My preformatted content</pre> 
      </div> 
     </td> 
    </tr> 
</table> 
+3

Этот ответ действительно выиграет от демонстрации здесь. –

+0

[JSFIDDLE demo] (https://jsfiddle.net/dx65qwa3/), чтобы было более ясно, что здесь происходит –

+6

Это только прокручивает одну ячейку ... – w00t

2

Посмотрите на это JQuery плагин:

http://fixedheadertable.com

Он добавляет вертикальный (фиксированная строка заголовка) или горизонтальный (фиксированный первый столбец), прокручивающийся до существующей таблицы HTML. Существует демо-версия, которую вы можете проверить для обоих случаев прокрутки.

+5

note: это зависит от устаревших функций в jquery и не обновляется с тех пор 1 год –

+0

@HaykSaakian Похоже, что проект сейчас обновляется? Говорит в этом году, и требуется версия jQuery версии 1.7. – Metropolis

9

Используйте плагин jQuery DataTables, он поддерживает фиксированный заголовок и столбцы. Этот пример добавляет поддержку фиксированного столбца в HTML таблице "пример":

http://datatables.net/extensions/fixedcolumns/

Для двух фиксированных столбцов:

http://www.datatables.net/release-datatables/extensions/FixedColumns/examples/two_columns.html

+2

Обе эти ссылки мертвы ... – Dave

+0

Фиксация столбцов левой стороны выполняется с использованием параметра инициализации leftColumns. Эта ссылка работает http://www.datatables.net/extensions/fixedcolumns/ (сегодня) – jpkeisala

95

Как насчет:

table { 
 
    table-layout: fixed; 
 
    width: 100%; 
 
    *margin-left: -100px; /*ie7*/ 
 
} 
 
td, th { 
 
    vertical-align: top; 
 
    border-top: 1px solid #ccc; 
 
    padding: 10px; 
 
    width: 100px; 
 
} 
 
.fix { 
 
    position: absolute; 
 
    *position: relative; /*ie7*/ 
 
    margin-left: -100px; 
 
    width: 100px; 
 
} 
 
.outer { 
 
    position: relative; 
 
} 
 
.inner { 
 
    overflow-x: scroll; 
 
    overflow-y: visible; 
 
    width: 400px; 
 
    margin-left: 100px; 
 
}
<div class="outer"> 
 
    <div class="inner"> 
 
    <table> 
 
     <tr> 
 
     <th class=fix></th> 
 
     <th>Col 1</th> 
 
     <th>Col 2</th> 
 
     <th>Col 3</th> 
 
     <th>Col 4</th> 
 
     <th class="fix">Col 5</th> 
 
     </tr> 
 
     <tr> 
 
     <th class=fix>Header A</th> 
 
     <td>col 1 - A</td> 
 
     <td>col 2 - A (WITH LONGER CONTENT)</td> 
 
     <td>col 3 - A</td> 
 
     <td>col 4 - A</td> 
 
     <td class=fix>col 5 - A</td> 
 
     </tr> 
 
     <tr> 
 
     <th class=fix>Header B</th> 
 
     <td>col 1 - B</td> 
 
     <td>col 2 - B</td> 
 
     <td>col 3 - B</td> 
 
     <td>col 4 - B</td> 
 
     <td class=fix>col 5 - B</td> 
 
     </tr> 
 
     <tr> 
 
     <th class=fix>Header C</th> 
 
     <td>col 1 - C</td> 
 
     <td>col 2 - C</td> 
 
     <td>col 3 - C</td> 
 
     <td>col 4 - C</td> 
 
     <td class=fix>col 5 - C</td> 
 
     </tr> 
 
    </table> 
 
    </div> 
 
</div>

Вы можете проверить его в этом jsbin: http://jsbin.com/uxecel/4/edit

+0

Простое, но эффективное решение по моему запросу! –

+0

Это в основном работает для меня, но я хотел бы начать с самых правых столбцов прокручиваемого div. Мои заголовки столбцов - это даты с самой последней датой справа, и я хотел бы, чтобы это было видно, когда сначала отображается

. Есть ли способ сделать это программно? Есть ли способ программно перемещать горизонтальную полосу прокрутки в любом направлении?Я хотел бы иметь всегда доступные кнопки прокрутки влево и «прокрутить вправо» в верхней части таблицы, так как поддерживаемая браузером полоса прокрутки находится внизу и не всегда сразу видна. – Kras

+0

Epic. Сохраняет большую производительность в больших таблицах! –

3

на основе подхода skube, я обнаружил, что минимальный набор CSS мне было нужно:

.horizontal-scroll-except-first-column { 
    width: 100%; 
    overflow: auto; 
    margin-left: 20em; 
} 

.horizontal-scroll-except-first-column > table > * > tr > th:first-child, 
.horizontal-scroll-except-first-column > table > * > tr > td:first-child { 
    position: absolute; 
    width: 20em; 
    margin-left: -20em; 
} 

.horizontal-scroll-except-first-column > table > * > tr > th, 
.horizontal-scroll-except-first-column > table > * > tr > td { 
    /* Without this, if a cell wraps onto two lines, the first column 
    * will look bad, and may need padding. */ 
    white-space: nowrap; 
} 

с HTML:

<div class="horizontal-scroll-except-first-column"> 
    <table> 
     ... 
    </table> 
</div> 
+0

Отличный и понятный, приятный – Ced