冰墩墩(英文:Bing Dwen Dwen,汉语拼音:bīng dūn dūn),是 的吉祥物。 [3] 将熊猫形象与富有超能量的冰晶外壳相结合,头部外壳造型取自冰雪运动头盔,装饰彩色光环,整体形象酷似航天员。
以前面试总被问,如何用 CSS 画一个三角形。今天我想玩点大的,用 CSS 画个冰墩墩!
我们可以把各个部分拆成 div,再给 div 分别做 CSS,最终拼成整幅图。
对这个分法你可能有很多问号,比如:
后面的操作会给你答案。
然后我们给所有 div 一个绝对定位:
这样就像 sketch、ps 一样,我们有了很多图层。绝对定位下,图层是有上下顺序的,这也是前面划分结构的一个依据。
但 CSS 的能力不止于此,通过伪元素,一个 div 理论上可以提供三个图层:自身、before、after。我们给他们也统一加上。
接下来我们要挨个部分画图了,其中夹杂引入属性的简单说明,一口饭一口菜。
冰墩墩的身体是一个类似蛋的形状,头顶要比脚下圆润些,这个好做,一组 border + radius 搞定。
四个角的 radius 可以单独设置,每个 radius 又可以单独设置两个方向的。
耳朵也差不多,两个蛋,放在一个 div 里,因为我们前面说过,一个 div 至多可以提供三个图层
因为 div 顺序靠前,下半部分正好被身体压掉。
左手类似一个水滴的形状,看似可以尝试比较大的 border radius,但实际行不通,可以用一个圆形 + 一个三角形拼起来。其中三角形用 border 实现。
右手是一个椭圆 + 一颗心(拆成两个椭圆拼起来),三个图层正好够用。又引入了 transform rotate 属性。
除了 rotate,skew 也常用来实现菱形等。
这个脚看起来有点难办,虽然是圆角类似椭圆,但几个方向比较刁钻。这里果断拆分成两部分,一部分堆在身体下,一部分堆在身体上。稍微调整下 html。
发现没,两只脚对称,这里的元素本身定到中间,本身没什么意义,但两伪元素就可以对称写了,非常方便。
正好和身体下的部分叠在一起。
脸的轮廓是几圈彩色套在一起的。
一圈好办,给个border就好了;三圈也好办,大不了用两个伪元素。更多圈怎么办呢?我们可以用 box-shadow。
box-shadow 可以无限次声明同一个元素的阴影,并可以自定义偏移、扩展、颜色。
这就很有想象空间了,像一个复印机:
- 调整扩展,可以无限增加元素的 border 层数,比如上面的用法。
- 调整偏移,可以把元素形状复制到任意位置。
- 关键是,任何一次复印都可以单独改变颜色!
这个本来也挺简单,对称两个带 border 的圆,但有一个小细节,就是瞳孔上水灵灵的眼光,是不对称的。
那怎么办?div 自己居中定位不是闲着么,让他用 box-shadow 打出来就好了。
至此,冰墩墩就画完了。
快学去哄抢不到冰墩墩的小朋友吧~~
附:完整代码 + 度熊,欢迎一起玩耍