使用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动画控制透明度)

相关推荐
鹏程十八少14 小时前
2.2026金三银四 Android Handler 完全指南:28道高频面试题 + 源码解析 + 图解 (一文通关)
android·前端·面试
大连好光景14 小时前
Fiddler、Wireshark、Charles三种抓包工具的对比
前端·fiddler·wireshark
gyx_这个杀手不太冷静14 小时前
大人工智能时代下前端界面全新开发模式的思考(五)
前端·架构·ai编程
qiao若huan喜14 小时前
12、webgl 基本概念 +满天星星眨眼睛
前端·信息可视化·webgl
陆枫Larry15 小时前
搞懂 package.json 和 package-lock.json
前端
竹林81815 小时前
Solana前端开发:从连接钱包到发送交易,我如何用@solana/web3.js搞定第一个DApp
前端·javascript
Cache技术分享15 小时前
385. Java IO API - Chmod 示例:模拟 chmod 命令的文件权限更改
前端·后端
沙振宇15 小时前
【Web】使用Vue3+PlayCanvas开发3D游戏(十一)渲染3D高斯泼溅效果
前端·游戏·3d
cool320015 小时前
4D实验八:Dubbo微服务 + 注册中心
前端·kubernetes
军军君0115 小时前
数字孪生监控大屏实战模板:商圈大数据监控
前端·javascript·vue.js·typescript·前端框架·echarts·three