使用 HTML 和 CSS 创建带有粘性标题和冻结列的可滚动表
表格是 Web 应用程序中显示结构化数据的基础。添加可滚动标题和冻结(粘性)列等功能可以使表格更加用户友好。在本文中,我们将探讨如何使用纯 HTML 和 CSS 创建带有粘性标题和冻结左列的表格。
CodePen 示例
要查看代码的实际效果,请查看 CodePen 上的实例:
此代码示例使用 JS 类来制作表格。您可以使用您选择的任何框架或库来复制此代码。
表格的主要特点
HTML 结构
我们使用一个简单的表格结构,其中 `` 表示标题,`` 表示行。表格被包裹在 `div` 中,以便滚动。以下是代码:
Name Age John Doe 25 john.doe@example.com Jane Smith 30 jane.smith@example.com
粘性标题和冻结列的 CSS
以下是实现这一奇迹的 CSS:
/* General styles */ body { font-family: Arial, sans-serif; } /* Scrollable container */ .table-container { border: 1px solid #e5e7eb; border-bottom: none; overflow: auto; /* Enables both horizontal and vertical scrolling */ height: 400px; /* Limits table height for vertical scrolling */ } /* Table layout */ .table { border-collapse: collapse; width: 100%; table-layout: fixed; /* Ensures consistent column widths */ } /* Table cells and headers */ .table th, .table td { padding: 8px; text-align: center; border: 1px solid #e5e7eb; } /* Frozen first column */ .table td:nth-child(1), .table th:nth-child(1) { background: red; /* Highlighted background for frozen column */ position: sticky; left: 0; /* Ensures the column stays on the left */ z-index: 5; /* Keeps the column above other cells */ color: white; } /* Add higher z-index for header */ .table th:nth-child(1) { z-index: 6; } /* Sticky header */ .table th { background-color: #1e3a8a; color: white; font-size: 14px; font-weight: bold; position: sticky; top: 0; /* Makes the header stick to the top */ z-index: 2; /* Keeps the header above the table body */ } /* Styling for table body */ .table td { font-size: 14px; color: #6b7280; } /* Zebra striping for rows */ .table tr:nth-child(odd) { background-color: #f9fafb; } /* Hover effect for rows */ .table tr:hover { background-color: rgba(14, 116, 144, 0.1); } /* No data row styling */ .no-data { text-align: center; font-size: 14px; color: #9ca3af; }
解释 CSS
可滚动容器:
.table-container 类添加了 overflow: auto 以启用水平和垂直滚动。height: 400px 属性限制了表格的高度,确保较大的数据集可以垂直滚动。
粘性标题:
`position: sticky 和 top: 0` 属性应用于``元素以确保标题在垂直滚动期间保持可见。
z-index: 2 确保标题显示在表格主体上方。
冻结左栏:
第一列使用 `nth-child(1)` 选择器为 ` 和 ` 设置样式。
`position: sticky 和 left: 0` 属性确保列在水平滚动时保持在原位。
z-index 值区分列的单元格(5)和标题(6),以确保正确的分层。
突出显示冻结列:
冻结列的背景颜色设置为红色,并配以白色文字以提高可见度。您可以自定义此颜色以符合您的设计偏好。
如何协同工作
当您垂直滚动时,位置:粘性标题仍然位于 .table-container 的顶部。
水平滚动时,最左边的列保持固定,从而产生冻结列效果。
overflow: auto 和 position: sticky 的组合确保表格在两个轴上保持功能性且用户友好。
您可以添加的增强功能
响应性调整:
使用媒体查询来调整列宽和表格布局以适应较小的屏幕。
动态内容加载:
使用 JavaScript 动态获取并填充更大数据集的行。
互动功能:
使用 JavaScript 添加行点击事件、过滤或排序以增强功能。
最后的想法
使用标准 `` 元素和几行 CSS,我们创建了一个功能强大、响应迅速的表格,其中包含一个粘性标题和一个冻结的左列。这种方法轻量级、易于实现,并且可以在现代浏览器上无缝运行。 无论您要构建仪表板、显示报告还是处理大型数据集,此方法都能确保设计简洁、专业且用户友好。尝试一下,让我知道它对您的项目有何作用!😊