如何使用纯CSS3实现一个沙漏动画

要实现一个沙漏动画,我们首先需要实现一个漏斗的几何形状。

漏斗图形

我们接着把漏斗拆分成3个简单图形:一个三角形,一个倒置三角形和中间的管道(垂直线)。

那么问题就简化为实现三角形和直线。

要实现三角形很简单,有模式可套用。

即使用零宽高的元素,设置1条边带颜色,相交的2条边为透明。这主要利用了颜色渲染区域在边界交接处按对角线平分的规则。

#bottom {
    border-right: 20px solid transparent;
    border-bottom: 20px solid #f57323;
    border-left: 20px solid transparent;
    height: 0px;
    width: 1px;
}

注意上面的width属性不是0而是1px,这是因为我们实际上需要的是带一点点秃顶的三角形(梯形),所以我们把width设置成1px。

同样我们可以实现一个倒置的三角形:

#top {
    border-top: 20px solid #f57323;
    border-right: 20px solid transparent;
    border-left: 20px solid transparent;
    height: 0px;
    width: 1px;
}
接着我们同样利用带一条边的元素来创建一根垂直线:

#line {
    border-left: 1px solid #f57323;
    height: 0px;
    width: 0px;
    position: absolute;
    top: 20px;
    left: 20px;
}
这样一个静态的漏斗就创建好了,如下所示:


添加动画
现在我们来给漏斗添加动画,漏斗的整个过程可以分解为3个动画:顶部变小、底部变大以及一个倒置(重来)。

前两者可以使用transform: scale方法,后者使用transform: rotate方法。另外我们给两个三角形设置变换原点为底边中心点处。

#top,#bottom{
  transform-origin: 50% 100%; //设置变换原点为底边中心点处
}
#bottom{
  transform: scale(0); //设置底三角形初始为0
}
@keyframes top {
    100% {
        transform: scale(0); //顶三角形从1到0
    }
}
@keyframes bottom {
    100% {
        transform: scale(1); //底三角形从0到1
    }
}
@keyframes loader { //整个倒转
    99% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(180deg);
    }
}
在线实例

你可以在线自己试试看

http://wow.techbrood.com/fiddle/1511


by iefreer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值