【发布时间】:2022-01-02 23:50:43
【问题描述】:
我查看了许多与此问题相关的其他线程,但没有一个解决此特定问题。我使用 Excel 创建了一个工作表,然后使用 Excel 的另存为功能将其保存为网页。 Excel 会生成一些非常奇怪的 HTML 和 CSS,但这不是问题。我能够将 CSS 文件从 612 行减少到 58 行,并实现相同的外观和感觉。我还能够将工作表的 HTML 文件从 60654 行减少到 60428 行。我还能够将工作表文件中的字符数从 4139575 减少到 2960747。
Excel 将整个工作表保存为填充网页正文的单个表格。此外,当页面创建时,每个 TR 标签都有一个高度属性(以像素为单位)和一个样式高度属性(以磅为单位),每个 TD 标签都有一个宽度属性(以像素为单位)和一个样式宽度属性(以磅为单位) )。
现在我正在尝试将冻结窗格的 CSS 等效项添加到表格中。我尝试过的一切都会导致页面中断。尝试修复前两行时,第一行消失,第二行丢失前两列。当试图修复前两列时,第二列的宽度减少了 50% 以上。在这两种情况下,整个表格仍然向上/向下和向左/向右滚动。
这里是表的开头(包括前两列的 COL 语句)和第一个 TR/TD 行和第二行的第一个 TD 行(第一行的第一个 TD 跨越两行)。
<table border=0 cellpadding=0 cellspacing=0 width=6022 style='border-collapse: collapse;table-layout:fixed;width:4512pt'>
<col width=40 style='width:30pt'>
<col width=286 style='width:215pt'>
<tr height=20 style='height:15.0pt'>
<td colspan=2 rowspan=2 height=40 class="color1 bold" width=326 style='height:30.0pt; width:245pt'> </td>
<td colspan=87 class="color1 bold" width=5696 style='width:4267pt'> </td>
</tr>
<tr height=20 style='height:15.0pt'>
<td colspan=6 height=20 class="border1 color1 bold" style='height:15.0pt'>Ranabastre</td>
这是我一直在尝试使用的 CSS:
.posfixtop {
position:fixed;
top:0px;
left:0px;
height:40px;
width:100%;
}
.posfixleft {
position:fixed;
top:0px;
left:0px;
height:100%;
width:326px;
}
我知道根据 HTML5,实际上使用的每个属性都不是有效的 HTML。我没有删除它们或替换 CSS 文件中没有 CSS 版本的那些,只是因为它们到目前为止还没有造成问题。
我在这里缺少什么吗?我认为也许您不能冻结表中的列或行,但我害怕必须创建多个表的想法。桌子很大。
编辑:再次查看 HTML,我注意到我在上面陈述了一些错误的内容。 TD 标签没有宽度属性或样式宽度属性。 COL 标签有这些。 TR标签有高度属性和样式高度属性,每行第一个TD也有高度属性和样式高度属性。
新信息:
我终于解决了冻结行的问题。这是有效的 CSS:
thead {
position:sticky;
top:0;
min-height:120px;
height:120px;
z-index:50;
background-color:black;
}
我从 Freezing Row and Column in HTML Table Using CSS 获得了帮助我提出 CSS 的信息。
我在我想冻结的行周围放置了标签以完成它。此外,Excel 在表格上放置了一个border-collapse:collapse 属性,我发现我的单元格边框没有被保留。我在这里找到了一篇关于堆栈溢出的文章,通过说明应该使用边界折叠:分离来回答这个问题。我相应地更改了它,边界问题得到了解决:
Border style do not work with sticky position element
我还没有完成的是冻结列。当我将 posfixleft 类放在代表前两列的 td 上(使用标题下方的第一个可见行作为测试)时,我得到的是单元格滚动到屏幕顶部并停止,而其余行消失在垂直滚动中的标题行后面,并且它们在水平滚动中保持预期的位置。我必须在 posfixleft 类中包含 background-color 属性,以防止行中的数据在滚动到固定列后面时不可见。
所以剩下的问题是,如何让前两列在修复后消失在标题行后面?另外,我知道答案可能是我必须使用 javascript,但是是否有一个简单的解决方案可以为每一行创建 2 个单独的 posfixleft 类?我将大表分解为较小的表(按行),但结果最长的表有 81 行、127 行、128 行和 222 行,不包括标题行。
【问题讨论】: