#css #animation #sass
Вопрос:
Цель
Чтобы сделать монотонную анимацию типа большого взрыва, черной дыры,сердцебиения. Он взрывается, затем втягивается обратно, а затем переходит в бесконечное пульсирующее сердцебиение, похожее на петлю. Это анимационный проект CSS, который я создаю для себя.
- Взрыв (полуфабрикат)
- Он должен расширяться за пределами экрана без полосы прокрутки.
- Он должен начинаться с твердого расширяющегося большего внутреннего круга с небольшим отверстием в центре
- Внешние кольца должны расширяться за пределы внутреннего круга
- Кольца должны начать толстеть, а затем истончаться по мере расширения
- Втянись (Готово)
- Это должно произойти очень быстро
- Анимация должна «подпрыгивать»
- Цикл сердцебиения (Дела)
- Пульс должен начинаться с середины и быстро расширяться наружу
- Это сердцебиение, так что два удара, затем пауза.
Я отстой в математике, и я новичок в дерзости и программировании. Я не собираюсь заставлять кого-то заканчивать это, но было бы интересно посмотреть, как другие справятся с этой задачей. В принципе, мне нужна помощь с парой проблем, над которыми я застрял.
Вот что у меня есть:
body
background-color: black
margin: 0
/* Get it all in the center */
.container
display: flex
width: 100vw
height: 100vh
align-items: center
justify-content: center
vertical-align: 50%
/* Here's the animation for the first inner circle. It's outside of the loop because it doesn't follow the same pattern */
.donut
display: inline-block
position: fixed
border-radius: 50%
visibility: hidden
transform: scale(50%)
@keyframes donut_1
0%
transform: scale(0%)
0.01%
transform: scale(4em)
95%
transform: scale(150%)
100%
transform: scale(40%)
visibility: visible
.donut:nth-child(1)
border: 2.75em solid #eee
width: 1em
height: 1em
animation: donut_1 6.6s cubic-bezier(.23,.74,.74,1.2) 0.8s 1 forwards
/* Setting up the variables: */
/* b = border width */
/* s = size (width and height of the circle) */
/* d = amount of donuts */
/* ti = animation timing */
/* de = delay start */
$b: 2
$s: 7
$d: 24
$ti: 4
$de: 4.3
$c: 10
@for $i from 2 through $d
@keyframes donut_#{$i}
0%
transform: scale(0%)
.01%
transform: scale(10%)
/* this is my effort to start animating from outside of the inner circle this doesn't seem to work... */
border: #{$b * 2}em solid #eee
/* my botched effort to start with fat rings */
80%
transform: scale(120%)
visibility: visible
border: #{$b}em solid #eee
/* then to have them thin out as they expand */
100%
transform: scale(40%)
visibility: visible
@for $i from 2 through $d
.donut:nth-child(#{$i})
animation: donut_#{$i} #{$ti}s cubic-bezier(.24,.79,.46,1.46) #{$de}s 1 forwards
border: #{$b}em solid #eee
width: #{$s}em
height: #{$s}em
$b: $b - 0.1
$s: $s 5
$de: $de - .18
$ti: $ti .2
And here’s the HTML — very simple! Thanks :nth-child!
<body>
<div class="container">
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
<div class="donut"></div>
</div>
</body>
So two big blockades.
Я не могу понять, как запустить внешние кольца, чтобы они начали расширяться из фиксированного положения за пределами внутреннего круга. (Я прокомментировал в коде свою неудачную попытку)
Я не могу понять математику, чтобы кольца начинали толстеть, а затем истончались, когда они расширялись. Прямо сейчас они начинают «толстеть», увеличиваются в размерах, а затем истончаются. Я знаю, что это связано с расширением масштабирования, но мне (уже два дня) трудно это понять.
По какой-то причине это не работает на codepen.io но вы можете увидеть рабочую версию по адресу atomu.me.
Я надеюсь, что кто-нибудь там сможет помочь брату!