我正在尝试实现一个带有固定标题的纯 CSS 滚动 UL-LI 表。
我的要求:
- 使用表格 CSS(表格、表格行、表格单元格、表格标题组...)
- 所有单元格都必须是列表项(LI)
- 表格内容滚动时必须修复标题
- 当表格列改变宽度时,应该改变适当的标题宽度
目前我有 HTML:
<ul class="testTable">
<div class="testHeader">
<li class="testRow">
<span>ID</span>
<span>Name</span>
<span>Description</span>
<span>Other details 1</span>
<span>Other details 2</span>
</li>
</div>
<div class="testBody">
<li class="testRow">
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
</li>
<li class="testRow">
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
</li>
</div>
</ul>
...和CSS ...
.testTable {
display: table;
margin: 0px;
padding: 0px;
}
.testRow {
display: table-row;
}
.testRow > span {
list-style:none;
display: table-cell;
border: 1px solid #000;
padding: 2px 6px;
}
.testHeader {
display: table-header-group;
/*position: absolute;*/
}
.testHeader span {
background-color: #ccc;
}
.testBody {
display: table-row-group;
}
小提琴在这里:http: //jsfiddle.net/ozrentk/QUqyu/1/
但!当我尝试使用position: absolute
or来固定标题的位置时fixed
,表格就会分崩离析。我尝试了几种技术,但无济于事。此外,关于如何使用纯表格 CSS 执行此操作的示例几乎为零。
这很接近,但不完全符合我的要求。
有可以帮助我的 CSS 大师吗?
编辑
现在,我到底为什么要将此列表显示为表格?
在我的动态 ASP.NET MVC 驱动站点中,我有很多地方可以将无序列表返回给浏览器。然后,浏览器将采用此标记并将其显示给读者。但显示格式本身实际上可以取决于上下文,例如用户显示相关的偏好或设备格式本身。CSS 用于显示格式,应该如此。最后,如果要使用一些 display-light-n-magic-effect,jQuery 和/或插件应该用于此,希望仅用于此。
你看,我希望我的服务器保持与显示格式无关。也就是说,我不希望我的服务器关心特定客户端希望他的显示看起来如何。我不希望 if-blocks 在一种情况下返回 unordered-list-items 而在另一种情况下返回表格单元格。当然我可以有两个返回点,一个返回 ul/li/span 格式,另一个返回 table/tr/td,但这违反了 DRY 原则。
另一件事是我正在使用一个非常好的 jQuery 插件,它显示表格数据并且可以输入列表项,但不能输入表格标记。我决定坚持使用插件。因为我喜欢它,它很棒并且支持我的网站的工作方式。
我希望这能解决问题。你看,使用一种范式可以与另一种形成对比。事实证明,我必须放弃通用表格数据语义才能获得 DRY 代码。
PS 越想这种情况,越是看起来是务实的问题,而不是语义的问题。