【问题标题】:need sticky header and footer when content is too large内容太大时需要粘性页眉和页脚
【发布时间】:2012-04-04 21:03:46
【问题描述】:

我使用div's 创建了一个自定义表(由于行为过于复杂,这是唯一的解决方案)。但是我的页眉和页脚有问题。

html基本简单:

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

我需要的是以下内容:当表格内的内容不是太大而无法在没有滚动条的情况下查看时,页眉将位于顶部,页脚位于内容下方(因此不会粘在容器的底部)。
但是当表格的内容扩展时(在页面加载新数据或通过使用javascript/jQuery 扩展某些表格内容)我需要将页眉粘贴在容器顶部,将页脚粘贴在底部容器,而内容可以滚动而不重叠页眉/页脚。

我对此进行了很多搜索,但没有找到合适的解决方案,有没有办法使用css 和/或javascript/jquery 来解决这个问题(尽可能简单)?

编辑 这是我的意思的基本示例:jsFiddle

如果单击示例中的span,页眉和页脚应该固定在容器的顶部和底部。但是如何检测尺寸的增加?

【问题讨论】:

  • 你可以position:fixed使用css的页眉和页脚。找到高度 div.content 比使用 jquery 在这个 Div 上给定滚动。
  • @Jigs 因为表格可以放置在页面内的任何位置并且内容可以动态扩展(因此滚动条的显示不会触发scroll event),我看不出这有什么帮助。如何“捕捉”内容的大小调整?
  • 正在寻找这样的东西:jsfiddle.net/kCZPF/7
  • 这可能会给你一个想法jsfiddle.net/8BcPp/1 抱歉,它的 mootools 没有开始使用 jquery,但我想我可以试试。
  • 计时器通过定期比较 offsetHeight 和 scrollHeights 来检查是否需要滚动,我看到您的示例添加/删除了更多内容,我只是调整了浏览器的大小以强制内容增长,但是我更新了小提琴jsfiddle.net/8BcPp/2

标签: javascript jquery css footer sticky-footer


【解决方案1】:

这完全违反了语言的语义,因此它可能会完全破坏所有可访问性。请改用 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,然后再找出演示文稿。如果您在解决内容的需求或结构之前就忙于演示,那么您的演示很可能会失败。

【讨论】:

  • 感谢您的输入,但表格的内容包含不同(也太复杂)的“内部表格”,重叠的单元格/行太多,并且具有不同的动画显示隐藏功能(所有需要和讨论的规格的应用程序),这导致决定使用基于div 的表而不是标准表。 (通常我会全部使用标准表)
【解决方案2】:

.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() 对页脚也做了同样的事情。

【讨论】:

  • 我明白你的意思,但是如何动态检测大小的变化?有关我的意思的示例,请参阅我更新的问题。 (PS 我没有投反对票)
  • 我不知道有任何直接的方法来检测大小的变化。最好是在每个可能更改表的操作之后调用placeHeader(),例如$(this).next().toggle(0,placeHeader);。一个不太优雅但更简单的解决方案是定期调用placeHeader()setInterval(placeHeader,100);。如果你真的需要检测尺寸变化,那么你可以使用setInterval来监控当前高度并与之前的高度进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 2012-06-02
  • 2016-01-17
  • 1970-01-01
  • 2012-12-28
  • 2012-08-15
相关资源
最近更新 更多