【问题标题】:Fixed table header scroll both horizontal and vertical CSS ONLY固定表头滚动水平和垂直 CSS 仅
【发布时间】:2016-03-15 14:57:35
【问题描述】:

首先,是否可以仅使用 CSS 来实现?

我已经建立了一个可以水平和垂直滚动的表格,但是,我希望将标题封装在它的容器中,而不是出现在包装器之外。这样,当您水平滚动时,相应的标题与指定列的内容一致。

使用position: absoluteposition: static 的不同变体会给我一些预期的结果,但不是完整的解决方案。

您会注意到应用于section 元素的宽度,以产生在封闭区域内水平滚动的效果。

这是我目前所拥有的 JSFIDDLE 示例以及下面要参考的 CSS

https://jsfiddle.net/ko6qco1r/

html, body{
  margin:0;
  padding:0;
  height:100%;
}
section {
  position: relative;
  border: 1px solid #000;
  padding-top: 37px;
  background: grey;
  width: 300px;
}

.container {
  overflow-y: auto;
  overflow-x: scroll;
  height: 200px;
}
table {
  border-spacing: 0;
  width:100%;
}
td + td {
  border-left:1px solid #eee;
}
td, th {
  border-bottom:1px solid #eee;
  background: white;
  color: #000;
  padding: 10px 25px;
}
th {
  height: 0;
  line-height: 0;
  padding-top: 0;
  padding-bottom: 0;
  color: transparent;
  border: none;
  white-space: nowrap;
}
th div{
  position: absolute;
  background: transparent;
  color: #fff;
  padding: 9px 25px;
  top: 0;
  margin-left: -25px;
  line-height: normal;
  border-left: 1px solid black;
}
th:first-child div{
  border: none;
}

【问题讨论】:

  • 表头卡在原地,是什么问题?
  • 已编辑 - 我希望将标头封装在它的容器中,而不是出现在包装器之外。这样当您水平滚动时,相应的标题与它指定列的内容一致。

标签: html css scroll


【解决方案1】:

这是 W3C 的不作为给我们带来的另一个有趣挑战(如垂直居中)。也像垂直居中一样,您不能在带有水平滚动条的表格上放置一个固定的标题,在thead 元素上使用position: fixed;。但是您确实有几个选择。

选项 1 - 水平滚动 (http://codepen.io/staypuftman/pen/JXbpvZ)

这里的关键是将您的表格布局重新建立为table-layout: fixed;CSS-tricks has a good piece on this approach,然后在您希望滚动条出现时在您的容器上放置一个min-width 值。这使得表格可以从左到右滚动,并在较小的设备上保持列标题的完整性。但标题不固定。

选项 2 - 固定标题 (https://jsfiddle.net/dPixie/byB9d/3/light/)

您的代码看起来像是抄袭了这个人的工作,所以我想我会在这里重新发布以表扬他。这种方法创建了一系列 <div> 元素,这些元素反映了 <th> 元素的内容,并使用了一些非常有创意的定位技术来让它们发挥作用。

Salzar design 上有一个更好的概要,其中显示了一些 examples,并详细解释了所有复杂的操作以使其正确。

【讨论】:

  • 感谢您的帮助,遗憾的是,这就是我已经达到的目标 - 由企业决定他们想要做什么。至于翻录那些人的代码是的,我是为了一个例子而做的——我的实际代码与他的实现不同,因为我的表格有一个固定的左列,它的完成方式不同,所以谢谢你注意到这一点。
  • 别担心——我想你就是这样学习的,至少我是这样的。糟糕的业务需求是我们所有人都必须忍受的——继续战斗。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 2015-02-15
  • 2019-09-26
  • 2012-06-10
相关资源
最近更新 更多