纯 css 手写奔跑的(● ̄(エ) ̄●)

简介: 之前用css写了一个太极图,反响还是挺不错的,然后看到评论区有位小伙伴说让他想起了培训班的点点滴滴,于是我就说那我直接来一个培训班的案例再写一篇吧。 然后他就向我推荐了奔跑的熊,我就网上查了一下

前言

之前用css写了一个太极图,反响还是挺不错的,然后看到评论区有位小伙伴说让他想起了培训班的点点滴滴,于是我就说那我直接来一个培训班的案例再写一篇吧。

然后他就向我推荐了奔跑的熊,我就网上查了一下,就是使用背景图,然后修改background-position的值来实现的。

我觉得太简单了,于是我就想着能不能用css来实现,然后就有了这篇文章。

太极图的文章地址:用 css 画一个太极图,才几行代码就开始喊难了?

评论截图:

image.png

正式开始

先来体验一下效果,点开详情观看效果更佳:

代码片段

实现思路

奔跑的熊首先肯定是需要把熊画上去的,然后再通过css来控制熊的动画。

这里最主要的是熊,我这个人没啥审美,所以我就在网上找了一些简单的熊的图片,然后用css来复刻一下。

就我这个场景里面的熊,主要分为三个部分,头部,身体,脚部。

ok,那我们就来一个一个的实现。

头部

头部是这个里面最复杂的部分,因为头部里面有眼睛,鼻子,耳朵,还有嘴巴。

先来看看代码:

<div class="head">
    <div class="ear left"></div>
    <div class="ear right"></div>

    <div class="eye left"></div>
    <div class="eye right"></div>

    <div class="nose"></div>
    <div class="mouth"></div>
</div>

然后我们来看看css

.head {
   
   
  position: absolute;
  top: 10px;
  right: 4px;
  width: calc(100% / 4);
  height: calc(100% / 3);
  background: #fff;
  border-radius: 25%;
  z-index: 2;
}

/* 耳朵 */
.ear {
   
   
  position: absolute;
  width: calc(100% / 3);
  height: calc(100% / 3);
  background: radial-gradient(gray 45%, #fff 50%);
  border-radius: 50% 50% 0 0;
}

.ear.left {
   
   
  top: -10px;
  left: -10px;
  transform: rotate(-35deg);
}

.ear.right {
   
   
  top: -10px;
  right: -10px;
  transform: rotate(35deg);
}

/* 眼睛 */
.eye {
   
   
  position: absolute;
  width: 20px;
  height: 25px;
  background: #000;
  border-radius: 50%;
}

.eye::before {
   
   
  content: '';
  position: absolute;
  top: 8px;
  left: 5px;
  width: 10px;
  height: 10px;
  background: #fff;
  border-radius: 50%;
}

.eye::after {
   
   
  content: '';
  position: absolute;
  top: 10px;
  left: 8px;
  width: 5px;
  height: 5px;
  background: #000;
  border-radius: 50%;
}

.eye.left {
   
   
  top: 20px;
  left: 20px;
}

.eye.right {
   
   
  top: 20px;
  right: 20px;
}

/* 鼻子 */
.nose {
   
   
  position: absolute;
  top: 40px;
  left: 50%;
  transform: translateX(-50%) rotate(-45deg);
  width: 20px;
  height: 20px;
  background: linear-gradient(45deg, #000 50%, transparent 50%);
  border-radius: 4px;
}

/* 嘴巴 */
.mouth {
   
   
  position: absolute;
  top: 60px;
  left: 50%;
  transform: translateX(-50%);
  width: 40px;
  height: 20px;
  border-radius: 50%;
  border: 2px solid #000;
  border-top-color: transparent;
  border-left-color: transparent;
  border-right-color: transparent;
}

基本上都是使用定位来完成的:

  • 耳朵:使用渐变来实现不同的颜色,然后旋转一下,放头顶就好了。
  • 眼睛:使用伪元素来实现,里面会有眼瞳和眼仁,所以使用伪元素来实现。
  • 鼻子:使用渐变来实现一个三角形,然后圆角过渡一下,再旋转一下就好了,看起来真不错呀。
  • 嘴巴:使用圆角来实现一个圆形,然后去掉其他三条边,就成了一个微笑的嘴巴了。

身体

身体就简单多了,就是一个圆形,然后和头对接一下,调整合适的位置。

<div class="body"></div>
.body {
   
   
    position: absolute;
    top: 50px;
    left: 210px;
    width: calc(100% / 1.9);
    height: calc(100% / 2);
    background: #fff;
    border-radius: 40%;
    z-index: 1;
}

简单多了是吧,这个就没什么好说的了。

脚部

脚部我这边设计一个盒子,这个盒子和身体的样式是一样的,然后里面放上四肢还有尾巴,为啥不直接放身体里面呢,也不是不可以,因为我想区分开这些部分,所以就放在外面了。

<div class="limbs">
    <div class="arm left"></div>
    <div class="arm right"></div>

    <div class="leg left"></div>
    <div class="leg right"></div>

    <div class="tail"></div>
</div>
.limbs {
   
   
  position: absolute;
  top: 50px;
  left: 210px;
  width: calc(100% / 1.9);
  height: calc(100% / 2);
}

.limbs::before {
   
   
  content: '';
  position: absolute;
  bottom: -120px;
  width: 100%;
  height: 100%;
  background: #000;
  opacity: .2;
  border-radius: 40%;
  transform: rotate3d(1, 0, 0, 70deg);
  z-index: 0;
}

.arm,
.leg {
   
   
  position: absolute;
  width: 40px;
  height: 100px;
  background: #fff;
  border-radius: 20px;
  transform-origin: top center;
  z-index: 2;
}

.arm::after,
.leg::after {
   
   
  content: '';
  position: absolute;
  bottom: -8px;
  right: -50px;
  transform: translateX(-50%);
  width: 60px;
  height: 30px;
  background: #fff;
  border-radius: 0 50% 4px 4px;
}

.arm.left {
   
   
  bottom: -20px;
  right: 0;
  background: #ccc;
  animation: arm 1s infinite;
}

.arm.left::after {
   
   
  right: -50px;
  background: #ccc;
}

.arm.right {
   
   
  bottom: -30px;
  right: 10px;
  background: #fff;
}

.leg.left {
   
   
  bottom: -20px;
  left: 20px;
  background: #ccc;
}

.leg.left::after {
   
   
  right: -50px;
  background: #ccc;
}

.leg.right {
   
   
  bottom: -30px;
  left: 0;
}

/* 尾巴 */
.tail {
   
   
  position: absolute;
  top: 38px;
  left: -28px;
  width: 40px;
  height: 40px;
  background: #fff;
  border-radius: 50%;
  z-index: 1;
}

这里主要分为四肢和尾巴,四肢就是一个圆角矩形,然后给他安一个脚底板,里面的腿加上灰色的背景色,让它看起来更加的立体,然后尾巴就是一个圆形,你看哆啦A梦的小手手都是圆的,我一个尾巴是圆的不过分吧。

背景

上面已经把我们可爱的小熊熊给画出来了,现在我们需要一个背景填充一下,这里我还是使用了渐变,你以为我会自己写?

当然不会,这里推荐一个网站,gradienta,这个网站上有现成已经编辑好的渐变,你只需要选择你想要的渐变,然后复制代码就可以了,我的背景就是从这个上面来的。

我这边的背景分为两个部分,一个是纯背景,还有一个是熊踩着的背景。

代码结构大背景直接放在容器上面就可以了,熊踩着的背景直接定位搞定。

这个代码就不贴了,可以直接上马上掘金看。

效果

效果其实很简单,关键是搭配。

首先奔跑头是不是要上下运动?所以先让头动:

@keyframes head {
   
   
  0% {
   
   
    transform: translate(0, 0);
  }
  50% {
   
   
    transform: translate(0, 10px);
  }
  100% {
   
   
    transform: translate(0, 0);
  }
}

没想到只有这么点吧,说了主要是搭配,这里的搭配就是头和身体的运动,头上下运动,身体肯定不能上下运动,身体应该是有一个转体的效果,所以我们让身体旋转:

@keyframes body {
   
   
  0% {
   
   
    transform: rotate(0);
  }

  50% {
   
   
    transform: rotate(5deg);
  }

  100% {
   
   
    transform: rotate(0);
  }
}

身体动了尾巴也得跟着动,由于身体是旋转的,所以动画和头部是相反的,而且这里不能使用头部的动画然后反过来,因为头部是下沉,尾巴是上升,所以这里我们需要一个新的动画:

@keyframes tail {
   
   
  0% {
   
   
    transform: translate(0, 0);
  }
  50% {
   
   
    transform: translate(0, -10px);
  }
  100% {
   
   
    transform: translate(0, 0);
  }
}

ok,处理完整体的动画,接下来就是四肢的动画了,这里我们需要让四肢的动画和身体的动画同步,所以我们先需要将身体的动画运用到四肢的容器上;

接下来就是四肢,四肢的动画是一个摆动的效果,所以我们需要一个摆动的动画:

@keyframes arm {
   
   
  0% {
   
   
    transform: rotate(-10deg) translate(0, 0);
  }
  50% {
   
   
    transform: rotate(10deg) translate(0, 10px);
  }
  100% {
   
   
    transform: rotate(-10deg) translate(0, 0);
  }
}

@keyframes leg {
   
   
    0% {
   
   
        transform: rotate(-10deg) translate(0, 0);
    }
    50% {
   
   
        transform: rotate(10deg) translate(0, -10px);
    }
    100% {
   
   
        transform: rotate(-10deg) translate(0, 0);
    }
}

由于前腿和后腿的动画跟头部和尾巴的动画原理一样,所以需要写两套。

现在把效果加上去,完美!

熊是跑起来了,但是背景也要跟着动,所以我们需要给背景加上动画:

@keyframes bg {
   
   
  0% {
   
   
    background-position: 0 0;
  }

  100% {
   
   
    background-position: 200% 0;
  }
}

这里的动画就和奔跑的熊的动画是一样的,只不过我们使用的渐变,而不是图片,这里直接修改背景的位置就可以了。

最后还有一个影子,影子就是缩小,还原,缩小,还原,所以我们需要一个缩小的动画:

@keyframes shadow {
   
   
  0% {
   
   
    transform: rotate3d(1, 0, 0, 70deg) scale(1);
  }
  50% {
   
   
    transform: rotate3d(1, 0, 0, 70deg) scale(.8);
  }
  100% {
   
   
    transform: rotate3d(1, 0, 0, 70deg) scale(1);
  }
}

大功告成,来欣赏一下吧!

目录
相关文章
|
前端开发
2、CSS动画之行走的米兔、奔跑的小人
2、CSS动画之行走的米兔、奔跑的小人
419 0
2、CSS动画之行走的米兔、奔跑的小人
|
6月前
|
存储 自然语言处理 前端开发
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。
|
6月前
|
存储 前端开发 安全
病历单生成器在线制作,病历单生成器app,HTML+CSS+JS恶搞工具
本项目为医疗病历模拟生成器,旨在为医学教学和软件开发测试提供数据支持,严格遵守《医疗机构病历管理规定》。
|
6月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
6月前
|
前端开发 容器
处方单图片生成器, 处方单在线制作免费,js+css+html恶搞神器
这是一个电子处方模拟生成系统,使用html2canvas库实现图片导出功能。系统生成的处方单包含多重防伪标识,并明确标注为模拟数据,仅供学习
|
6月前
|
前端开发 JavaScript 容器
制作b超单生成器, 假怀孕b超单图片制作, p图医院证明【css+html+js装逼恶搞神器】
本资源提供一个适合用于熟人之间恶搞的工具,效果逼真,仅供学习参考与娱乐。包含前端技术学习要点:语义化布局、响应式设计、Flexbox、图片自适应
|
6月前
|
前端开发
医院检查单子p图软件,在线制作仿真病历,js+css+html装逼神器
本示例展示如何用HTML/CSS创建医疗信息页面,内容仅供学习参考。页面模拟“阳光医院体检中心”场景,提供预约功能验证(如姓名、手机号、日期)。所有数据仅用于演示
|
11月前
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
499 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
10月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
291 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布