使用 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,我们创建了一个功能强大、响应迅速的表格,其中包含一个粘性标题和一个冻结的左列。这种方法轻量级、易于实现,并且可以在现代浏览器上无缝运行。 无论您要构建仪表板、显示报告还是处理大型数据集,此方法都能确保设计简洁、专业且用户友好。尝试一下,让我知道它对您的项目有何作用!😊