固定表格标题仅滚动水平和垂直CSS

时间:2016-03-15 14:57:36

标签: html css html5 css3 scroll

首先,是否可以仅使用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;
}

1 个答案:

答案 0 :(得分:2)

这是W3C无所作为带来的另一个有趣的挑战(如垂直居中)。与垂直居中一样,您无法使用position: fixed;元素上的thead将固定标题放在带有水平滚动条的表格上。但你确实有几个选择。

选项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,并详细解释了所有复杂的操作以实现这一目标。