更新的问题:
我想在时间轴中显示事件,如下图所示:
事件数据项有两个属性:“开始时间”和“长度”,因此可以将数据想象为如下所示的表格:
event name | start | length
-----------+-------+-------
1 | 0 | 200
1.1 | 30 | 100
1.1.1 | 40 | 50
1.2 | 140 | 50
2 | 205 | 100
2.1 | 220 | 20
2.2 | 250 | 20
2.3 | 280 | 20
... | ... | ...
数据有一些特点:
- 事件名称可以是任意的(这里的数字只是为了说明)
- 在另一个事件的范围内开始和结束的事件是这些事件的子事件。
→ 在上表中,“1.1”将是“1”的子事件。 - 儿童可以有儿童活动。
事件永远不会以下列方式重叠……</p>
+---------+ +---------+ | A | | C | +---------+ +---------+ +---------+ or +---------+ | B | | D | +---------+ +---------+
...因为 B 将是 A 的孩子,但它必须在 A 结束之前结束。C 从 D 开始,因此 D 将是 C 的父级(并且必须显示在 C 上方),但是与 A 和 B 存在相同的问题。
- 没有可用的显式嵌套信息,但隐式嵌套信息由开始时间和长度提供。
- 事件按开始时间升序排序。
因此,事件的显示方式只有一种。
目前我正在尝试这样做:x 位置设置为margin-left
,但任何其他属性也可以。div
s 按它们的 x 值排序:
<div class="container">
<div class="item" style="margin-left:0; width: 200px;">
1
</div>
<div class="item" style="margin-left:30px; width: 100px;">
1.1
</div>
<div class="item" style="margin-left:40px; width: 50px;">
1.1.1
</div>
<div class="item" style="margin-left:140px; width: 50px;">
1.2
</div>
<div class="item" style="margin-left:205px; width: 100px;">
2
</div>
<div class="item" style="margin-left:220px; width: 20px;">
2.1
</div>
<div class="item" style="margin-left:250px; width: 20px;">
2.2
</div>
<div class="item" style="margin-left:280px; width: 20px;">
2.3
</div>
</div>
.container {
padding: 0.5rem 0 1.5rem 0;
background-color: #EEE;
border: 1px solid #888;
overflow-x: auto;
}
.item {
height: 2rem;
margin-bottom: -1rem;
font-size: 60%; font-family: sans-serif;
background-color: #BBB;
border: 1pt solid #EEE;
overflow: hidden;
}
这是当前结果(在这种情况下,事件名称是数字,但它们可以是任意字符串):
每行恰好有一个div
,因此每个后续div
都低于其前任。
任何想法如何用纯 CSS 做到这一点而不必计算元素的 y 位置?
示例代码可在此处获得:http: //jsfiddle.net/hiddenbit/PvBjt/