Rav*_*eja 6 html css flexbox css-grid
我正在尝试建立水平时间表。一个月中的任何一天都有很多事件。
因此,当事件更多时,列表项将无法容纳可用高度(来自min-height:),并且出现垂直滚动。
如果我尝试删除min-height整个内容,则会失真。我希望容器在不垂直滚动的情况下占用任何数量的项目。
另外,还有一个问题,当窗口较小时(在Codepen上可以看到),出现水平滚动(预期和需要)。但是,连接器没有占据整个滚动宽度。
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.timeline__container {
background: #c0ffee;
overflow-x: auto;
display: flex;
position: relative;
}
.timeline__connector {
position: absolute;
width: 100%;
left: 0;
top: calc(50% - 4px);
height: 8px;
background: #ccc;
}
.timeline__item {
background: gold;
min-width: 85px;
min-height: 200px;
display: flex;
flex-direction: column;
justify-content: center;
}
.timeline__item:nth-child(2n) {
flex-direction: column-reverse;
}
.timeline__up {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.timeline__down {
height: 100%;
display: flex;
}
.timeline__month {
-webkit-transform: rotate(-90deg);
transform: rotate(-90deg);
display: inline-block;
}
.timeline__month-up {
margin-bottom: 20px;
align-self: flex-end;
}
.timeline__month-down {
align-self: flex-start;
margin-top: 20px;
}
.timeline__count {
margin: auto;
}
.timeline__count-up {
margin-bottom: 20px;
}
.timeline__count-down {
margin-top: 20px;
}
.timeline__item-event {
min-width: 180px;
}
.timeline__event__list {
height: 100%;
}
.timeline__event__list ul {
margin-left: 20px;
}Run Code Online (Sandbox Code Playgroud)
<div class="timeline__container">
<div class="timeline__connector"></div>
<div class="timeline__item">
<div class="timeline__up">
<div class="timeline__month timeline__month-down">JAN</div>
</div>
<div class="timeline__down">
<div class="timeline__count timeline__count-up">5</div>
</div>
</div>
<div class="timeline__item">
<div class="timeline__up">
<div class="timeline__month timeline__month-up">FEB</div>
</div>
<div class="timeline__down">
<div class="timeline__count timeline__count-down">15</div>
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">5th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>inventore nihil sint est.</li>
<li>Lorem ipsum dolor sit</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
<!-- <div class="timeline__count timeline__count-up">5</div> -->
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">15th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>inventore nihil sint est.</li>
<li>Lorem ipsum dolor sit</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
相同的 Codepen
我提出了一个将flex和grid结合起来以实现您所需要的想法。
添加了一个片段,我试图保持代码尽可能的干净,在其中一些注释上添加了注释,以便代码可以自己说话。根本没有改变DOM结构。但是,等等,看看这个:
另外,还有一个问题,当窗口较小时(在Codepen上可以看到),出现水平滚动(预期和需要)。但是,连接器没有占据整个滚动宽度。
为解决上述问题,我将包裹.timeline__container到.timeline__wrapper。除去position: relative;从.timeline__container。并添加position: relative;到中.timeline__wrapper。
该代码上有足够的注释,因此当您进行遍历时,您应该能够理解。您可以研究此处使用的网格属性,以实际了解这是如何完成的。
我还在时间轴上/下类上添加了一些填充,以忽略与连接器(或灰线)的视觉冲突
随意添加/删除列表项,以便时间线项的高度增加/减少,您可以检查这是否符合预期。
几乎忘了提,这对野生动物园也很好。
片段摘要:
* {
/* you can ignore the pseudo elements here */
margin: 0;
padding: 0;
box-sizing: border-box;
}
.timeline__wrapper {
position: relative;
/* to fix the timeline connector */
}
.timeline__container {
background: #c0ffee;
overflow-x: auto;
/* element with an overflow can't display an absolute positioned element, that's why the wrapper up there */
display: flex;
}
.timeline__connector {
position: absolute;
width: 100%;
left: 0;
top: calc(50% - 4px);
height: 8px;
background: #ccc;
}
.timeline__item {
background: gold;
min-width: 85px;
justify-content: center;
display: grid;
grid-auto-flow: row;
grid-auto-rows: 1fr;
/* this keeps the upper and lower portion same height */
}
.timeline__item:nth-child(2n) .timeline__down {
/* these styles reverses the expected rows */
grid-row-start: 2;
grid-row-end: 1;
}
.timeline__up {
display: flex;
align-items: flex-end;
justify-content: center;
padding: 10px;
}
.timeline__item:nth-child(2n) .timeline__up {
align-items: flex-start;
}
.timeline__down {
display: flex;
align-items: flex-start;
padding: 10px;
}
.timeline__month {
-webkit-transform: rotate(-90deg);
transform: rotate(-90deg);
display: inline-block;
}
.timeline__month-up {
margin-bottom: 20px;
align-self: flex-end;
}
.timeline__month-down {
align-self: flex-start;
margin-top: 20px;
}
.timeline__count {
margin: auto;
}
.timeline__count-up {
margin-bottom: 20px;
}
.timeline__count-down {
margin-top: 20px;
}
.timeline__item-event {
min-width: 180px;
}
.timeline__event__list ul {
margin-left: 20px;
}Run Code Online (Sandbox Code Playgroud)
<div class="timeline__wrapper">
<div class="timeline__container">
<div class="timeline__connector"></div>
<div class="timeline__item">
<div class="timeline__up">
<div class="timeline__month timeline__month-down">JAN</div>
</div>
<div class="timeline__down">
<div class="timeline__count timeline__count-up">5</div>
</div>
</div>
<div class="timeline__item">
<div class="timeline__up">
<div class="timeline__month timeline__month-up">FEB</div>
</div>
<div class="timeline__down">
<div class="timeline__count timeline__count-down">15</div>
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">5th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>inventore nihil sint est.</li>
<li>Lorem ipsum dolor sit</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
<!-- <div class="timeline__count timeline__count-up">5</div> -->
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">15th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>inventore nihil sint est.</li>
<li>Lorem ipsum dolor sit</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
<div class="timeline__item timeline__item-event">
<div class="timeline__up">
<div class="timeline__event__list">
<div class="timeline__date">25th</div>
<ul>
<li>Lorem ipsum</li>
<li>Lorem ipsum</li>
<li>dolor sit</li>
</ul>
</div>
</div>
<div class="timeline__down">
</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
更新:根据评论,在视图中添加了更多项。