您可能已经知道,position: sticky;
已经在Webkit中实现(演示)。
到目前为止,我所看到的是它只在父元素内起作用。但我想知道是否可以在带有表格的滚动
因此,它需要在
我知道我可以使用JavaScript和绝对定位来实现这一点,但我想知道sticky-positioning
是否支持此功能。
在2018年,thead th上的position sticky可行!
只需在样式表中添加这一行:
thead th { position: sticky; top: 0; }
为了使样式生效,您的表格需要包括thead和th。
<table>
<thead>
<tr>
<th>column 1</th>
<th>column 2</th>
<th>column 3</th>
<th>column 4</th>
</tr>
</thead>
<tbody>
// your body code
</tbody>
</table>
另外,如果在 thead 中有多行数据,你可以选择第一行来保持粘性:
thead tr:first-child th { position: sticky; top: 0; }
thead
元素内为 td
元素设置 position: sticky; top: some_value
(top
属性是必需的)。<table border=1>
<thead>
<tr>
<td style='position: sticky; top: -1px;background: red'>Sticky Column</td>
<td>Simple column</td>
</tr>
</thead>
thead th {position: sticky; top: 0;}
。 - ctf0position: sticky
对我无效。添加 top
规则完美地解决了问题! - Suhasposition: sticky
在表格元素上不起作用(只要它们的display
属性以table-
开头),因为表格不属于规范的一部分:
其他类型的布局,例如表格、"浮动"框、Ruby注释、网格布局、列和正常"流"内容的基本处理,在其他模块中描述。
编辑:截至2019年7月,根据https://caniuse.com/#feat=css-sticky,Firefox支持此功能,Chrome至少支持<th>
标签。
thead
元素上的position: sticky
。根据我的测试,Windows上的Firefox 69会彻底搞砸它,忽略背景颜色,但不忽略文本颜色(导致标题完全无法阅读),并在滚动时随机使元素出现和消失。 Webkit目前不支持thead
的这种方式,将其视为position: static
(或相对位置-不确定差异是否真正有意义)。 - Janus Bahs Jacquettable.StickyHeader thead {
position: sticky;
top: 0px;
}
测试通过:
Edge 105.0.1343.42, Firefox 105.0, Chrome 105.0.5195.127, Opera 91.0.4516.16
但是,当 thead 的位置设置为 sticky 且 th 具有背景颜色时,Firefox 无法呈现 th 的边框:
table.StickyHeader th {
border: 1px solid black;
padding: 5px;
background-color: gold;
text-align: center;
}
该内容与编程有关。事实证明,position: sticky
只能在窗口中使用,而不能在滚动的 div 中使用。
我创建了一个带有表头的非常长的表格的测试案例:
h1 {
font-size: 18px;
font-weight: bold;
margin: 10px 0;
}
div.testTable {
height: 200px;
overflow: auto;
}
table.stickyHead thead {
position: -webkit-sticky;
top: 0px;
background: grey;
}
table.stickyHead td,
table.stickyHead th {
padding: 2px 3px;
}
<h1>Position sticky</h1>
<div class="testTable">
<table class="stickyHead">
<thead>
<tr>
<th>column 1</th>
<th>column 2</th>
<th>column 3</th>
<th>column 4</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
</tbody>
</table>
</div>
如您所见,如果从包装器中移除溢出并使窗口不那么高,表头将粘在窗口顶部。即使您为包装的 div
设置了 position: relative
,也不适用于它。
position:sticky
的支持)。当前支持情况请参见http://caniuse.com/#feat=css-sticky。 - czerny-webkit-
前缀从位置中删除,并将位置设置在th上,而不是thead上:http://jsfiddle.net/xNsaM/128/ 。很好地解决了问题。 - Conor Mancone注意:
position:sticky
在2019年已经不能在Google Chrome中使用,建议改用fixed
或display:inline-block
top:0
,后续行分别设为top:20px
、top:40px
等。这会极大地降低开发体验。 - arossoverflow:visible
。对于父元素的hidden
和auto
属性,Sticky
是 无效的。 - Nux