当前位置: 首页 > 面试题库 >

具有固定标题的纯CSS滚动表

缪阎宝
2023-03-14
问题内容

我有一个解决方案,可以使用较小的jQuery和CSS创建带有固定页眉/页脚的可滚动表-但我正在寻找一种方法,使之成为跨浏览器兼容的仅CSS解决方案。

需要明确的是,我所寻求要做的是使用 只有
一个table标签(和它是有效的子标签,colgroupcoltheadtbodytfoottrthtd),而是采用了一套将符合下列条件的CSS规则:

  1. 必须保持页眉/页脚/内容行之间的列对齐
  2. 当内容垂直滚动时,必须允许页眉/页脚保持固定
  3. 不得使用任何jQuery或其他JavaScript来提供功能
  4. 必须仅使用上面提供的标签

此代码示例:http :
//jsfiddle.net/TroyAlford/SNKfd/显示了我当前的方法。大部分JS只是用随机值填充表,但最后一部分是驱动左右滚动的因素。

$tbody.bind('scroll', function(ev) {
    var $css = { 'left': -ev.target.scrollLeft };
    $thead.css($css);
    $tfoot.css($css);
});

注意:提供的示例无法在IE中正确呈现,并且需要jQuery提供水平滚动。无论如何,我都不在乎水平滚动,所以如果解决方案不这样做就很好。


问题答案:

该答案将用作不完全支持的占位符position: sticky,并将随着时间的推移而更新。当前建议不要在生产环境中使用本机实现。

有关当前支持,请参见此:https :
//caniuse.com/#feat=css-sticky

用于 position: sticky

另一种答案是使用position: sticky。如W3C所述:

粘性放置的框的位置类似于相对放置的框,但偏移量是使用滚动框参照最近的祖先,如果没有祖先具有滚动框,则参照视口进行计算。

这恰好描述了相对静态头的行为。将其分配给<thead>或第一个<tr>HTML标签将很容易,因为W3C应当支持此标签。但是,Chrome,IE和Edge都无法为这些标签分配粘性位置属性。目前,解决这一问题似乎也没有优先考虑。

对于表格元素似乎起作用的是将sticky属性分配给表格单元。在这种情况下,<th>单元格。

因为表不是尊重您为其分配的静态大小的块元素,所以最好使用 包装器元素 来定义滚动溢出。

编码

div {

  display: inline-block;

  height: 150px;

  overflow: auto

}



table th {

  position: -webkit-sticky;

  position: sticky;

  top: 0;

}





/* == Just general styling, not relevant :) == */



table {

  border-collapse: collapse;

}



th {

  background-color: #1976D2;

  color: #fff;

}



th,

td {

  padding: 1em .5em;

}



table tr {

  color: #212121;

}



table tr:nth-child(odd) {

  background-color: #BBDEFB;

}


<div>

  <table border="0">

    <thead>

      <tr>

        <th>head1</th>

        <th>head2</th>

        <th>head3</th>

        <th>head4</th>

      </tr>

    </thead>

    <tr>

      <td>row 1, cell 1</td>

      <td>row 1, cell 2</td>

      <td>row 1, cell 2</td>

      <td>row 1, cell 2</td>

    </tr>

    <tr>

      <td>row 2, cell 1</td>

      <td>row 2, cell 2</td>

      <td>row 1, cell 2</td>

      <td>row 1, cell 2</td>

    </tr>

    <tr>

      <td>row 2, cell 1</td>

      <td>row 2, cell 2</td>

      <td>row 1, cell 2</td>

      <td>row 1, cell 2</td>

    </tr>

    <tr>

      <td>row 2, cell 1</td>

      <td>row 2, cell 2</td>

      <td>row 1, cell 2</td>

      <td>row 1, cell 2</td>

    </tr>

    <tr>

      <td>row 2, cell 1</td>

      <td>row 2, cell 2</td>

      <td>row 1, cell 2</td>

      <td>row 1, cell 2</td>

    </tr>

  </table>

</div>

在此示例中,我使用一个简单的<div>包装器来定义滚动高度(静态高度为)150px。当然可以是任何大小。现在已经定义了滚动框,粘性<th>元素将“与滚动框最靠近的祖先”作为核心。

使用position: sticky polyfill

不支持的设备可以使用polyfill,该polyfill通过代码实现行为。粘性位就是一个例子,它的行为类似于浏览器的实现position: sticky

polyfill的示例: http :
//jsfiddle.net/7UZA4/6957/



 类似资料:
  • 我有一个解决方案,通过它,我可以使用minor jQuery和CSS创建带有固定页眉/页脚的可滚动表,但我正在寻找一种方法,使其成为唯一一个跨浏览器兼容的CSS解决方案。 明确地说,我想要做的是只使用一个标记(它是有效的子标记,,,,,,,,),但采用一组满足以下条件的CSS规则: 必须在页眉/页脚/内容行之间保持列对齐 必须允许页眉/页脚在内容垂直滚动时保持固定 必须不需要任何jQuery或其他

  • 问题内容: 是否有跨浏览器的CSS / JavaScript技术来显示较长的HTML表,以使列标题在屏幕上保持固定并且不随表主体滚动。考虑一下Microsoft Excel中的“冻结窗格”效果。 我希望能够滚动浏览表的内容,但始终能够看到顶部的列标题。 问题答案: 一段时间以来,我一直在寻找解决方案,但发现大多数答案都不起作用或不适合我的情况,因此我用jQuery写了一个简单的解决方案。 这是解决

  • 问题内容: 我需要在网页上显示一个大表,并且需要防止第一列和第一行滚动。 我想动态设置此表的垂直大小(在某些静态大小的页眉/页脚页面内容之间),以使其尽可能高,而不必强制浏览器窗口具有垂直滚动条。 这仅需要在使用所有/任何版本的现代浏览器中工作:html,css,javascript,jquery 重要顺序: 具有许多表单字段,隐藏值,行的javascript折叠等的复杂表,稍后将添加 第一行将有

  • 问题内容: 我一直在寻找一种仅使用CSS3单击位于页面顶部的按钮时向下滚动的方法。 但这对于我的需求而言有点太先进了,因为我只希望浏览器单击页面顶部的一个按钮即可向下滚动,所以我想知道:是否可以在没有输入按钮的情况下进行那些CSS滚动,有锚标签? HTML看起来像这样: 我已经有一些CSS,需要在单击按钮时触发: 问题答案: 您可以使用css3 伪选择器使用锚标记来完成此操作,当与当前URL哈希具

  • 我一直在努力解决HTML/CSS粘滞头+滚动条的问题。我们正在创建一个程序,一旦containersize达到某个点(取决于用户的分辨率),就需要滚动条显示出来。 我在表中的第二列上强制设置一个min-width,因此表在某个点停止递减,并强制容器保持在某个宽度。容器上的溢出显示水平滚动条。一切正常。一旦我为垂直滚动添加了第二个滚动条,事情就会变得一团糟。有人有解决这个问题的办法吗?我想在.tab

  • 我有一个PrimeFaces dataTable,我想让它的头是可滚动的。我将嵌入一个图像到头,所以当内容向下滚动时,图像应该消失。代码看起来像;