दिल सीएसएस एनीमेशन का पालन


83

मैं केवल सीएसएस के साथ एक एनिमेटेड दिल पर काम कर रहा हूँ।

मैं चाहता हूं कि इसे 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>

इस फिडल को भी देखें ।


3
क्या कोई कारण है कि आपने प्रश्न में एकीकृत स्टैक स्निपेट के बजाय jsfiddle का उपयोग किया है? जहाँ तक मैं देख सकता हूँ स्टैक स्निपेट आपके उदाहरण के लिए ठीक काम करता है।
बकुरीउ १३'१६

जवाबों:


117

आप एनीमेशन में ठहराव को शामिल कर सकते हैं। इस तरह:

@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/

संपादित करें:

शुद्ध सीएसएस दिल के आकार के साथ काम करने का उदाहरण: https://jsfiddle.net/qLfg2mrd/



1
@ अनाम इसके लिए आपको धन्यवाद। मैंने अपने उत्तर में आपका लिंक जोड़ दिया।
रीन

मैं उस फिडेल बुकमार्क कर रहा हूँ! इसे करने का भयानक तरीका।
डेविड विल्किंसन

3
@DavidWilkinson यह एक बहुत :) बुकमार्क - css-tricks.com/examples/ShapesOfCSS :)
बेनामी

6
तुम्हारा मतलब है, ♥ ​​चरित्र? यह आसान है, बस करो &hearts;। उन सभी के लिए कोई ज़रूरत नहीं है transform
इस्माईल मिगुएल

35

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>


1
मुझे अंतिम परियोजना में शुद्ध सीएसएस के बजाय छवियों का उपयोग करने की आवश्यकता है। लेकिन धन्यवाद! मैं आपके एनीमेशन के समय का उपयोग कर सकता हूं, जो एकदम सही है!
फर्नांडो सूजा

कोई फर्क नहीं पड़ता। आप इस तरह से भी इमेज स्केल कर सकते हैं। बस एक कोशिश दे :)
जिनु कुरियन

क्या मैं इस तरह से छवियों को बदल सकता हूं या पृष्ठभूमि की छवि बदल सकता हूं?
फर्नांडो सूजा

@FernandoSouza yup कोशिश करो। अगर आपको कोई समस्या आती है तो मैं आपकी मदद करूंगा।
जिनु कुरियन १३'१६ को

मैं कोशिश कर रहा हूं, लेकिन पहले कुछ संरचना बदल रहा हूं क्योंकि दिल पर पाठ है, और इसे उसी आकार में रहना चाहिए।
फर्नांडो सूजा

22

मुझे केतन का जवाब पसंद है, लेकिन मैं इसे और अधिक यथार्थवादी बनाने के लिए दिल के एनीमेशन में सुधार करना चाहता था।

  • धड़कन होने पर दिल का आकार दोगुना नहीं होता है। आकार में 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>


6

विभिन्न टिप्पणियों और ♥ के उपयोग के आधार पर हम इसे प्राप्त करेंगे:

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>
  &hearts;
</div>


6

body{
  margin: 0;
  padding: 0;
  background: #1f1f1f;
}

body:before
{
  position: absolute;
  content: '';
  left: 50%;
  width: 50%;
  height: 100%;
  background: rgba(0,0,0,.2);

}

.center
{
  position: absolute;
  top:50%;
  left: 50%;
  background: #1f1f1f;
  transform: translate(-50%,-50%);
  padding: 100px;
  border: 5px solid white;
  border-radius: 100%;
  box-shadow:20px 20px 45px rgba(0,0,0,.4);
  z-index: 1;
  overflow: hidden;
}
.heart
{
  position: relative;
  width: 100px;
  height: 100px;
  background:#ff0036;
  transform: rotate(45deg) translate(10px,10px);
  animation: ani 1s linear infinite;
}
.heart:before
{
  content: '';
  width: 100%;
  height: 100%;
  background: #ff0036;
  position: absolute;
  top:-50%;
  left:0;
  border-radius: 50%;
}
.heart:after
{
  content:'';
  width: 100%;
  height: 100%;
  background: #ff0036;
  position: absolute;
  bottom:0;
  right:50%;
  border-radius: 50%;
}
.center:before
{
  content: '';
  position: absolute;
  top:0;
  left:-50%;
  width: 100%;
  height: 100%;
  background: rgba(0,0,0,.3);
}

@keyframes ani{
  0%{
    transform: rotate(45deg) translate(10px,10px) scale(1);
  }
  25%{
    transform: rotate(45deg) translate(10px,10px) scale(1);
  }
  30%{
    transform: rotate(45deg) translate(10px,10px) scale(1.4);
  }
  50%{
    transform: rotate(45deg) translate(10px,10px) scale(1.2);
  }
  70%{
    transform: rotate(45deg) translate(10px,10px) scale(1.4);
  }
  90%{
    transform: rotate(45deg) translate(10px,10px) scale(1);
  }
  100%{
    transform: rotate(45deg) translate(10px,10px) scale(1);
  }
}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>HeartBeat Animation</title>
    <link rel="stylesheet" href="Style.css" type="text/css">
  </head>
  <body>
    <div class="center">
      <div class="heart">
        
      </div>
    </div>
  </body>
</html>

उत्पादन

अधिक के लिए: दिल की धड़कन एनीमेशन


4

मुझे लगता है कि यह वही है जो आप अपनी छवि के लिए चाहते हैं। शीर्ष छवि की कोई आवश्यकता नहीं है। बस नीचे का उपयोग करें।

#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>


9
आपके दिल में Chrome पर एक हल्का अतालता है?

@LegoStormtroopr तो यह मेरे बस की बात नहीं है। क्रोम क्यों? क्यों?
जैका

2
मुझे यकीन नहीं है, यह एक कार्डिएक सिम्फिसिस साइनस हो सकता है, लेकिन आप बेहतर निदान के लिए एक सीएसएस विशेषज्ञ के साथ जांच करना चाहते हैं।

1

जिस प्रोजेक्ट पर मैं काम कर रहा था, उसके लिए मुझे इसकी जरूरत थी। मैं इसे यथासंभव यथार्थवादी बनाने की कोशिश कर रहा था, और यही मैं साथ आया हूं।

@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;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.