Как сверстать анимацию заполнения шкалы?

Передо мной встала задача сверстать такую шкалу
5b5188f90e811820540472.png
Необходимо чтобы она заполнялась медленно, и по ходу её заполнения всплывали эти записи.
Всплытие записей вовремя я сделаю и сам без труда, подскажите пожалуйста, как сделать именно такую шкалу градиентную, причем такой формы?
  • Вопрос задан
  • 1383 просмотра
Решения вопроса 1
makarenya
@makarenya
программист
Если сложность картинки совсем уж запредельная, то всегда можно взять и использовать svg. Я так и сделал тут: внизу таймлайн с годами. Но тут надо синхронизировать размер, и в вашем случае видится решение проще.

Если ширина сайта фиксированная, то просто будет использовать 2 div-а: один над другим (то есть у второго position=absolute). Внутри верхрнего лежит ещё один с шириной сайта (А ещё у него должен быть position=absolute и right=0. В нём изображение серого таймлайна. Сам таймлайн можно сделать из обычных div-ов, расположенных слева направо во flexbox-е или с флоатами. div со скруглёнными углами - это точка, с margin сверху и меньшей высотой - линия. А в первом диве (который снизу) вы составляете тот-же таймлайн, но уже цветной. Посчитать цвета градиентов для него - задача не сложная. Ну и вся магия во втором блоке, который с absolute. У него проставлен right=0, и уменьшая его width вы будете понемного скрывать серый таймлайн, а на его месте будет появляться цветной
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
s_panteleev
@s_panteleev
25 yo, Yaroslavl
Попробуйте как-то так:
https://codepen.io/saundefined/pen/pZNOGX
По мере необходимости уменьшайте серую шкалу со 100% до 0

Код
<div class="scale">
  <div class="scale__line" style="width: 40%"></div>
  <div class="scale__points">
    <span class="scale__point" style="left: 30%"></div>
    <span class="scale__point" style="left: 60%"></div>
  </div>
</div>


.scale {
  position: relative;
  height: 50px;
  background: linear-gradient(90deg, #e66465, #9198e5);
  width: 100%;
  transition: 0.5s width;
}
.scale--ended {
  width: 0;
}
.scale__line {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  background: #cacaca;
}
.scale__points {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
}
.scale__point {
  width: 70px;
  height: 50px;
  position: absolute;
  top: 0;
  overflow: hidden;
}
.scale__point:after{
    content: '';
    display: block;
    position: absolute;
    left: 10px;
    top: 0;
    border-radius: 100%;
    width: 50px;
    height: 50px;
    box-shadow: 0px 0px 0px 50px #FFFFFF;
}

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы