AI摘要

制作一个有趣的动态404页面,包含两个山顶洞人打架动画,使用纯CSS实现,支持颜色和动画速度自定义,适用于所有现代浏览器。

🎭 动态404页面制作教程 - 会动的山顶洞人

💡 让404页面不再枯燥! 今天教大家制作一个有趣的动态404页面,两个可爱的山顶洞人在打架,绝对让你的访客眼前一亮!

🎯 效果预览

动态404效果图

🎬 动画特色:两个山顶洞人手持棍棒互相"攻击",配有404大数字背景,生动有趣

🚀 快速开始

📁 文件结构

404页面/
├── index.html    # 主页面文件
└── style.css     # 样式文件

⚡ 使用方法

  1. 创建index.html文件,复制下方HTML代码
  2. 创建style.css文件,复制下方CSS代码
  3. 将两个文件放在同一目录下
  4. 通过浏览器打开index.html即可查看效果

📝 完整代码

🏗️ HTML结构

<!DOCTYPE html>
<html lang="cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>404 - 页面不存在</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <!-- 404大数字 -->
    <div class="text"><p>404</p></div>
    
    <!-- 动画容器 -->
    <div class="container">
        <!-- 第一个山顶洞人 -->
        <div class="caveman">
            <div class="leg">
                <div class="foot">
                    <div class="fingers"></div>
                </div>
            </div>
            <div class="leg">
                <div class="foot">
                    <div class="fingers"></div>
                </div>
            </div>
            <div class="shape">
                <div class="circle"></div>
                <div class="circle"></div>
            </div>
            <div class="head">
                <div class="eye">
                    <div class="nose"></div>
                </div>
                <div class="mouth"></div>
            </div>
            <div class="arm-right">
                <div class="club"></div>
            </div>
        </div>
        
        <!-- 第二个山顶洞人 -->
        <div class="caveman">
            <div class="leg">
                <div class="foot">
                    <div class="fingers"></div>
                </div>
            </div>
            <div class="leg">
                <div class="foot">
                    <div class="fingers"></div>
                </div>
            </div>
            <div class="shape">
                <div class="circle"></div>
                <div class="circle"></div>
            </div>
            <div class="head">
                <div class="eye">
                    <div class="nose"></div>
                </div>
                <div class="mouth"></div>
            </div>
            <div class="arm-right">
                <div class="club"></div>
            </div>
        </div>
    </div>
</body>
</html>

🎨 CSS样式详解

🌈 基础样式设置

/* 重置基础样式 */
body {
    background-color: #FF7F2E;  /* 温暖的橙色背景 */
    font-family: "Concert One", cursive;
    margin: 0;
    overflow: hidden;           /* 隐藏滚动条 */
    padding: 0;
}

🔢 404数字样式

.text {
    position: absolute;
    left: 50%;
    top: 40%;
    transform: translate(-50%, -50%);
    color: rgba(19, 36, 44, 0.1);
    font-size: 30em;
    text-align: center;
}

🎭 动画容器

.container {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    height: 300px;
    width: 500px;
}

/* 地面阴影效果 */
.container:after {
    content: "";
    position: absolute;
    background-color: rgba(19, 36, 44, 0.1);
    border-radius: 12px;
    bottom: 40px;
    left: 80px;
    width: 350px;
    height: 12px;
    z-index: -1;
}

👤 山顶洞人结构

部位颜色代码功能说明
头部#13242C深灰色头部
身体#D13433红色身体
皮肤#EAB08C浅棕色皮肤
阴影#B2524D深红色阴影

⚡ 动画效果解析

🔄 手臂旋转动画

@keyframes arm-anima {
    0% { transform: rotate(0); }
    100% { transform: rotate(-360deg); }
}

.caveman:nth-child(1) .arm-right {
    animation: arm-anima 1.2s infinite cubic-bezier(0.55, 0.01, 0.16, 1.34);
}

.caveman:nth-child(2) .arm-right {
    animation: arm-anima 1.2s infinite cubic-bezier(0.55, 0.01, 0.16, 1.34);
    animation-delay: 0.6s;  /* 错开动画时间 */
}

👀 眨眼动画

@keyframes eye-anima {
    0%, 42% { height: 5px; }
    45% { height: 1px; }      /* 眨眼效果 */
    100% { height: 5px; }
}

👤 头部上下动画

@keyframes head-anima {
    0%, 42% { top: 25px; }
    45% { top: 50px; }        /* 上下点头 */
    100% { top: 25px; }
}

🎯 个性化定制

🎨 颜色修改

你可以通过修改CSS变量来自定义颜色:

元素默认颜色可替换颜色
背景色#FF7F2E#3498db, #2ecc71
人物1#D13433#e74c3c, #9b59b6
人物2#932422#c0392b, #8e44ad

🕐 动画速度调整

修改动画持续时间:

.caveman:nth-child(1) .arm-right {
    animation-duration: 2s;  /* 改为2秒 */
}

📱 响应式适配

虽然这个动画主要是桌面端效果,但你可以添加媒体查询:

@media (max-width: 768px) {
    .text {
        font-size: 15em;  /* 移动端缩小404数字 */
    }
    
    .container {
        transform: translate(-50%, -50%) scale(0.7);
    }
}

🚀 进阶玩法

🎵 添加音效

// 添加击打音效
const audio = new Audio('hit.mp3');
audio.loop = true;
audio.play();

🖱️ 交互效果

// 鼠标悬停暂停动画
document.querySelector('.container').addEventListener('mouseenter', function() {
    document.querySelectorAll('.caveman').forEach(el => {
        el.style.animationPlayState = 'paused';
    });
});

✅ 部署指南

🌐 Web服务器配置

  1. Nginx配置:将404错误指向此页面

    error_page 404 /404.html;
    location = /404.html {
     root /var/www/html;
    }
  2. Apache配置

    ErrorDocument 404 /404.html
  3. Node.js Express

    app.use((req, res) => {
     res.status(404).sendFile(path.join(__dirname, '404.html'));
    });

📋 测试清单

  • [ ] 页面在不同浏览器正常显示
  • [ ] 动画流畅无卡顿
  • [ ] 404数字清晰可见
  • [ ] 响应式适配正常
  • [ ] 部署后404跳转正确

🎉 总结

这个动态404页面不仅有趣,还展现了CSS动画的强大能力:

  • 零JS依赖:纯CSS实现复杂动画
  • 轻量级:文件体积小,加载快速
  • 可定制:颜色、速度、大小都可调
  • 跨平台:所有现代浏览器支持

让你的404页面成为访客的小惊喜吧!


灵感来源:CodePen创意作品 | 转载请注明出处

最后修改:2025 年 09 月 15 日
如果觉得我的文章对你有用,请随意赞赏