Я бы, наверное, выбрал сочетание гибкого и относительного / абсолютного позиционирования.В зависимости от того, что вы используете в отношении процессора (sass), вы можете автоматически префиксировать его, чтобы сделать его совместимым и с более старыми версиями браузеров.
Вот пример:
body {
background-color: lightgray;
}
.track-bar {
width: 600px;
height: 30px;
margin-top: 30px;
background-color: white;
display: flex;
align-items: center;
align-content: center;
flex-wrap: no-wrap;
position: relative;
z-index: 1030;
}
.rating {
height: 100%;
color: white;
opacity: 0;
position: relative;
text-align: center;
text-transform: uppercase;
display: flex;
align-items: center;
align-content: center;
justify-content: center;
}
#zero-thirty {
flex: 0 0 30%;
background-color: red;
}
#thirty-seventy {
flex: 0 0 40%;
background-color: green;
}
#seventy-hundred {
flex: 0 0 30%;
background-color: green;
}
.active {
opacity: 1;
}
.marker {
height: 40px;
width: 1px;
background-color: black;
position: absolute;
bottom: 0;
z-index: 1050;
}
.marker span {
position: absolute;
left: 50%;
transform: translateX(-50%) translateY(-100%);
}
.label-track {
margin-top: 10px;
position: relative;
color: rgba(0,0,0,.6);
width: 600px;
}
.label-track span {
position: absolute;
}
<div class="track-bar">
<div class="rating" id="zero-thirty">
</div>
<div class="rating active" id="thirty-seventy">
<span>Good</span>
</div>
<div class="rating" id="seventy-hundred">
</div>
<div class="marker" style="left: 25.07%;">
<span>25.07%</span>
</div>
</div>
<div class="label-track">
<span style="left: 0%;">0%</span>
<span style="left: 30%;">30%</span>
<span style="left: 70%;">70%</span>
<span style="right: 0%;">100%</span>
</div>