赞
踩
向大家介绍如何使用 CSS 和关键帧动画创建一个可爱的蜡烛动画效果。这个动画效果可以用于节日祝福、生日祝福等场合,让网页更加有趣和生动。
- <!doctype html>
- <html>
-
- <head>
- <meta charset="utf-8">
- <title>纯css3卡通蜡烛小人动画特效演示</title>
- <link href="./css/datouwang.css" rel="stylesheet" type="text/css">
- </head>
-
- <body>
- <div class="wrapper">
- <div class="candles">
- <div class="light__wave"></div>
- <div class="candle1">
- <div class="candle1__body">
- <div class="candle1__eyes">
- <span class="candle1__eyes-one"></span>
- <span class="candle1__eyes-two"></span>
- </div>
- <div class="candle1__mouth"></div>
- </div>
- <div class="candle1__stick"></div>
- </div>
- <div class="candle2">
- <div class="candle2__body">
- <div class="candle2__eyes">
- <div class="candle2__eyes-one"></div>
- <div class="candle2__eyes-two"></div>
- </div>
- </div>
- <div class="candle2__stick"></div>
- </div>
- <div class="candle2__fire"></div>
- <div class="sparkles-one"></div>
- <div class="sparkles-two"></div>
- <div class="candle__smoke-one"></div>
- <div class="candle__smoke-two"></div>
- </div>
- <div class="floor"></div>
- </div>
- </body>
-
- </html>
通过<link>标签引入外部CSS文件datouwang.css,该文件包含了样式定义用于渲染页面元素。
.wrapper:整体容器,用于包裹所有元素。
.candles:蜡烛小人容器,包括蜡烛、火焰、眼睛、嘴巴等元素。
.light__wave:光波效果。
.candle1和.candle2:两根蜡烛,每根蜡烛包括蜡烛身体、眼睛、眼睛、眼睛、火焰以及支架等部分。
.candle1__body和.candle2__body:蜡烛的身体部分。
.candle1__eyes和.candle2__eyes:蜡烛的眼睛部分。
.candle1__eyes-one、.candle1__eyes-two、.candle2__eyes-one、.candle2__eyes-two:眼睛的具体元素。
.candle1__mouth:蜡烛1的嘴巴部分。
.candle1__stick和.candle2__stick:蜡烛的支架部分。
.candle2__fire:蜡烛2的火焰部分。
.sparkles-one和.sparkles-two:闪烁效果。
.candle__smoke-one和.candle__smoke-two:烟雾效果。
body
部分设置了背景颜色以及一个名为change-background
的动画,使背景颜色在两种不同的颜色之间循环变化。
.wrapper
是整个动画的容器,通过绝对定位将其放置在页面的中心位置,并进行缩放和偏移。
.floor
是一个代表地面的元素,也进行了绝对定位,并设置了阴影效果。
.candles
是蜡烛的容器,用于包裹所有蜡烛元素。
.candle1
和.candle2
分别代表两支蜡烛,它们都是绝对定位的白色长方体,通过设置不同的动画效果,让它们看起来像是在跳舞或者闪烁。
.candle1__stick
和.candle2__stick
是蜡烛的支架,使用绝对定位放置并进行了旋转和移动的动画效果。
.candle1__eyes
,.candle2__eyes
,.candle1__mouth
以及.candle__smoke-one
,.candle__smoke-two
等元素则是组成蜡烛的眼睛、嘴巴和烟雾等部分,通过不同的动画效果来模拟眨眼、摇晃和吐烟的效果。最后还有一些关键帧动画 (
@keyframes
) 的定义,用于实现上述提到的各种动画效果,比如眨眼、身体放大缩小、火焰舞动等。
-
- body {
- background-color: #FEF4AD;
- animation: change-background 3s infinite linear;
- }
-
- .wrapper {
- position: absolute;
- left: 50%;
- top: 70%;
- transform: scale(1.5, 1.5) translate(-50%, -50%);
- }
-
- .floor {
- position: absolute;
- left: 50%;
- top: 50%;
- width: 350px;
- height: 5px;
- background: #673C63;
- transform: translate(-50%, -50%);
- box-shadow: 0px 2px 5px #111;
- z-index: 2;
- }
-
- .candles {
- position: absolute;
- left: 50%;
- top: 50%;
- width: 250px;
- height: 150px;
- transform: translate(-50%, -100%);
- z-index: 1;
- }
-
- .candle1 {
- position: absolute;
- left: 50%;
- top: 50%;
- width: 35px;
- height: 100px;
- background: #fff;
- border: 3px solid #673C63;
- border-bottom: 0px;
- border-radius: 3px;
- transform-origin: center right;
- transform: translate(60%, -25%);
- box-shadow: -2px 0px 0px #95c6f2 inset;
- animation: expand-body 3s infinite linear;
- }
-
- .candle1__stick, .candle2__stick {
- position: absolute;
- left: 50%;
- top: 0%;
- width: 3px;
- height: 15px;
- background: #673C63;
- border-radius: 8px;
- transform: translate(-50%, -100%);
- }
-
- .candle2__stick {
- height: 12px;
- transform-origin: bottom center;
- animation: stick-animation 3s infinite linear;
- }
-
- .candle1__eyes, .candle2__eyes {
- position: absolute;
- left: 50%;
- top: 0%;
- width: 35px;
- height: 30px;
- transform: translate(-50%, 0%);
- }
-
- .candle1__eyes-one {
- position: absolute;
- left: 30%;
- top: 20%;
- width: 5px;
- height: 5px;
- border-radius: 100%;
- background: #673C63;
- transform: translate(-70%, 0%);
- animation: blink-eyes 3s infinite linear;
- }
-
- .candle1__eyes-two {
- position: absolute;
- left: 70%;
- top: 20%;
- width: 5px;
- height: 5px;
- border-radius: 100%;
- background: #673C63;
- transform: translate(-70%, 0%);
- animation: blink-eyes 3s infinite linear;
- }
-
- .candle1__mouth {
- position: absolute;
- left: 40%;
- top: 20%;
- width: 0px;
- height: 0px;
- border-radius: 20px;
- background: #673C63;
- transform: translate(-50%, -50%);
- animation: uff 3s infinite linear;
- }
-
- .candle__smoke-one {
- position: absolute;
- left: 30%;
- top: 50%;
- width: 30px;
- height: 3px;
- background: grey;
- transform: translate(-50%, -50%);
- animation: move-left 3s infinite linear;
- }
-
- .candle__smoke-two {
- position: absolute;
- left: 30%;
- top: 40%;
- width: 10px;
- height: 10px;
- border-radius: 10px;
- background: grey;
- transform: translate(-50%, -50%);
- animation: move-top 3s infinite linear;
- }
-
- .candle2 {
- position: absolute;
- left: 20%;
- top: 65%;
- width: 42px;
- height: 60px;
- background: #fff;
- border: 3px solid #673C63;
- border-bottom: 0px;
- border-radius: 3px;
- transform: translate(60%, -15%);
- transform-origin: center right;
- box-shadow: -2px 0px 0px #95c6f2 inset;
- animation: shake-left 3s infinite linear;
- }
-
- .candle2__eyes-one {
- position: absolute;
- left: 30%;
- top: 50%;
- width: 5px;
- height: 5px;
- display: inline-block;
- border: 0px solid #673C63;
- border-radius: 100%;
- float: left;
- background: #673C63;
- transform: translate(-80%, 0%);
- animation: changeto-lower 3s infinite linear;
- }
-
- .candle2__eyes-two {
- position: absolute;
- left: 70%;
- top: 50%;
- width: 5px;
- height: 5px;
- display: inline-block;
- border: 0px solid #673C63;
- border-radius: 100%;
- float: left;
- background: #673C63;
- transform: translate(-80%, 0%);
- animation: changeto-greater 3s infinite linear;
- }
-
- .light__wave {
- position: absolute;
- top: 35%;
- left: 35%;
- width: 75px;
- height: 75px;
- border-radius: 100%;
- z-index: 0;
- transform: translate(-25%, -50%) scale(2.5, 2.5);
- border: 2px solid rgba(255, 255, 255, 0.2);
- animation: expand-light 3s infinite linear;
- }
-
- .candle2__fire {
- position: absolute;
- top: 50%;
- left: 40%;
- display: block;
- width: 16px;
- height: 20px;
- background-color: red;
- border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
- background: #FF9800;
- transform: translate(-50%, -50%);
- animation: dance-fire 3s infinite linear;
- }
-
- @keyframes blink-eyes {
- 0%,35% {
- opacity: 1;
- transform: translate(-70%, 0%);
- }
- 36%,39% {
- opacity: 0;
- transform: translate(-70%, 0%);
- }
- 40% {
- opacity: 1;
- transform: translate(-70%, 0%);
- }
- 50%,65% {
- transform: translate(-140%, 0%);
- }
- 66% {
- transform: translate(-70%, 0%);
- }
- }
- @keyframes expand-body {
- 0%,40% {
- transform: scale(1, 1) translate(60%, -25%);
- }
- 45%,55% {
- transform: scale(1.1, 1.1) translate(60%, -28%);
- }
- 60% {
- transform: scale(0.89, 0.89) translate(60%, -25%);
- }
- 65% {
- transform: scale(1, 1) translate(60%, -25%);
- }
- 70% {
- transform: scale(0.95, 0.95) translate(60%, -25%);
- }
- 75% {
- transform: scale(1, 1) translate(60%, -25%);
- }
- }
- @keyframes uff {
- 0%,40% {
- width: 0px;
- height: 0px;
- }
- 50%,54% {
- width: 15px;
- height: 15px;
- left: 30%;
- }
- 59% {
- width: 5px;
- height: 5px;
- left: 20%;
- }
- 62% {
- width: 2px;
- height: 2px;
- left: 20%;
- }
- 67% {
- width: 0px;
- height: 0px;
- left: 30%;
- }
- }
- @keyframes change-background {
- 0%,59%,98%,100% {
- background: #FEF4AD;
- }
- 61%,97% {
- background: #F8AE39;
- }
- }
- @keyframes move-left {
- 0%,59%,100% {
- width: 0px;
- left: 40%;
- }
- 60% {
- width: 30px;
- left: 30%;
- }
- 68% {
- width: 0px;
- left: 20%;
- }
- }
- @keyframes move-top {
- 0%,64%,100% {
- width: 0px;
- height: 0px;
- top: 0%;
- }
- 65% {
- width: 10px;
- height: 10px;
- top: 40%;
- left: 40%;
- }
- 80% {
- width: 0px;
- height: 0px;
- top: 20%;
- }
- }
- @keyframes shake-left {
- 0%,40% {
- left: 20%;
- transform: translate(60%, -15%);
- }
- 50%,54% {
- left: 20%;
- transform: translate(60%, -15%);
- }
- 59% {
- left: 20%;
- transform: translate(60%, -15%);
- }
- 62% {
- left: 18%;
- transform: translate(60%, -15%);
- }
- 65% {
- left: 21%;
- transform: translate(60%, -15%);
- }
- 67% {
- left: 20%;
- transform: translate(60%, -15%);
- }
- 75% {
- left: 20%;
- transform: scale(1.15, 0.85) translate(60%, -15%);
- background: #fff;
- border-color: #673C63;
- }
- 91% {
- left: 20%;
- transform: scale(1.18, 0.82) translate(60%, -10%);
- background: #F44336;
- border-color: #F44336;
- box-shadow: -2px 0px 0px #F44336 inset;
- }
- 92% {
- left: 20%;
- transform: scale(0.85, 1.15) translate(60%, -15%);
- }
- 95% {
- left: 20%;
- transform: scale(1.05, 0.95) translate(60%, -15%);
- }
- 97% {
- left: 20%;
- transform: scale(1, 1) translate(60%, -15%);
- }
- }
- @keyframes stick-animation {
- 0%,40% {
- left: 50%;
- top: 0%;
- transform: translate(-50%, -100%);
- }
- 50%,54% {
- left: 50%;
- top: 0%;
- transform: translate(-50%, -100%);
- }
- 59% {
- left: 50%;
- top: 0%;
- transform: translate(-50%, -100%);
- }
- 62% {
- left: 50%;
- top: 0%;
- transform: rotateZ(-15deg) translate(-50%, -100%);
- }
- 65% {
- left: 50%;
- top: 0%;
- transform: rotateZ(15deg) translate(-50%, -100%);
- }
- 70% {
- left: 50%;
- top: 0%;
- transform: rotateZ(-5deg) translate(-50%, -100%);
- }
- 72% {
- left: 50%;
- top: 0%;
- transform: rotateZ(5deg) translate(-50%, -100%);
- }
- 74%,84% {
- left: 50%;
- top: 0%;
- transform: rotateZ(0deg) translate(-50%, -100%);
- }
- 85% {
- transform: rotateZ(180deg) translate(0%, 120%);
- }
- 92% {
- left: 50%;
- top: 0%;
- transform: translate(-50%, -100%);
- }
- }
- @keyframes expand-light {
- 10%,29%,59%,89% {
- transform: translate(-25%, -50%) scale(0, 0);
- border: 2px solid rgba(255, 255, 255, 0);
- }
- 90%,20%,50% {
- transform: translate(-25%, -50%) scale(1, 1);
- }
- 95%,96%,26%,27%,56%,57% {
- transform: translate(-25%, -50%) scale(2, 2);
- border: 2px solid rgba(255, 255, 255, 0.5);
- }
- 0%,28%,58%,100% {
- transform: translate(-25%, -50%) scale(2.5, 2.5);
- border: 2px solid rgba(255, 255, 255, 0.2);
- }
- }
- @keyframes dance-fire {
- 59%,89% {
- left: 40%;
- width: 0px;
- height: 0px;
- }
- 90%,0%,7%,15%,23%,31%,39%,47%,55% {
- left: 40.8%;
- width: 16px;
- height: 20px;
- background: #FFC107;
- }
- 94%,3%,11%,19%,27%,35%,43%,51%,58% {
- left: 41.2%;
- width: 16px;
- height: 20px;
- background: #FF9800;
- }
- }
- @keyframes changeto-lower {
- 0%,70%,90% {
- padding: 0px;
- display: inline-block;
- border-radius: 100%;
- background: #673C63;
- border-width: 0 0 0 0;
- border: 0px solid #673C63;
- transform: translate(-90%, 0%);
- }
- 71%,89% {
- background: none;
- border: solid #673C63;
- border-radius: 0px;
- border-width: 0 2px 2px 0;
- display: inline-block;
- padding: 1px;
- float: left;
- transform-origin: bottom left;
- transform: rotate(-45deg) translate(-50%, -65%);
- -webkit-transform: rotate(-45deg) translate(-50%, -65%);
- }
- }
- @keyframes changeto-greater {
- 0%,70%,90% {
- top: 50%;
- padding: 0px;
- display: inline-block;
- border-radius: 100%;
- background: #673C63;
- border-width: 0 0 0 0;
- border: 0px solid #673C63;
- transform: translate(-80%, 0%);
- }
- 71%,89% {
- top: 30%;
- background: none;
- border: solid #673C63;
- border-radius: 0px;
- border-width: 0 2px 2px 0;
- display: inline-block;
- padding: 1px;
- float: left;
- transform-origin: bottom left;
- transform: rotate(135deg) translate(-80%, 20%);
- -webkit-transform: rotate(135deg) translate(-80%, 20%);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。