нужен липкий заголовок и нижний колонтитул, когда содержимое слишком велико

1 jb10210 [2012-03-20 14:41:00]

Я создал пользовательскую таблицу, используя div (было только решение из-за слишком сложного поведения). Но у меня проблема с заголовком и нижним колонтитулом.

Таблица html в основном проста:

<div class="table">
  <div class="header"></div>
  <div class="content"></div>
  <div class="footer"></div>
</div>

Мне нужно следующее: когда содержимое внутри таблицы не слишком велико для просмотра без полосы прокрутки, заголовок будет только сверху, а нижний колонтитул чуть ниже содержимого (поэтому он не будет прикреплен к нижней части контейнера).
Но когда содержимое таблицы расширяется (либо при загрузке страницы с новыми данными, либо путем расширения содержимого таблицы с помощью javascript/jQuery), мне нужно, чтобы заголовок находился в верхней части контейнера, а нижний колонтитул внизу контейнера, в то время как содержимое может прокручиваться без перекрытия верхнего/нижнего колонтитула.

Я много искал по этому поводу, но не нашел достойного решения, есть ли способ решить это (как можно проще) с помощью css и/или javascript/jquery?

Изменить Вот базовый пример того, что я имею в виду: jsFiddle

Если вы нажмете span в примере, верхний и нижний колонтитулы должны быть зафиксированы в верхней и нижней частях контейнера. Но как определить увеличение размера?

javascript jquery css footer sticky-footer


2 ответа


4 Решение Supr [2012-03-20 15:04:00]

.offset() + .scrollTop()= DISCO

В основном (jsfiddle demo):

function placeHeader(){ 
    var $table  = $('#table');  
    var $header = $('#header'); 
    if ($table.offset().top <= $(window).scrollTop()) {
        $header.offset({top: $(window).scrollTop()});
    } else { 
        $header.offset({top: $table.offset().top}); 
    }    
}

$(window).scroll(placeHeader);

Другими словами, если верх таблицы находится над scrollTop, тогда поместите заголовок на scrollTop, иначе верните его в верхнюю часть таблицы. В зависимости от содержимого остальной части сайта вам также может потребоваться проверить, прокручивается ли вы полностью за пределами таблицы, так как тогда вы не хотите, чтобы заголовок оставался видимым.

И не забывайте о $(window).height() для того, чтобы сделать то же самое с нижним колонтитулом.


0 austincheney [2012-03-20 14:48:00]

Это полное нарушение семантики языка, и в результате оно, вероятно, полностью разрушает всю доступность. Вместо этого используйте таблицу HTML.

<table id="mahTable" summary="some descriptive summary">
    <caption>This descriptive data visually appears outside your table.</caption>
    <thead>
        <tr><th>Header Cell</th><th>Other header cell</th></tr>
    </thead>
    <tbody>
        <tr><td>data 1</td><td>data 2</td></tr>
    </tbody>
    <tfoot>
        <tr><td colspan="2">footer here</td></tr>
    </tfoot>
</table>

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