使用CSS画个大白(●—●)

这一次我们将使用CSS来画个超能陆战队里面大白的头像。

我们的做法是在一个元素上,使用CSS动态改变背景图的位置,并且加上一些线性效果。

See the Pen Baymax face - Hero Number 6 by Donovan Hutchinson (@donovanh) on CodePen.

单个元素

通过使用伪类,我们能够通过一个元素画出脸的部分

<div class="baymax"></div>

样式渲染

为了让效果更加酷炫,我们这里在body上使用radial-gradient添加了微妙的颜色梯度变化,让它更像一个头。

body {
  background: radial-gradient(center, #fff, #fff 50%, #aaa);
  background-size: 100%;
  background-repeat: no-repeat;
  height: 100vh;
}

接下来,我们给脸定位,嘴巴只是一条黑线,我们使用border来实现。

.baymax {
  border-bottom: 1.5em solid #000;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 50%;
  transform: translate(-50%, -40%);
}

第一个属性画了一条宽为1.5em的边。然后使用absolute定位,把位置定在容器(body)的中点,这里的50%是跟容器大小相关的。

问题是我们现在的元素是从容器的中点的开始,但不是出于中间位置。

为了抵消,我们使用transform把元素按照它本身宽的50%,高的40%,分别向左,向上移动。

于是嘴巴的位置就像这样

添加眼睛

我们使用before,after伪类来实现眼睛,这不需要多余的HTML,并且完全使用CSS就够了。

.baymax::before {
  background: #000;
  border-radius: 50%;
  content: "";
  position: absolute;
  width: 12em;
  height: 12em;
  left: -9em;
  top: -6em;
  transform: skewX(-4deg);
}

.baymax::after {
  background: #000;
  border-radius: 50%;
  content: "";
  position: absolute;
  width: 12em;
  height: 12em;
  right: -9em;
  top: -6em;
  transform: skewX(4deg);
}

每一个伪类都有一个黑色背景,还有一个50%的border-radius,并且都定位到了嘴巴的边上。最后使用skew转换,使眼睛向中间靠拢一点,结果就变成这样。

低电量

这是电影里面非常有趣的一幕,(●—●)没电了,它的上下眼皮在打架。我们可以使用颜色梯度背景和动画来实现。

首先,我们给背景两个颜色,黑色用来展示睁开眼的状态,白色代表眯着眼。白色的部分一开始需要定位到眼睛外边,然后使用动画来让眼脸下垂。

.baymax::before {
  background: linear-gradient(to bottom, #efefef, #efefef 50%, #000 50%, #000);
  background-position: 0 -100%;
  background-size: 200%;
  ...
}

.baymax::after {
  background: linear-gradient(to bottom, #efefef, #efefef 50%, #000 50%, #000);
  background-position: 0 -100%;
  background-size: 200%;
  ...
}

我们加了一个线性梯度的背景,让它的高度为容器的两倍,并且把上半部分定位在容器外边。

有了背景,我们可以通过keyframes动画来控制整个动作了。

@keyframes blink {
  0%, 50% {
    background-position: 0 100%;
  }
  85%, 95% {
    background-position: 0 75%;
  }
  100% {
    background-position: 0 100%;
  }
}

keyframes动画通过百分比定义了一些列帧,百分比跟动画执行时间有关,所以50%表示动画的一半的时间。

这里我们在50%到85%的时间里面来做眨眼动画。

下一步就是要告诉伪类去执行这个动画。把animation属性加上。

.baymax::before {
  animation: blink 6s infinite;
  ...
}

.baymax::after {
  animation: blink 6s 0.1s infinite;
  ...
}

上面的代码设置了执行时间为6秒,并且将会一直循环下去。

另外为了让效果更加逼真,我们把after伪类加了个0.1s的延迟,所以看上去,第二只眼会慢一点点,看上去更萌了。

浏览器兼容

在这个例子中,我省略了浏览器兼容性的东西,-webkit,-moz等等。动画是需要考虑浏览器兼容性的,这里我推荐大家使用类似Autoprefixer的工具。

分享gif版本

这里有gif版本,你可以随意分享到网上。

本文根据@cssanimation所译,整篇译文带有我自己的理解和意思,如果有译得不好的地方或者不对之处,还请大家指点。如需转载此译文,须注明英文出处:https://cssanimation.rocks/baymax/

译文出处:http://helkyle.com/2015/05/30/Baymax/

时间: 2024-07-31 14:31:21

使用CSS画个大白(●—●)的相关文章

前些日子用css画的大白

闲来无事用css画的一个大白...其实有一些地方偷懒了用svg去画的,因为用纯几何形状组合去画变化那么复杂的曲线不太现实.但svg曲线坐标还是自己一点点调出来的,没有用工具生成. :ps:点击身体的某些地方可以交互,你能发现几个地方?

Effective前端3:用CSS画一个三角形

三角形的场景很常见,打开一个页面可以看到各种各样的三角形: 由于div一般是四边形,要画个三角形并不是那么直观.你可以贴一张png,但是这种办法有点low,或者是用svg的形式,但是太麻烦.三角形其实可以用CSS画出来.如上图提到,可以分为两种三角形,一种是纯色的三角形,第二种是有边框色的三角形,先介绍最简单的纯色三角形. 1. 三角形的画法 三角形可以用border画出来,首先一个有四个border的div应该是这样的: 然后把它的高度和宽度去掉,剩下四个border,就变成了: 再把bord

用css画图标

css3的属性 transform(转换) 用途很广泛,功能也很强大,为了熟悉它的各种转换方式(平移 translate,旋转 rotate,扭曲 skew,放缩 scale),我做了一些平常常用的一些简单的图标. 这些图标很多是通过三角形来拼贴起来的,所以我们需要知道怎么样画三角形. 1. 我们要将该 div 的 width 和 height 都设置为 0,三角形是通过 border 来实现: 2. 通过我们需要画成的三角形的目标分析,这个三角形的朝向(只针对规则的朝向:上.右.下.左.上左.

如何用css画出三角形

看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及颜色. 如果你将宽度调的足够大,改变不同方向的颜色,你就可以发现盒模型的border是四个梯形一样的线条. 这个时候如果将盒模型内部的height,width调为0px,则三角形就形成了. 1 border:100px solid transparent //边框100px,实线,透明颜色,下面三行

html+css画虚线,实线

html+css画虚线,实线 2014-07-18 09:21 4086人阅读 评论(0) 收藏 举报  分类: 其他(11)  html中加入虚线 Posted on 2011-11-23 15:57 Trible.H 阅读(11498) 评论(0) 编辑 收藏 html里添加虚线 <hr style="border:1px dashed #000; height:1px"> <hr style="border:1px dotted #036"

用CSS画英文字母

起因是在网上看到了有人用纯css画出了英文字母,感觉不难,了解过css3的话都会感觉思路比较直观 主要用到的css知识点:绝对定位,圆角属性以及元素的宽高均为零时边框的挤压性质 效果图 源代码 <!DOCTYPE html> <html> <head> <title>CSS-Letter</title> <meta charset="utf-8"/> <style type="text/css&qu

css 画 爱心

用css画爱心,虽然这样的方法会写很多的css代码,但是做成功之后,会有一种很满足的成就感. 爱心,可以有3个常规的几何图形形成,一个正方形加两个相同半径的圆或半圆.一个等腰三角形加两个圆,两个房型叠加,都行. 我的实现方法是选择最简单的一个正方形加两个相同半径的圆.首先创建一个类名为heart的div,然后为其固定宽度,高度,和背景颜色.接着通过伪类选择器:before和:after添加content:''; 规定其宽度和高度都为之前的div的高度,背景颜色与之前的div相同,通过一个大于高度

css画三角

#sanjiao{    width: ;    height: 0;    border-left: 5px solid transparent;    border-right: 5px solid transparent;    border-top: 10px solid black;} div+css画三角形代码原理采用的是均分原理. border-left设置为透明后 ,如果border-top有颜色,那么就会出来一个45度的锐角.

CSS画圆角

 <!DOCTYPE html> <html>  <head>   <meta charset="utf-8">   <title></title>   <style>    div{     width:300px;     height:300px;     border:1px solid red;    }   </style>  </head>  <body>