css制作雪花
使用CSS制作雪花效果
通过CSS的伪元素、动画和变换属性可以创建动态雪花效果。以下是几种实现方法:
基础雪花形状
使用伪元素和旋转创建六边形雪花:
.snowflake {
width: 10px;
height: 10px;
position: relative;
}
.snowflake:before, .snowflake:after {
content: "";
position: absolute;
background: white;
}
.snowflake:before {
width: 6px;
height: 6px;
left: 2px;
top: 2px;
transform: rotate(30deg);
}
.snowflake:after {
width: 10px;
height: 2px;
left: 0;
top: 4px;
}
下落动画
添加垂直下落和摇摆效果:
@keyframes fall {
0% { transform: translateY(-100px) rotate(0deg); }
100% { transform: translateY(100vh) rotate(360deg); }
}
.snowflake {
animation: fall 5s linear infinite;
animation-delay: calc(var(--delay) * 1s);
}
多雪花系统
通过HTML/CSS批量生成随机雪花:
<div class="snow-container"></div>
// 生成30个随机雪花
const container = document.querySelector('.snow-container');
for(let i=0; i<30; i++) {
const flake = document.createElement('div');
flake.className = 'snowflake';
flake.style.left = `${Math.random()*100}vw`;
flake.style.setProperty('--delay', Math.random());
flake.style.opacity = Math.random();
flake.style.animationDuration = `${5 + Math.random()*5}s`;
container.appendChild(flake);
}
进阶3D效果
添加透视和尺寸变化模拟深度:
.snowflake {
transform-style: preserve-3d;
transform: scale(var(--scale));
}
@keyframes fall {
0% { transform: translate3d(0,-100px,0) scale(0.3); }
100% { transform: translate3d(0,100vh,100px) scale(1); }
}
优化建议
- 使用will-change属性提升性能:
will-change: transform, opacity; - 减少雪花数量在移动端设备
- 添加模糊滤镜增强真实感:
filter: blur(1px); - 通过CSS变量控制颜色和大小变化
完整实现需要配合HTML结构,将雪花元素放置在固定定位的容器内,并设置合适的z-index层级。可通过JavaScript动态调整雪花数量、速度和大小参数以适应不同场景需求。







