JSFiddle - React, Tailwind, and code Playground
by RomanFF
HTML
<div class="wrap">
<div class="box">
<div class="line1">
<div class="item crimson">
<h2 class="upBox-title #E778A7">Заказ</h2>
<p>Вы размещаете заказ через чат или через форму</p>
<span></span>
</div>
<div class="item green">
<h2 class="upBox-title #71C24C">Подтверждение</h2>
<p>Вы подтверждаете все параметры заказа</p>
<span></span>
</div>
<div class="item purple">
<h2 class="upBox-title #594487">Доставка</h2>
<p>Мы доставляем ваш заказ выбранным способом</p>
<span></span>
</div>
</div>
<div class="line2">
<div class="item blue">
<p>Быстрый ответ с вариантами исполнения и сроками</p>
<h2 class="downBox-title #26CDDA">Ответ</h2>
<span></span>
</div>
<div class="item yellow">
<p>Мы печатаем ваш заказ в кратчайшие сроки</p>
<h2 class="downBox-title #FCE000">Печать</h2>
<span></span>
</div>
</div>
</div>
</div>
CSS
/* треугольник,пунктирная линия верхние блоки - .line1 span:after,.line1 span:before.*/
/*треугольник,пунктирная линия нижние блоки - line2 span:after,.line1 span:before.*/
/* начало и конец волны .box:before,.box:after*/
/* центральные дуги волны.line1 .item:after,.line2 .item:after */
*,
:after,
:before {
box-sizing: border-box;
}
.wrap{
max-width:600px;
border:1px solid black;
margin: 0 auto;
overflow:hidden;
}
h2{
font-size:16px;
background-color: #fff;
text-align:center;
width:100%;
}
.upBox-title{
margin:0 auto;
border-radius: 5px 5px 0 0;
}
.downBox-title{
margin:0 auto;
border-radius: 0 0 5px 5px;
}
p{
font-size:12px;
text-align:center;
color:white;
}
/* позиционирование */
.box{
position:relative;
display: flex;
flex-direction: column;
align-items:center;
}
/* отступ верхник блоков от нижних*/
.line1{
margin-bottom: 106px;
}
.line1 .item:before {
content: "";
width: 16px;
height: 16px;
background-color: black;
position: absolute;
border-radius: 50%;
top: 163px;
left: 52px;
z-index: 1;
}
.line2 .item:before {
content: "";
width: 16px;
height: 16px;
background-color: black;
position: absolute;
border-radius: 50%;
top: -80px;
left: 52px;
z-index: 1;
}
.line1 .item:after {
content: "";
width: 112%;
height: 116%;
position: absolute;
left: -8%;
top: 47%;
border-radius: 50%;
border: 5px solid transparent;
border-bottom: 5px solid #ccc;
}
.line2 .item:after {
content: "";
width: 127%;
height: 130%;
position: absolute;
left: -15%;
top: -70%;
border-radius: 50%;
border: 5px solid transparent;
border-top: 5px solid #ccc;
}
/* начало и конец линии */
.box:before {
content: "";
height: 200px;
width: 180px;
position: absolute;
left: -62px;
top: 42.5%;
border-radius: 50%;
border: 5px solid transparent;
border-top: 5px solid #ccc;
...
JavaScript
let h2 = document.querySelectorAll('h2');
for (let i = 0; i < h2.length;i++){
h2[i].style.color = h2[i].classList[1];
h2[i].style.border = '1px solid' + h2[i].classList[1];
}
let span = document.querySelectorAll('span');
console.log(span)