布局一个类似于表格的弹性框? [英] Layout a flex box similar to a table?
问题描述
我正在使用内部开发的框架,该框架依赖于我们 HTML 的特定结构.一个棘手的事情是每一行都需要有自己的容器,有自己的类和数据属性.
问题来了.在不彻底改变 DOM 的情况下,我怎样才能让下面的 flex 框基本上像 HTML 表格一样呈现?还是桌子是唯一的方法?该解决方案必须同时适用于 IE11 和 Chrome.
我正在努力让它看起来像这样......
A 列 |B栏|C栏1 |2 |3
section {显示:弹性;flex-wrap: 包裹;}部分 .col {弹性:1 1 自动;}部分 .line-break {弹性基础:100%;宽度:0px;高度:0px;溢出:隐藏;}
<头>头部><身体><部分><标题><div class="col">A列</div><div class="col">B列</div><div class="col">C列</div></标题><div class="line-break"></div><div class="row"><div class="col">1</div><div class="col">2</div><div class="col">3</div>
</节></html>
如果您要呈现的内容是表格数据类型,那么table
就是正确的方式.
HTML 5.1 W3C 建议,2016 年 11 月 1 日,4.9 表格数据
鉴于您不能或不想更改标记,这可以使用 CSS Table 来完成,并且可以轻松地在任何显示类型(例如 flex
、block
等,甚至 float
,使用媒体查询等
我还删除了 <div class="line-break"></div>
元素,因为您不需要,但如果它是由一个组件或类似的东西,保持原样不会造成任何问题.
如果您仍然需要或必须使用 Flexbox,我的这个答案提到了 CSS Table 和 Flexbox 在两个重要功能上的区别:
更新了一个示例,展示了一些有用的 Flexbox 内容,具有不同的宽度和跨度列.
堆栈片段 - Flexbox(IE11 的小提琴演示)
.tbl {显示:弹性;弹性方向:列;}.排 {显示:弹性;最小高度:50px;}.细胞 {弹性:4;边框:1px纯红色;}.cell:nth-child(1) {弹性:1;}.cell:nth-child(2) {弹性:2;}.cell.span4-5 {弹性:8 24px;/* col 4,5 flex-grow/border/padding */}.cell.span3-4 {弹性:8 24px;/* col 3,4 flex-grow/border/padding */}.cell.span3-5 {弹性:12 36px;/* col 3,4,5 flex-grow/border/padding */}.row:first-child .cell {显示:弹性;对齐内容:居中;/* 中心水平线.*/对齐项目:居中;/* 中心顶点.*/}.row .cell {填充:5px;box-sizing: 边框框;}
<div class="row"><div class="cell">ID </div><div class="cell">Nr </div><div class="cell">标题 1 </div><div class="cell span4-5">标题 2
<div class="row"><div class="cell">1</div><div class="cell">2</div><div class="cell">内容</div><div class="cell">内容</div><div class="cell">内容</div>
<div class="row"><div class="cell">2</div><div class="cell">3</div><div class="cell span3-5">内容</div>
<div class="row"><div class="cell">1</div><div class="cell">2</div><div class="cell span3-4">内容</div><div class="cell">内容</div>