创建 CSS3 火焰效果可以通过组合 CSS 动画、伪元素 和 渐变 来实现。以下是一个简单的实现步骤,展示如何制作动态火焰效果
1. HTML 结构
我们只需要一个简单的 div 容器:
<div class="fire"></div>
2. CSS 实现
基础样式
使用 position: absolute 和渐变背景色来设置火焰的颜色层次。
body {
margin: 0;
background: black; /* 背景颜色模拟夜晚 */
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.fire {
position: relative;
width: 50px;
height: 80px;
border-radius: 50%; /* 圆润的形状 */
background: radial-gradient(circle, #ff4500, #ff8c00, transparent);
animation: flicker 0.2s infinite ease-in-out;
box-shadow: 0 0 30px rgba(255, 69, 0, 0.6);
}
动画火焰抖动
通过 @keyframes 来模拟火焰跳动的效果:
@keyframes flicker {
0%, 100% {
transform: scale(1) translateY(0);
opacity: 1;
}
50% {
transform: scale(1.2) translateY(-10px); /* 火焰抖动并缩放 */
opacity: 0.8;
}
}
添加火焰层次
使用伪元素(::before 和 ::after)来叠加多层火焰:
.fire::before,
.fire::after {
content: '';
position: absolute;
border-radius: 50%;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: radial-gradient(circle, #ffa500, #ff4500, transparent);
animation: flicker 0.3s infinite ease-in-out;
}
.fire::before {
width: 70%;
height: 70%;
top: 15%;
left: 15%;
background: radial-gradient(circle, #ff6347, #ff4500, transparent);
animation-duration: 0.25s;
}
3. 添加更复杂的动画效果
通过叠加火焰的多层渐变,进一步增强火焰效果:
.fire {
background: radial-gradient(circle, #ff4500, #ff8c00, transparent);
box-shadow: 0 0 30px rgba(255, 69, 0, 0.6);
position: relative;
animation: flicker 0.3s infinite ease-in-out;
}
.fire::before {
content: '';
position: absolute;
top: -30px;
left: -20px;
width: 70px;
height: 100px;
border-radius: 50%;
background: radial-gradient(circle, #ffa500, #ff4500, transparent);
opacity: 0.7;
animation: flicker 0.4s infinite ease-in-out;
}
.fire::after {
content: '';
position: absolute;
top: -40px;
left: -25px;
width: 100px;
height: 140px;
border-radius: 50%;
background: radial-gradient(circle, #ffff00, #ffa500, transparent);
opacity: 0.5;
animation: flicker 0.5s infinite ease-in-out;
}
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS Fire Effect</title>
<style>
body {
margin: 0;
background: black;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.fire {
position: relative;
width: 50px;
height: 80px;
border-radius: 50%;
background: radial-gradient(circle, #ff4500, #ff8c00, transparent);
animation: flicker 0.2s infinite ease-in-out;
box-shadow: 0 0 30px rgba(255, 69, 0, 0.6);
}
@keyframes flicker {
0%, 100% {
transform: scale(1) translateY(0);
opacity: 1;
}
50% {
transform: scale(1.2) translateY(-10px);
opacity: 0.8;
}
}
.fire::before,
.fire::after {
content: '';
position: absolute;
border-radius: 50%;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: radial-gradient(circle, #ffa500, #ff4500, transparent);
animation: flicker 0.3s infinite ease-in-out;
}
.fire::before {
width: 70%;
height: 70%;
top: 15%;
left: 15%;
background: radial-gradient(circle, #ff6347, #ff4500, transparent);
animation-duration: 0.25s;
}
</style>
</head>
<body>
<div class="fire"></div>
</body>
</html>
效果预览
运行上述代码后,您会看到一个动态火焰效果,火焰会随着时间微微跳动。
可扩展性
颜色调整:更改 radial-gradient 中的颜色,可以生成不同风格的火焰(如蓝色火焰)。
大小调整:修改 .fire 的 width 和 height,调整火焰的大小。
添加粒子效果:结合 CSS 粒子动画(如火花)进一步增强视觉效果。
如果需要更多高级效果,可以结合 SVG 或 WebGL 创建更逼真的火焰动画。