首先,是否可以仅使用CSS实现此目的?
我已经构建了一个可以水平和垂直滚动的表,但是,我希望将头封装在它的容器中,而不是出现在包装器之外。因此,当您水平滚动时,相应的标题与其指定列的内容一致。
使用position: absolute
和position: 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;
}
答案 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,并详细解释了所有复杂的操作以实现这一目标。