纯CSS创建心形翻转动画

首先,需要创建一个元素,代码如下

<!DOCTYPE html>
<html>  
    <meta charset="utf-8">
    <head>
        <title></title>
    </head>
    <body>
        <div id="bgCanvas">
            <div class="heart-shape"></div>
        </div>
    </body>
</html>

然后,为元素添加样式,变成心形,代码如下:

.heart-shape{
    /* 基础样式 */
    position: relative;
    width: 100px;
    height: 100px;
    background-color: #ff1414;

    /* 旋转 */
    -webkit-transform: rotate(45deg);  
    -moz-transform: rotate(45deg);  
    -ms-transform: rotate(45deg);  
    -o-transform: rotate(45deg);  
    transform: rotate(45deg);  

}

/* before和after的基础样式*/
.heart-shape:before,.heart-shape:after{
    position: absolute;
    content: '';
    width: 100px;
    height: 100px;
    -webkit-border-radius: 50%;  
    -moz-border-radius: 50%;  
    -o-border-radius: 50%;  
    border-radius: 50%; 
    background-color: #ff1414;

}

/* before的增强样式 */
.heart-shape:before{
    bottom: 0;
    left: -50px;
}

/* after的增强样式 */
.heart-shape:after{
    top: -50px;
    right: 0;
}

这里使用了:after和:before伪元素,创建了一个如下效果的心形:

这里写图片描述

然后使用@keyframs定义一个动画,代码如下:

/* 左心室动画 */
@keyframes heart-left
{
    0% {bottom: 0;left: -50%;}
    25% {bottom: 0;left: 50%;}
    50% {bottom: 0;left: 50%;}
    75% {bottom: 0;left: -50%;}

}

/* 右心室动画 */
@keyframes heart-right
{
    25%  {top: -50%;right: 0;}
    50%  {top: 50%;right: 0;}
    75%  {top: 50%;right: 0;}
    100%  {top: -50%;right: 0;}
}

/* Firefox */
@-moz-keyframes heart-left 
{

    0% {bottom: 0;left: -50%;}
    25% {bottom: 0;left: 50%;}
    50% {bottom: 0;left: 50%;}
    75% {bottom: 0;left: -50%;}
}

/* Safari 和 Chrome */
@-webkit-keyframes heart-left 
{
    0% {bottom: 0;left: -50%;}
    25% {bottom: 0;left: 50%;}
    50% {bottom: 0;left: 50%;}
    75% {bottom: 0;left: -50%;}
}

/* Opera */
@-o-keyframes heart-left 
{
    0% {bottom: 0;left: -50%;}
    25% {bottom: 0;left: 50%;}
    50% {bottom: 0;left: 50%;}
    75% {bottom: 0;left: -50%;}
}

/* 右边 */
@keyframes heart-right
{
    25%  {top: -50%;right: 0;}
    50%  {top: 50%;right: 0;}
    75%  {top: 50%;right: 0;}
    100%  {top: -50%;right: 0;}
}

/* Firefox */
@-moz-keyframes heart-right 
{
    25%  {top: -50%;right: 0;}
    50%  {top: 50%;right: 0;}
    75%  {top: 50%;right: 0;}
    100%  {top: -50%;right: 0;}
}

/* Safari 和 Chrome */
@-webkit-keyframes heart-right 
{
    25%  {top: -50%;right: 0;}
    50%  {top: 50%;right: 0;}
    75%  {top: 50%;right: 0;}
    100%  {top: -50%;right: 0;}
}

/* Opera */
@-o-keyframes heart-right 
{
    25%  {top: -50%;right: 0;}
    50%  {top: 50%;right: 0;}
    75%  {top: 50%;right: 0;}
    100%  {top: -50%;right: 0;}
}

错开时间改变心形左右两部分的位置就能够看起来是翻转效果。
最后使用animation属性分别引入动画,代码如下:

/* before的增强样式 */
.heart-shape:before{
    bottom: 0;
    left: -50px;

    /* 动画 */
    -webkit-animation: heart-left 6s;   /* Safari 和 Chrome */
    -moz-animation: heart-left 6s;  /* Firefox */
    -o-animation: heart-left 6s;    /* Opera */
    animation: heart-left 6s;

    /* 规定动画播放次数 infinite为无限循环*/
    -webkit-animation-iteration-count:infinite; /* Safari 和 Chrome */
    animation-iteration-count:infinite;

}

/* after的增强样式 */
.heart-shape:after{

    top: -50px;
    right: 0;

    /* 动画 */
    -moz-animation: heart-right 6s; /* Firefox */
    -webkit-animation: heart-right 6s;  /* Safari 和 Chrome */
    -o-animation: heart-right 6s;   /* Opera */
    animation: heart-right 6s;

    /* 规定动画播放次数 infinite为无限循环*/
    -webkit-animation-iteration-count:infinite; /* Safari 和 Chrome */
    animation-iteration-count:infinite;

}

这样就实现了心形的翻转动画。效果如下:

这里写图片描述

之后还加了一个JS点击事件,点击大心形的时候会变成随机个小心形分布:

var breakHeart = document.getElementsByClassName('heart-shape')[0];

var bgCanvas = document.getElementById('bgCanvas');

this.addEventListener('click',function(e){
    //随机数
    var randomNum = Math.round(Math.random()*50);

    for (var i =0;i < randomNum; i++) {
        //创建小心形
        var smallHeart = document.createElement('div');

        var rNum = Math.round(Math.random()*50);
        //添加类名
        smallHeart.className='small-heart';
        //插入到页面中
        bgCanvas.appendChild(smallHeart);
        //每次旋转不同角度
        smallHeart.style.transform ='rotate('+ rNum+'deg)';

        smallHeart.style.left = 160+2*rNum*9+'px';
        smallHeart.style.top = 100+rNum*i+'px';
    }

    breakHeart.style.display = 'none';

},false)

CSS代码:

.small-heart{

    /* 基础样式 */
    position: absolute;
    width: 20px;
    height: 20px;
    background-color: #ff1414;

    /* 旋转 */
    -webkit-transform: rotate(45deg);  
    -moz-transform: rotate(45deg);  
    -ms-transform: rotate(45deg);  
    -o-transform: rotate(45deg);  
    transform: rotate(45deg);  


}

/* before和after的基础样式*/
.small-heart:before,.small-heart:after{
    position: absolute;
    content: '';
    width: 20px;
    height: 20px;
    -webkit-border-radius: 50%;  
    -moz-border-radius: 50%;  
    -o-border-radius: 50%;  
    border-radius: 50%; 
    background-color: #ff1414;

}

/* before的增强样式 */
.small-heart:before{
    bottom: 0;
    left: -50%;
}

/* after的增强样式 */
.small-heart:after{
    top: -50%;
    right: 0;
}

点击之后的效果:

这里写图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值