Пульсирующее сердце CSS анимация
Я работаю над анимированным сердцем только с CSS.
Я хочу, чтобы он пульсировал 2 раза, сделайте небольшой перерыв, а затем повторите его снова.
что у меня сейчас:
small ==> big ==> small ==> repeat animation
то, что я собираюсь:
small ==> big ==> small ==> big ==> small ==> pause ==> repeat animation
как я могу это сделать?
мой код :
#button{
width:450px;
height:450px;
position:relative;
top:48px;
margin:0 auto;
text-align:center;
}
#heart img{
position:absolute;
left:0;
right:0;
margin:0 auto;
-webkit-transition: opacity 7s ease-in-out;
-moz-transition: opacity 7s ease-in-out;
-o-transition: opacity 7s ease-in-out;
transition: opacity 7s ease-in-out;}
@keyframes heartFadeInOut {
0% {
opacity:1;
}
14% {
opacity:1;
}
28% {
opacity:0;
}
42% {
opacity:0;
}
70% {
opacity:0;
}
}
#heart img.top {
animation-name: heartFadeInOut;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
animation-duration: 1s;
animation-direction: alternate;
}<div id="heart" >
<img class="bottom" src="https://goo.gl/nN8Haf" width="100px">
<img class="top" src="https://goo.gl/IIW1KE" width="100px">
</div>см. также эта скрипка.
6 ответов:
вы можете включить паузу в анимации. Вот так:
@keyframes heartbeat { 0% { transform: scale( .75 ); } 20% { transform: scale( 1 ); } 40% { transform: scale( .75 ); } 60% { transform: scale( 1 ); } 80% { transform: scale( .75 ); } 100% { transform: scale( .75 ); } }рабочий пример: https://jsfiddle.net/t7f97kf4/
@keyframes heartbeat { 0% { transform: scale( .75 ); } 20% { transform: scale( 1 ); } 40% { transform: scale( .75 ); } 60% { transform: scale( 1 ); } 80% { transform: scale( .75 ); } 100% { transform: scale( .75 ); } } div { background-color: red; width: 50px; height: 50px; animation: heartbeat 1s infinite; }<div> Heart </div>Edit:
рабочий пример с чистой формой сердца CSS: https://jsfiddle.net/qLfg2mrd/
@keyframes heartbeat { 0% { transform: scale( .75); } 20% { transform: scale( 1); } 40% { transform: scale( .75); } 60% { transform: scale( 1); } 80% { transform: scale( .75); } 100% { transform: scale( .75); } } #heart { position: relative; width: 100px; height: 90px; animation: heartbeat 1s infinite; } #heart:before, #heart:after { position: absolute; content: ""; left: 50px; top: 0; width: 50px; height: 80px; background: red; -moz-border-radius: 50px 50px 0 0; border-radius: 50px 50px 0 0; -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); -ms-transform: rotate(-45deg); -o-transform: rotate(-45deg); transform: rotate(-45deg); -webkit-transform-origin: 0 100%; -moz-transform-origin: 0 100%; -ms-transform-origin: 0 100%; -o-transform-origin: 0 100%; transform-origin: 0 100%; } #heart:after { left: 0; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -ms-transform: rotate(45deg); -o-transform: rotate(45deg); transform: rotate(45deg); -webkit-transform-origin: 100% 100%; -moz-transform-origin: 100% 100%; -ms-transform-origin: 100% 100%; -o-transform-origin: 100% 100%; transform-origin: 100% 100%; }<div id="heart"></div>
пульс 2 раза, сделайте небольшой перерыв, а затем повторите его снова
попробуйте это. Идем с анимацией
opacity- это плохой выбор.transform: scale()будет делать эту работу..heart:before { display: block; position: absolute; top: 0; left: 0; width: 100%; font-family: 'icons'; font-size: 21px; text-indent: 0; font-variant: normal; line-height: 21px; } .heart { position: relative; width: 500px; overflow: inherit; margin: 50px auto; list-style: none; -webkit-animation: animateHeart 2.5s infinite; animation: animateHeart 2.5s infinite; } .heart:before, .heart:after { position: absolute; content: ''; top: 0; left: 50%; width: 120px; height: 200px; background: red; border-radius: 100px 100px 0 0; -webkit-transform: rotate(-45deg) translateZ(0); transform: rotate(-45deg) translateZ(0); -webkit-transform-origin: 0 100%; transform-origin: 0 100%; } .heart:after { left: 26%; -webkit-transform: rotate(45deg) translateZ(0); transform: rotate(45deg) translateZ(0); -webkit-transform-origin: 100% 100%; transform-origin: 100% 100%; } @-webkit-keyframes animateHeart { 0% { -webkit-transform: scale(0.8); } 5% { -webkit-transform: scale(0.9); } 10% { -webkit-transform: scale(0.8); } 15% { -webkit-transform: scale(1); } 50% { -webkit-transform: scale(0.8); } 100% { -webkit-transform: scale(0.8); } } @keyframes animateHeart { 0% { transform: scale(0.8); } 5% { transform: scale(0.9); } 10% { transform: scale(0.8); } 15% { transform: scale(1); } 50% { transform: scale(0.8); } 100% { transform: scale(0.8); } } span { font-family: 'Cantora One', sans-serif; font-size: 64px; position: absolute; top: 165px; }<div class="heart"> </div>
мне нравится Кетанответ, но я хотел улучшить анимацию сердца, чтобы сделать его более реалистичным.
- сердце не удваивается в размерах, когда оно бьется. 10% изменение размера выглядит лучше для меня.
- мне нравится, что он становится больше и меньше
- когда он совсем перестает двигаться, он кажется мне мертвым. Даже когда он не бьется, он должен немного расширяться или сжиматься
- Я удалил " альтернативный направления " код, так что он работает одинаково через каждый раз
- у меня явно есть конец начала сердца и в нормальном масштабе (1) и есть анимация в середине последовательности. Мне это кажется более ясным.
#heart img{ position:absolute; left:0; right:0; margin:0 auto; } @keyframes heartFadeInOut { 0% {transform: scale(1);} 25% {transform: scale(.97);} 35% {transform: scale(.9);} 45% {transform: scale(1.1);} 55% {transform: scale(.9);} 65% {transform: scale(1.1);} 75% {transform: scale(1.03);} 100% {transform: scale(1);} } #heart img.bottom { animation-name: heartFadeInOut; animation-iteration-count: infinite; animation-duration: 2s; }<div id="heart" > <img class="bottom" src="https://i.stack.imgur.com/iBCpb.png" width="100px"> </div>
на основе различных комментариев и использования ♥ мы получим это:
body { font-size: 40pt; color: red; } @keyframes heartbeat { 0% { font-size: .75em; } 20% { font-size: 1em; } 40% { font-size: .75em; } 60% { font-size: 1em; } 80% { font-size: .75em; } 100% { font-size: .75em; } } div { animation: heartbeat 1s infinite; }<div> ♥ </div>
Я думаю, что это то, что вы хотите для анимации изображения. Там нет необходимости в верхнем изображении. Просто используйте дно.
#button{ width:450px; height:450px; position:relative; top:48px; margin:0 auto; text-align:center; } #heart img{ position:absolute; left:0; right:0; margin:0 auto; } @keyframes heartFadeInOut { 0% { transform: scale( .5 ); } 20% { transform: scale( 1 ); } 40% { transform: scale( .5 ); } 60% { transform: scale( 1 ); } 80% { transform: scale( .5 ); } 100% { transform: scale( .5 ); } } #heart img.bottom { animation-name: heartFadeInOut; animation-iteration-count: infinite; animation-duration: 1.5s; animation-direction: alternate; }<div id="heart" > <img class="bottom" src="https://goo.gl/nN8Haf" width="100px"> </div>
мне это было нужно для проекта, над которым я работал. Я пытался сделать так, чтобы это выглядело как можно более реалистично, и вот что я придумал.
@keyframes heartbeat { 0% { transform: scale( .95 ); } 20% { transform: scale( .97 ); } 30% { transform: scale( .95 ); } 40% { transform: scale( 1 ); } 100% { transform: scale( .95 ); } }
animation: heartbeat 1s infinite;
Comments