Для того, чтобы сделать список со змейкой добавим следующую html-разметку:
<div class="container">
<div class="production-wrapper">
<div class="border-left production">
<div class="row align-items-center">
<div class="col-auto numeric">
1.
</div>
<div class="col">
<h2>Заголовок</h2>
Какой-то невероятный текст
</div>
</div>
</div>
<div class="border-right production">
<div class="row align-items-center">
<div class="col">
<h2>Заголовок</h2>
Какой-то невероятный текст
</div>
<div class="col-auto numeric">
2.
</div>
</div>
</div>
<div class="border-left production">
<div class="row align-items-center">
<div class="col-auto numeric">
3.
</div>
<div class="col">
<h2>Заголовок</h2>
Какой-то невероятный текст
</div>
</div>
</div>
<div class="border-right production">
<div class="row align-items-center">
<div class="col">
<h2>Заголовок</h2>
Какой-то невероятный текст
</div>
<div class="col-auto numeric">
4.
</div>
</div>
</div>
<div class="border-left production">
<div class="row align-items-center">
<div class="col-auto numeric">
5.
</div>
<div class="col">
<h2>Заголовок</h2>
Какой-то невероятный текст
</div>
</div>
</div>
</div>
</div>
А это необходимые css-стили:
*, ::after, ::before {
box-sizing: border-box;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
.row {
--bs-gutter-x: 1.5rem;
--bs-gutter-y: 0;
display: flex;
flex-wrap: wrap;
margin-top: calc(var(--bs-gutter-y) * -1);
margin-right: calc(var(--bs-gutter-x) * -0.5);
margin-left: calc(var(--bs-gutter-x) * -0.5);
}
.row > * {
box-sizing: border-box;
flex-shrink: 0;
width: 100%;
max-width: 100%;
padding-right: calc(var(--bs-gutter-x) * 0.5);
padding-left: calc(var(--bs-gutter-x) * 0.5);
margin-top: var(--bs-gutter-y);
}
.align-items-center {
align-items: center;
}
.numeric {
font-weight: 200;
font-size: 64px;
line-height: 64px;
color: #CE2525;
margin-right: 20px;
}
.production h2 {
font-weight: 600;
font-size: 18px;
line-height: 24px;
}
.production .numeric {
margin-right: 0;
}
.production {
padding: 60px 0;
position: relative;
}
.production .row {
width: calc(100% + 200px);
position: relative; }
.production:nth-of-type(1) .row:before {
content: '';
display: block;
border-bottom: 2px dashed #CE2525;
width: 95px;
position: absolute;
right: 0;
top: -62px; }
.production:last-child .row:before {
content: '';
display: block;
border-bottom: 2px dashed #CE2525;
width: 95px;
position: absolute;
right: 0;
bottom: -62px; }
.border-left {
width: calc(100% - 200px);
margin-left: 100px;
border-top: 2px dashed #CE2525;
border-bottom: 2px dashed #CE2525; }
.border-left .row {
margin-left: -100px !important; }
.border-left:after {
content: '';
position: absolute;
left: -100px;
width: 100px;
height: calc(100% + 4px);
top: -2px;
display: block;
border-left: 2px dashed #CE2525;
border-bottom: 2px dashed #CE2525;
border-top: 2px dashed #CE2525;
border-radius: 100px 0 0 100px; }
.border-left:before {
top: 50%;
margin-top: -7px;
z-index: 1;
content: '';
display: inline-block;
position: absolute;
width: 14px;
height: 14px;
background: #333333;
border: 4px solid #fff;
left: -107px;
-webkit-box-shadow: 0px 0px 0px 2px #ce2525;
-moz-box-shadow: 0px 0px 0px 2px #ce2525;
box-shadow: 0px 0px 0px 2px #ce2525;
}
.border-right {
width: calc(100% - 200px); }
.border-right:before {
content: '';
position: absolute;
right: -202px;
width: 100px;
height: calc(100% + 4px);
top: -2px;
display: block;
border-right: 2px dashed #CE2525;
border-bottom: 2px dashed #CE2525;
border-top: 2px dashed #CE2525;
border-radius: 0 100px 100px 0; }
.border-right:after {
top: 50%;
margin-top: -7px;
z-index: 1;
content: '';
display: inline-block;
position: absolute;
width: 14px;
height: 14px;
background: #333333;
border: 4px solid #fff;
right: -207px;
-webkit-box-shadow: 0px 0px 0px 2px #ce2525;
-moz-box-shadow: 0px 0px 0px 2px #ce2525;
box-shadow: 0px 0px 0px 2px #ce2525;
}
.col-auto {
flex: 0 0 auto;
width: auto;
}
.col {
flex: 1 0 0;
}