纯CSS实现背景渐变、球和阶梯的跳动

纯CSS实现背景渐变、球和阶梯的跳动

作者:马光佳
撰写时间:2019.1.17
开发工具与关键技术:MicrossftVisualStudio、animation与@keyframes的配合使用

  • 背景动画渐变
    (1)background-size:100%时的背景图片
    先把背景颜色设置为100%,颜色的分布图如下:
    在这里插入图片描述
    代码如下:
  • 把body设置为最大的背景,背景有五种颜色,都设置半透明,还让每一种颜色都有45度的斜度,并且让每一种颜色都有自己的渐散范围(度);代码已注释
body {
   height: 100%;
   display: flex;
   align-items: center;/*垂直对齐*/
   justify-content: center;/*内容对齐*/
   /*linear-gradient:线性渐变;设置每一种颜色有一个斜度并且透明*/
   background: linear-gradient(45deg,rgba(111, 199, 181, 0.82) 0%,rgba(19, 189, 206, 0.82), 20%,rgba(0, 148, 217, 0.82) 40%, rgba(90, 54, 148, 0.82) 60%, rgba(238, 77, 116, 0.82) 80%, rgba(245, 140, 88, 0.82) 100%);            
   background-size:100%;/* 将背景放大 */           
   background-position: 0% 100%; /* 设置定位显示背景左下角颜色区域 */
   position: relative;            
   animation: gradient 7.5s ease-in-out infinite;/* 设置无限轮播动画 */
}    

(2)background-size:400%时的背景图片
把背景颜色设置为400%,颜色的分布图如下:
在这里插入图片描述
代码如下:

  • 把body的背景放大为400%,结合animation与@keyframes的使用,使得背景按固定的方向以无限循环的状态展示动画效果,代码已注释
body {
     height: 100%;
     display: flex;
     align-items: center;
     justify-content: center;
     /*linear-gradient:线性渐变;设置每一种颜色有一个斜度并且透明*/
     background: linear-gradient(45deg,rgba(111, 199, 181, 0.82) 0%,rgba(19, 189, 206, 0.82), 20%,rgba(0, 148, 217, 0.82) 40%, rgba(90, 54, 148, 0.82) 60%, rgba(238, 77, 116, 0.82) 80%, rgba(245, 140, 88, 0.82) 100%);            
     background-size: 400%;/* 将背景放大 */           
     background-position: 0% 100%; /* 设置定位显示背景左下角颜色区域 */
     position: relative;            
     animation: gradient 7.5s ease-in-out infinite;/* 设置加速然后减速的轮播无限动画并且来回的时间为7.5s*/
 }        
 /*设置gradient在0%-100%之间的运动状态*/
 @keyframes gradient {
     0% {
         background-position: 0% 100%;
     }
     /*线性背景从左下角以匀速往右上角做渐变运动*/
     50% {
         background-position: 100% 0%;
     }
     /*线性背景从右上角以匀速往左下角做渐变运动*/
     100% {
         background-position: 0% 100%;
     }
 }
  1. 球和阶梯的动画跳动
    (1)搭建五根柱子和球
    搭建好的图片如下:
    在这里插入图片描述
    柱子和球的结构
    代码如下:
<div class="loader"> 
     @*第一条柱子*@
     <div class="loader_bar"></div>
     @*第二条柱子*@
     <div class="loader_bar"></div>
     @*第三条柱子*@
     <div class="loader_bar"></div>
     @*第四条柱子*@
     <div class="loader_bar"></div>
     @*第五条柱子*@
     <div class="loader_bar"></div>   
     @*球*@    
     <div class="loader_ball"></div>
</div>

柱子高度的设置:
transform:scale(x,y)改变y轴就是改变高度,原本高度为1,以(0.2,0.4,0.6,0.8,1)分别设置第一条柱子到最后一条柱子的高度,并且要设置每一根柱子以底部对齐(transform-origin:bottom;)形成一个规范的阶梯形状
代码如下:

 /*柱子的样式*/
.loader_bar{
    width:10px;
    height:50%;
    background-color:#fff;
    position:absolute;
    bottom:0px;
    transform-origin:bottom;/*起始点对齐*/
    box-shadow:1px 1px 0 rgba(0,0,0,0.2);
}
/*球的样式*/
.loader_ball{
    width:10px;
    height:10px;
    border-radius:50%;
    background:#fff;
    position:absolute;
    bottom:10px;
    left:0px;
    animation:ball 4s infinite;/*动画*/
}
 .loader_bar:nth-child(1){/*第一条柱子*/
     left:0;
     transform:scale(1,0.2);/*改变y轴的高度*/
     animation:barUp1 4s infinite;/*让架构(barUp1)在4s无限运动*/
        }
 .loader_bar:nth-child(2){/*第二条柱子*/
     left:15px; 
     transform:scale(1,0.4);
     animation:barUp2 4s infinite;
 }
 .loader_bar:nth-child(3){/*第三条柱子*/
     left:30px;
     transform:scale(1,0.6);
     animation:barUp3 4s infinite;
 }
  .loader_bar:nth-child(4){/*第四条柱子*/
     left:45px;
     transform:scale(1,0.8);
     animation:barUp4 4s infinite;
 }
 .loader_bar:nth-child(5){/*第五条柱子*/
     left:60px;
     transform:scale(1,1);
     animation:barUp5 4s infinite;/*无限动画*/
 }
  1. 球以匀速无限循环的状态代码如下
    上面设置球(animation:ball 4s infinite;)以变量ball在4s做无限循环运动,然而用(@keyframes ball)的配合,让球做固定线路无限运动
    代码如下:
@keyframes ball{
 /*球跳的去程*/
  0%{
       transform:translate(0,0);
  }         
  5%{
      transform:translate(8px,-14px);
  }
  10%{
  /*实现踩下的效果*/
      transform:translate(15px,-10px);
  }
  15%{
      transform:translate(23px,-24px);              
  }
  20%{
   /*实现踩下的效果*/
      transform:translate(30px,-20px);
  }
  25%{
      transform:translate(38px,-34px);
  }
  30%{
   /*实现踩下的效果*/
      transform:translate(45px,-30px);
  }
  35%{
      transform:translate(53px,-44px);
  }
  40%{
   /*实现踩下的效果*/
      transform:translate(60px,-40px);
  }         
  50%{
      transform:translate(60px,0px);
  }
  /*球跳的回程*/
  55%{
      transform:translate(53px,-14px)
  }
  60%{
   /*实现踩下的效果*/
       transform:translate(45px,-10px)
   }
  65%{
       transform:translate(37px,-24px)
    }
  70%{
   /*实现踩下的效果*/
       transform:translate(30px,-20px)
   }
  75%{
       transform:translate(22px,-34px)
     }
  80%{
   /*实现踩下的效果*/
       transform:translate(15px,-30px)
     }
  85%{
       transform:translate(7px,-44px)
     }
  90%{
   /*实现踩下的效果*/
       transform:translate(0px,-40px)
     }
 100%{
       transform:translate(0,0)
     }
 }

1. 实现踩下效果的一个思路图

在这里插入图片描述

2. 无踩下效果的思路图

在这里插入图片描述

  • 柱子高度在4s后的高度变化代码如下:
    上面已设置每一个柱子都有一个变量(animation:barUp1 4s infinite;)去结合(@keyframes)的使用,设置百分百来改变柱子在那一刻的高度,并且用代码设置:(transform:scale(x,y)
    代码如下:
@keyframes barUp1{/*第一条柱子*/
    0%{/*从左开始运动*/
        transform:scale(1,0.2);/*当球运动4s内时柱子高度为原来的0.2倍*/
    }
    40%{
        transform:scale(1,0.2);/*当球运动4s内时柱子高度为原来的0.2倍*/
    }
    50%{/*4s后结束,球将从右以0s开始运动*/
        transform:scale(1,1)/*当球运动4s时柱子高度变成原来的高度*/
    }
    90%{
        transform:scale(1,1);/*当球运动4s内时柱子高度为原来的高度*/
    }
    100%{
        transform:scale(1,0.2);/*当球运动4s时柱子高度变成原来的0.2倍*/
    }
}

@keyframes barUp2{/*第二条柱子*/
    0%{/*从左开始运动*/
        transform:scale(1,0.4);/*当球运动4s内时柱子高度为原来的0.4倍*/
    }
    40%{
        transform:scale(1,0.4);
    }
    50%{/*4s后结束,球将从右以0s开始运动*/
        transform:scale(1,0.8);/*当球运动4s时柱子高度变成原来的0.8倍*/
    }
    90%{
        transform:scale(1,0.8);
    }
    100%{
        transform:scale(1,0.4);
    }
}

@keyframes barUp3{/*第三条柱子*/
    0%{/*从左开始运动*/
        transform:scale(1,0.6);/*当球运动4s内时柱子高度为原来的0.6倍*/
    }             
    100%{
        transform:scale(1,0.6);
    }
}

@keyframes barUp4{/*第四条柱子*/
    0%{/*从左开始运动*/
        transform:scale(1,0.8);/*当球运动4s内时柱子高度为原来的0.8倍*/
    }
    40%{
        transform:scale(1,0.8);
    }
    50%{/*4s后结束,球将从右以0s开始运动*/
        transform:scale(1,0.4);/*当球运动4s时柱子高度变成原来的0.4倍*/
    }
    90%{
        transform:scale(1,0.4);
    }
    100%{
        transform:scale(1,0.8);/*当球运动4s时柱子高度为原来的0.8倍*/
    }
}


@keyframes barUp5{/*第五条柱子*/
    0%{/*从左开始运动*/
        transform:scale(1,1);/*当球运动4s内时柱子高度为原来的高度*/
    }
    40%{
        transform:scale(1,1);
    }
    50%{/*4s后结束,球将从右以0s开始运动*/
        transform:scale(1,0.2);/*当球运动4s时柱子高度变成原来的0.2倍*/
    }
    90%{
        transform:scale(1,0.2);
    }
    100%{
        transform:scale(1,1);/*当球运动4s时柱子高度为原来的高度*/
    }
}

效果图

在这里插入图片描述

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值