Вместо clip-path
вы можете учитывать высоту вашего элемента и фиксированный размер для вашего градиента.Тогда вы можете легко оживить эту высоту.
Хитрость для анимации состоит в том, чтобы сделать элементы inline-block
(вместо float) и иметь скрытый элемент (установленный с псевдоэлементом), который будет height:100%
, чтобы определить базовую линию наснизу, заставляя ваш элемент анимироваться снизу, а не сверху.
.barChart {
height: 70px;
width: 170px;
border-bottom: solid 2px #eee;
}
.barChart:before {
content:"";
display:inline-block;
height:100%;
}
.bar {
display:inline-block;
margin: 4px;
width: 6px;
background: linear-gradient(to top, #8BC2CA 0, #2E92A0 70px); /*same as height:100%*/
animation: expandBar 2s ease;
}
.bar1 {height: 80%;}
.bar2 {height: 20%;}
.bar3 {height: 60%;}
.bar4 {height: 70%;}
.bar5 {height: 50%;}
@keyframes expandBar {
0% {
height: 0%;
}
}
<div class="barChart">
<div class="bar bar1"></div>
<div class="bar bar2"></div>
<div class="bar bar3"></div>
<div class="bar bar4"></div>
<div class="bar bar5"></div>
</div>
Если вы заинтересованы, вы можете сделать это только с одним элементом и несколькими фонами:
.barChart {
height: 70px;
width: 170px;
border-bottom: solid 2px #eee;
--grad:linear-gradient(to top, #8BC2CA 0, #2E92A0 70px);
background-image:var(--grad), var(--grad), var(--grad), var(--grad), var(--grad);
background-size:6px 60%,6px 80%,6px 20%,6px 70%,6px 50%;
background-position:4px 100%, 14px 100%, 26px 100%, 38px 100%,48px 100%;
background-repeat:no-repeat;
animation: expandBar 2s ease;
}
@keyframes expandBar {
0% {
background-size: 6px 0%;
}
}
<div class="barChart">
</div>