用CSS实现时间轴总结
总结:大体而言是用ul
结构实现,每个li
元素设定一个before
伪元素,作为时间轴上的圆球,在每一个li
元素中新建一个div
元素作为时间轴的内容。每一个div
结构中设定一个after
伪元素,用来作为指向时间轴的箭头。由于内容会分散在时间轴的两旁,故还应该根据nth-child()
来进行相应的设置。
内容原创为此网站,我只是总结一下我这个过程。
HTML结构
<div class="timeline">
<ul>
<li>
<div>
2002
2002
</div>
</li>
<li>
<div>
2005
</div>
</li>
</ul>
</div>
CSS样式 - 时间轴
首先将每一个li
元素压缩,设置背景色,使其成为时间轴的主轴,并使其居中。将其position
设为relative
,方便子元素根据中轴线进行变动。
.timeline ul li {
background-color: white;
width: 6px;
margin: 0 auto;
padding: 50px;
position: relative;
}
然后用伪元素选择器after
选中li
之后的内容,并使其变形为圆形。
.timeline ul li:after {
content:""; /*不重要*/
border-radius: 50%;
transform: translateX(-50%);
position: absolute;
bottom: 0;
left: 50%;
width: 30px;
height: 30px;
background-color: red;
}
这样时间轴上面的一个个时间点球就完成了,(请忽略我设定的颜色,完全为了看上去比较方便)
CSS样式 - 内容框
在每一个li
元素中还有一个div
元素,作为时间轴的内容部分。
.timeline li div{
position: relative; /*位置会在之后设置*/
bottom: 0px;
width: 400px;
padding: 15px;
background-color: yellow;
}
之后用伪元素before
设立一个指向时间轴的箭头,在这个部分还只是一个小点,具体的形状会在之后设置。
.timeline li div::before {
content: "";
position: absolute;
bottom: 7px;
width: 0;
height: 0;
border-style:solid;
}
CSS样式 - 内容框设置左右
根据内容框的排列将内容框依次排在时间轴的左右。
.timeline li:nth-child(odd) div {
left: 45px;
}
.timeline li:nth-child(odd) div::before {
left: -15px;
border-width: 8px 16px 8px 0;
border-color: transparent red transparent transparent transparent;
}
.timeline li:nth-child(even) div {
left: -468px;
border-width: 8px 0px 8px 16px;
border-color: transparent transparent transparent red;
}
右边框位置的计算过程大致如下:
width(400) + padding(30) + li-width(6) + 时间轴球半径(15) + 箭头(15) + 空余部分
总结
之前也做过时间轴的,通过设置一个right
部分float到右边,然后用border-left
作为中间轴,但是没有这个这么好,这个方法还运用了两个我之前并不知道的伪元素before
和after
,也算学习到了很多。原文还有使用javascript进行交互的内容,由于我的时间轴实在是的太短了,就没有添加了,如果有兴趣可以点击原文查看。