使用Trae做一个简单的天狗食日动画效果试试

如何使用纯CSS制作"天狗食日"动画的详细步骤和代码实现,模拟日食过程中月亮(天狗)逐渐遮挡太阳的效果:

实现思路

  1. 创建太阳(黄色圆形)和月亮(黑色圆形)
  2. 使用CSS动画让月亮沿水平方向移动遮挡太阳
  3. 添加背景渐变色模拟日食时的天空明暗变化
  4. 使用滤镜增强光影效果

完整代码

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>天狗食日CSS动画</title>
    <style>
        .sky {
            position: relative;
            width: 100vw;
            height: 100vh;
            background: linear-gradient(to bottom, #1a2980, #26d0ce);
            overflow: hidden;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        
        .sun {
            width: 150px;
            height: 150px;
            background: radial-gradient(circle, #FFD700, #FF8C00);
            border-radius: 50%;
            box-shadow: 0 0 50px #FF4500, 0 0 100px rgba(255, 215, 0, 0.5);
            position: relative;
            z-index: 2;
        }
        
        .moon {
            width: 150px;
            height: 150px;
            background: #000;
            border-radius: 50%;
            position: absolute;
            z-index: 3;
            animation: eclipse 8s ease-in-out infinite;
            filter: blur(1px); /* 边缘柔化 */
        }
        
        .flare {
            position: absolute;
            width: 200px;
            height: 200px;
            background: radial-gradient(circle, transparent 60%, rgba(255, 69, 0, 0.3) 90%);
            border-radius: 50%;
            animation: pulse 3s ease-in-out infinite;
            z-index: 1;
        }
        
        @keyframes eclipse {
            0% { transform: translateX(-200px); }
            50% { transform: translateX(0); }
            100% { transform: translateX(200px); }
        }
        
        @keyframes pulse {
            0%, 100% { transform: scale(1); opacity: 0.7; }
            50% { transform: scale(1.2); opacity: 0.9; }
        }
        
        .stars {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            opacity: 0;
            animation: stars-appear 8s infinite;
        }
        
        @keyframes stars-appear {
            45%, 55% { opacity: 0.8; }
            0%, 40%, 60%, 100% { opacity: 0; }
        }
    </style>
</head>
<body>
    <div class="sky">
        <div class="stars"></div>
        <div class="flare"></div>
        <div class="sun"></div>
        <div class="moon"></div>
    </div>
    
    <script>
        // 动态创建星空背景
        document.addEventListener('DOMContentLoaded', () => {
            const stars = document.querySelector('.stars');
            for (let i = 0; i < 200; i++) {
                const star = document.createElement('div');
                star.style.position = 'absolute';
                star.style.width = `${Math.random() * 3}px`;
                star.style.height = star.style.width;
                star.style.background = '#FFF';
                star.style.borderRadius = '50%';
                star.style.top = `${Math.random() * 100}%`;
                star.style.left = `${Math.random() * 100}%`;
                star.style.boxShadow = '0 0 5px white';
                stars.appendChild(star);
            }
        });
    </script>
</body>
</html>

视频效果

核心原理说明

  1. 太阳实现
    radial-gradient创建发光效果,box-shadow模拟日冕

  2. 月亮移动动画
    @keyframes eclipse控制月亮从左到右的水平移动:

    css 复制代码
    @keyframes eclipse {
      0% { transform: translateX(-200px); }   /* 起始位置(左侧) */
      50% { transform: translateX(0); }      /* 完全遮挡太阳 */
      100% { transform: translateX(200px); } /* 移出右侧 */
    }
  3. 光影效果增强

    • .flare元素使用半透明渐变模拟日珥
    • filter: blur(1px)柔化月亮边缘
    • animation: pulse实现光晕脉动效果
  4. 星空特效

    JavaScript动态生成200个随机位置的白色圆点,在日全食阶段浮现(通过stars-appear动画控制透明度)

相关推荐
deli00733 分钟前
32K 上下文塞满后,AI 最先忘掉什么?120 轮对话实测
前端
deli0072 小时前
手机拍灯为什么有一条条黑纹?PWM 240Hz 实测
前端
wangruofeng6 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
wangruofeng6 小时前
给前端开发者的 100 个设计参考网站
前端·设计
星栈9 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技10 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户479492835691510 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马12 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng13 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding14 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js