纯css实现机器人走路动画

纯css实现机器人走路动画


由于发现了css的这个现象

当一个有元素嵌套的时候,父元素有动画,子元素也有动画,那么子元素的运动会相对父元素的运动而运动

所以我忽然想到,实现人的走路动画并不是不可能的了。

我开始搭建人体的结构,让人的每一个发生运动了的部分都设置为一个单独的盒子。

然后编辑和调整动画代码,一边站起来自己比划动作比对一边写代码。

终于,今天,大二,我实现了小学时候想用flash做出人体走路动画。

然后我开始又继续添加东西,把这个人改成了拿着剑一边挥舞一边走路的机器人。

蛮有趣的,就是代码写的比较冗长。

效果图展示

walk.gif
2021-7-15_16-35-34.png

完整源代码

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <title>一个机器人走路动画</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        /* 头部动画 */
        @keyframes head {
            /*transform: translateY(-80px);*/
            25% {
                transform: translateY(-5px) translateX(-5px);
            }
            50% {
                transform: translateY(-0px) translateX(0);
            }
            75% {
                transform: translateY(-5px) translateX(5px);
            }
        }

        /* 眼部闪光动画 */
        @keyframes eyeAni {
            25% {
                box-shadow: black 0 0 20px;
                background-color: blue;
            }
            50% {

            }
            75% {
                box-shadow: black 0 0 20px;
                background-color: red;
            }
        }

        /* 身体上下动画 */
        @keyframes bodyUpDown {
            25% {
                transform: translateY(-10px);
            }
            50% {
                transform: translateY(0);
            }
            75% {
                transform: translateY(-10px);
            }
        }

        /* 大臂1动画 */
        @keyframes rootArm1 {
            25% {
                transform: translateY(20px) rotate(0deg);
            }
            50% {
                transform: translateY(20px) rotate(30deg);
            }
            75% {
                transform: translateY(20px) rotate(0deg);
            }
        }

        /* 大臂2动画 */
        @keyframes rootArm2 {
            25% {
                transform: translateY(20px) rotate(0deg);
            }
            50% {
                transform: translateY(20px) rotate(-30deg);
            }
            75% {
                transform: translateY(20px) rotate(0deg);
            }
        }

        /* 小臂1动画 */
        @keyframes subArm1 {
            50% {
                transform: rotate(30deg);
            }
        }

        /* 小臂2动画 */
        @keyframes subArm2 {
            50% {
                transform: rotate(0deg);
            }
        }

        /* 大腿1动画 */
        @keyframes rootLegWalk1 {
            /* 最开始  rotate(-5deg);*/
            25% {
                transform: rotate(-15deg);
            }
            50% {
                transform: rotate(5deg);
            }
            75% {
                transform: rotate(30deg);
            }
        }

        /* 小腿1动画 */
        @keyframes subLegWalk1 {
            /* 最开始 transform: rotate(-10deg);*/
            25% {
                top: 80%;
                transform: rotate(0deg);
                background-color: skyblue;
            }
            50% {
                top: 70%;
                background-color: red;
                transform: rotate(-30deg);
            }
            75% {
                top: 80%;
                background-color: deeppink;
                transform: rotate(-15deg);
            }
        }

        /* 大腿2动画 */
        @keyframes rootLegWalk2 {
            25% {
                /*向前迈*/
                transform: rotate(30deg);
            }
            50% {
                /*踩下去*/
                transform: rotate(5deg);
            }
            75% {
                /*往后登*/
                transform: rotate(-15deg);
            }
        }

        /* 小腿2动画 */
        @keyframes subLegWalk2 {
            25% {
                top: 80%;
                transform: rotate(-30deg);
                background-color: transparent;
            }
            50% {
                top: 80%;
                background-color: red;
                transform: rotate(-5deg);
            }
            75% {
                top: 80%;
                background-color: transparent;
                transform: rotate(0deg);
            }
        }

        /* 脚丫1动画 */
        @keyframes foot1 {
            25% {
                transform: rotate(-5deg);
            }
            50% {
                transform: translateX(10px);
            }
            75% {
                transform: rotate(10deg);
            }
        }

        /* 脚丫2动画 */
        @keyframes foot2 {
            25% {
                transform: rotate(20deg);
            }
            50% {
                transform: translateX(10px);
            }
            75% {
                transform: rotate(10deg);
            }
        }

        /* 剑光动画 */
        @keyframes weaponLightAni {
            25% {
                width: 30px;
                height: 0;
            }
            50% {
                box-shadow: pink 0 0 40px;
                /*transform: translateX(10px);*/
            }
            75% {
                box-shadow: yellow 0 0 100px;
                /*transform: rotate(10deg);*/
            }
        }

        /* 剑动画 */
        @keyframes weaponAni {
            50% {
                transform: rotate(-360deg);
            }
            100% {
                transform: rotate(-720deg);
            }
        }

        .body {
            width: 70px;
            height: 200px;
            position: relative;
            left: 40%;
            margin-top: 20vh;
            border: solid 5px;
            border-radius: 60px;
            animation: bodyUpDown 2s infinite;
        }

        .eye {
            width: 25px;
            height: 10px;
            position: absolute;
            left: 5px;
            top: 30%;
            border-top-left-radius: 100px;
            border-bottom-right-radius: 100px;
            background-color: deeppink;
            animation: eyeAni 2s infinite;
        }

        .head {
            width: 80px;
            height: 80px;
            position: absolute;
            border: solid 5px;
            margin-left: -10px;
            transform-origin: center bottom;
            margin-top: -70px;
            border-top-left-radius: 30px;
            border-bottom-right-radius: 50px;
            animation: head 2s infinite;
        }

        .arm1, .arm2, .arm11, .arm22, .leg1, .leg2, .leg11, .leg22, .foot1, .foot2 {
            border-top-left-radius: 30px;
            border-top-right-radius: 30px;
        }

        .arm1 {
            width: 42px;
            height: 160px;
            border: solid 5px;
            position: absolute;
            transform-origin: center top;
            margin-left: 10px;
            transform: translateY(20px) rotate(-30deg);
            animation: rootArm1 2s infinite;
        }

        .arm11 {
            width: 90%;
            height: 90%;
            border: solid 3px;
            top: 80%;
            position: absolute;
            transform-origin: center top;
            transform: rotate(0deg);
            animation: subArm1 2s infinite;
        }

        .arm2 {
            width: 100px;
            height: 160px;
            border: solid 5px;
            position: absolute;
            transform-origin: center top;
            margin-left: -20px;
            transform: translateY(20px) rotate(30deg);
            opacity: 0.3;
            animation: rootArm2 2s infinite;
        }

        .leg1 {
            width: 50px;
            height: 90%;
            border: solid 5px;
            position: absolute;
            top: 80%;
            left: 40%;
            transform-origin: center top;
            transform: rotate(5deg);
            animation: rootLegWalk1 2s infinite;
        }

        .arm22 {
            width: 90%;
            height: 90%;
            border: 3px solid;
            border-bottom-right-radius: 100px;
            border-bottom-width: 15px;
            top: 80%;
            position: absolute;
            transform-origin: center top;
            transform: rotate(30deg);
            animation: subArm2 2s infinite;
        }

        .leg11 {
            width: 90%;
            height: 90%;
            border: solid 4px;
            position: absolute;
            top: 80%;
            transform-origin: center top;
            transform: rotate(-10deg);
            animation: subLegWalk1 2s infinite;
        }

        .foot1 {
            width: 80px;
            height: 30px;
            position: absolute;
            right: 0;
            bottom: -3px;
            border: solid 3px;
            border-top-left-radius: 40px;
            transform-origin: right center;
            animation: foot1 2s infinite;
        }

        .leg2 {
            width: 50px;
            height: 90%;
            border: solid 5px;
            position: absolute;
            top: 80%;
            left: 10%;
            opacity: 0.3;
            transform-origin: top center;
            transform: rotate(-5deg);
            animation: rootLegWalk2 2s infinite;
        }

        .leg22 {
            width: 90%;
            height: 90%;
            border: solid 4px;
            position: absolute;
            top: 70%;
            transform-origin: top center;
            transform: rotate(-30deg);
            animation: subLegWalk2 2s infinite;
        }

        .foot2 {
            width: 80px;
            height: 30px;
            position: absolute;
            right: 0;
            bottom: -3px;
            border: solid 3px;
            border-top-left-radius: 40px;
            animation: foot2 2s infinite;
        }

        .finger1, .finger2, .finger3, .finger4, .finger5 {
            width: 5px;
            height: 30px;
            border: solid 2px;
            position: absolute;
            transform-origin: top center;
            top: 95%;
        }

        .finger1 {
            left: 20%;
        }

        .finger2 {
            left: 40%;
        }

        .finger3 {
            left: 60%;
        }

        .finger4 {
            left: 80%;
        }

        .finger5 {
            left: 0;
            width: 10px;
            height: 15px;
            transform: rotate(30deg);
        }

        .weapon {
            width: 60px;
            height: 20px;
            position: absolute;
            right: -20px;
            bottom: -20px;
            border: solid 2px;
            transform-origin: 20px center;
            animation: weaponAni 2s infinite;
        }

        .light {
            width: 300px;
            height: 40px;
            position: absolute;
            right: 60px;
            background-color: hotpink;
            border-bottom-left-radius: 100px;
            animation: weaponLightAni 2s infinite;
        }

    </style>
</head>

<body>
<div class="body">
    <div class="head">
        <div class="eye"></div>
    </div>
    <div class="arm1">
        <div class="arm11">
            <div class="finger1"></div>
            <div class="finger2"></div>
            <div class="finger3"></div>
            <div class="finger4"></div>
            <div class="finger5"></div>
            <div class="weapon">
                <div class="light"></div>
            </div>
        </div>
    </div>
    <div class="arm2">
        <div class="arm22"></div>
    </div>
    <div class="leg1">
        <div class="leg11">
            <div class="foot1"></div>
        </div>
    </div>
    <div class="leg2">
        <div class="leg22">
            <div class="foot2"></div>
        </div>
    </div>
</div>
</body>

</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容