【发布时间】:2017-02-27 16:53:49
【问题描述】:
我正在开发一个自定义时间线功能,但我一直不知道如何在边缘情况下解决我想要的某个定位问题。
在下面的 sn-p 中,我有 3 个时间线进行演示:
- 第一个是包含许多事件的时间线。时间线应该溢出不适合的时间线。这是由
li的给定min-width确定的。 - 第二个和第三个事件很少。此处的定位需要使它们彼此之间等距。
我还希望将第一个和最后一个事件分别拉到左侧和右侧,而不是居中。
到目前为止我所拥有的:
每个项目的宽度是根据事件的数量计算的。 min-width 属性可防止大小变得太小。溢出是有意的。
我想我可以通过使用left/right: XX % 左右拉动它们来解决第一个和最后一个事件的间距问题,但是这些元素的行为似乎它们是绝对定位的。我还尝试了float 以及使用固定宽度并通过margin 控制宽度,但这也不起作用。
.timeline-container {
overflow: hidden;
position: relative;
margin: 20px 0;
}
.timeline-container ol {
list-style: none;
width: 100%;
height: 2px;
white-space: nowrap;
margin: 30px 0 0;
padding: 0;
background: #EEE;
display: inline-block;
position: relative;
}
.timeline-container ol li {
display: inline-block;
position: relative;
height: 9px;
min-width: 150px;
}
.timeline-container ol li:before {
content: "";
cursor: pointer;
width: 12px;
height: 12px;
border: 2px solid #3598DC;
display: inline-block;
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
background: white;
z-index: 100;
}
.timeline-container ol li a {
position: relative;
bottom: 30px;
display: block;
text-align: center;
padding: 0;
}
<div class="timeline-container">
<ol>
<li style="width: 9.09091%;"><a>Feb 8</a></li>
<li style="width: 9.09091%;"><a>Feb 9</a></li>
<li style="width: 9.09091%;"><a>Feb 11</a></li>
<li style="width: 9.09091%;"><a>Feb 13</a></li>
<li style="width: 9.09091%;"><a>Feb 17</a></li>
<li style="width: 9.09091%;"><a>Feb 18</a></li>
<li style="width: 9.09091%;"><a>Feb 19</a></li>
<li style="width: 9.09091%;"><a>Feb 21</a></li>
<li style="width: 9.09091%;"><a>Feb 22</a></li>
<li style="width: 9.09091%;"><a>Feb 26</a></li>
<li style="width: 9.09091%;"><a>Feb 28</a></li>
</ol>
</div>
<div class="timeline-container">
<ol>
<li style="width: 50%;"><a>Feb 8</a></li>
<li style="width: 50%;"><a>Feb 28</a></li>
</ol>
</div>
<div class="timeline-container">
<ol>
<li style="width: 25%;"><a>Feb 8</a></li>
<li style="width: 25%;"><a>Feb 9</a></li>
<li style="width: 25%;"><a>Feb 11</a></li>
<li style="width: 25%;"><a>Feb 13</a></li>
</ol>
</div>
期望的行为:(注意第一个和最后一个项目的左边距和右边距减少。)
一个更可取的纯 css 解决方案,但 javascript 也很好。谢谢。
【问题讨论】:
-
我个人会为此使用
flexbox。对于包含许多事件的时间线,将它们全部设置为具有flex: 1属性将使它们自动均匀间隔,对于少数项目,您可以使用justify-content: space-between将它们尽可能地间隔开。 -
@Coleman,由于 IE 支持,我仍然对使用 flexbox 有一点偏好,但如果这是唯一可行的解决方案,那绝对没问题。关心发布答案吗?谢谢。
-
你能把设计附在帖子上吗?溢出 x 没有滚动呢?
-
@Chris 当然,我明白了。您可以使用 CSS 自动前缀来帮助解决该问题。它将为 IE 添加必要的属性。我也会发布答案。
-
@Pangloss,你指的是什么设计?隐藏的溢出用于禁用滚动。稍后我将使用 javascript 添加
<和>按钮到“滚动”。但这无关紧要。现在我只希望项目在每种情况下都能很好地对齐(很少或很多项目)。
标签: javascript html css