纯css实现table固定首行、首列以及最后一列冻结
postion的sticky粘性定位
粘性定位可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。
sticky元素会“固定”在离它最近的一个拥有“滚动机制”的祖先上(当该祖先的overflow是hidden、scroll、auto、overlay时),即便这个祖先不是最近的真实可滚动祖先。
table-layout的fixed
table-layout css属性定义了用于布局表格单元格,行和列的算法。值可以是:auto、fixed。
auto
表格和单元格的宽度取决于其包含的内容。
fixed
表格宽度通过表格的宽度来设置,某一列的宽度仅由该列首行的单元格决定,其他行单元格的宽度不会影响整列的宽度。
分析:在表格中,某些列需要指定不同的宽度,所以表格的table-layout css属性需要设置为fixed。
页面代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .table_wrap { width: 100%; height: 100px; overflow: auto; border-bottom:1px solid #61dafb; } table { table-layout: fixed; width: 100%; border-collapse: separate; border-spacing: 0; border: 1px solid #DDDDDD; } /* 表格th/td样式 */ td,th { width: 150px; box-sizing: border-box; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; /*超出长度...*/ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; height: 30px; } /* 表头固定 */ thead tr th { position: sticky; top: 0; background: #F4F4F5; height: 30px; } /* 首列固定/最后一列固定*/ th:first-child, th:last-child, td:first-child, td:last-child { position: sticky; left: 0; background: #F4F4F5; text-align: center; right: 0px; border-left: 1px solid #DDDDDD ; width: 100px; } /* 表头首列和最后一列强制最顶层 */ th:last-child, th:first-child { z-index: 3; /*左上角单元格z-index,切记要设置,不然表格纵向横向滚动时会被该单元格右方或者下方的单元格遮挡*/ background: #F4F4F5; } </style> </head> <body> <div className="table_wrap"> <table> <thead> <tr> <th>序号</th> <th>栏目1</th> <th>栏目2</th> <th>栏目3</th> <th>栏目4</th> <th>操作</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>2</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>3</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>4</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>5</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>6</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>7</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>8</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>9</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>10</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>11</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>12</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>13</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>14</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>15</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>16</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>17</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>18</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>19</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>20</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>21</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>22</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>23</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>24</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>25</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>26</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>27</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> <tr> <td>28</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td><a href="#">修改</a></td> </tr> </tbody> </table> </div> </body> </html>
效果图
作者:IT民工郑小江
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!