如何用DOM 元素就能画出国宝熊猫

效果预览
按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
https://codepen.io/comehope/pen/odKrpy
可交互视频教程
此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
请用 chrome, safari, edge 打开观看。
https://scrimba.com/p/pEgDAM/cV7J6SK
源代码下载
每日前端实战系列的全部源代码请从 github 下载:
https://github.com/comehope/front-end-daily-challenges
代码解读
定义 dom,只有一个元素:
<div class="panda"></div>
居中显示:
body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: mediumturquoise;
}
定义容器尺寸:
.panda {
width: 21em;
height: 16em;
background-color: white;
}
画出头部轮廓:
.panda {
border: 0.5em solid #333;
border-top-left-radius: 11em;
border-top-right-radius: 11em;
border-bottom-left-radius: 11em 6em;
border-bottom-right-radius: 11em 6em;
}
画出右眼轮廓:
.panda {
position: relative;
}
.panda::before {
content: '';
position: absolute;
width: 7em;
height: 4em;
left: 2.9em;
top: 5.5em;
background-color: #333;
border-radius: 50% 50% 45% 42%;
transform: rotate(-45deg);
}
类似地,画出左眼轮廓:
.panda::after {
content: '';
position: absolute;
width: 7em;
height: 4em;
left: 11.1em;
top: 5.5em;
background-color: #333;
border-radius: 50% 50% 42% 45%;
transform: rotate(45deg);
}
画出两只耳朵:
.panda::before {
box-shadow: 1em -7.2em 0 -0.4em #333;
}
.panda::after {
box-shadow: -1em -7.2em 0 -0.4em #333;
}
画出两只眼睛:
.panda::before {
background-image:
radial-gradient(circle at 5.1em 2em, white 0.3em, transparent 0.3em),
radial-gradient(circle at 4.6em 2em, #333 0.7em, transparent 0.7em),
radial-gradient(circle at 4.5em 2em, white 1em, transparent 1em);
}
.panda::after {
background-image:
radial-gradient(circle at 2.4em 1.5em, white 0.3em, transparent 0.3em),
radial-gradient(circle at 2.4em 2em, #333 0.7em, transparent 0.7em),
radial-gradient(circle at 2.5em 2em, white 1em, transparent 1em);
}
画出鼻子和嘴:
.panda {
background-image:
radial-gradient(ellipse at 50% 60%, #333 1.2em, transparent 1.2em),
radial-gradient(ellipse at 50% 80%, #555 0.6em, transparent 0.6em);
}
增加一点立体效果:
.panda {
border-bottom-width: 1em;
box-shadow: inset 1em -1em 0 #eee;
}
让右眼动起来:
.panda::before {
animation: before-animate 1s ease-in-out infinite alternate;
}
@keyframes before-animate {
to {
background-image:
radial-gradient(circle at 4.9em 1.8em, white 0.3em, transparent 0.3em),
radial-gradient(circle at 4.4em 1.8em, #333 0.7em, transparent 0.7em),
radial-gradient(circle at 4.5em 2em, white 1em, transparent 1em);
}
}
类似地,让左眼也动起来:
.panda::after {
animation: after-animate 1s ease-in-out infinite alternate -1s;
}
@keyframes after-animate {
to {
background-image:
radial-gradient(circle at 2.6em 1.3em, white 0.3em, transparent 0.3em),
radial-gradient(circle at 2.6em 1.8em, #333 0.7em, transparent 0.7em),
radial-gradient(circle at 2.5em 2em, white 1em, transparent 1em);
}
}
最后,让黑眼圈和耳朵也动起来:
@keyframes before-animate {
to {
transform: rotate(-40deg);
}
}
@keyframes after-animate {
to {
transform: rotate(40deg);
}
}
大功告成!
原文地址:https://segmentfault.com/a/1190000015052653
如何用DOM 元素就能画出国宝熊猫的更多相关文章
- 前端每日实战:35# 视频演示如何把 CSS 径向渐变用得出神入化,只用一个 DOM 元素就能画出国宝熊猫
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/odKrpy 可交互视频教程 此视频 ...
- 35.在CSS中 只用一个 DOM 元素就能画出国宝熊猫
原文地址:https://segmentfault.com/a/1190000015052653 感想: 真神奇! HTML code: <div class="panda" ...
- 如何用css画出三角形
看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及 ...
- WPF Blend 脑洞大开的问题:如何用Blend得到或画出一个凹槽、曲面。
原文:WPF Blend 脑洞大开的问题:如何用Blend得到或画出一个凹槽.曲面. 目标图: 步骤一(放置一个矩形,填充蓝色): 步骤二(复制该矩形,并调整边角,填充粉红色): 第三部:让图形部分重 ...
- 纯CSS绘制三角形(各种角度)类似于使用字符画法,根据位移不同,也可以使用两个元素画出三角边框
我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...
- 返本求源——DOM元素的特性与属性
抛砖引玉 很多前端类库(比如dojo与JQuery)在涉及dom操作时都会见到两个模块:attr.prop.某天代码复查时,见到一段为某节点设置文本的代码: attr.set(node, 'inner ...
- 【面试必备】javascript操作DOM元素
前言 时间过的真快,不知不觉就到年底了.问问自己,这一年你对自己的工作满意吗? 评价标准是什么呢?当然是马云的那两条准则了:钱给到了吗?干的爽吗?如果答案都是no,那么,你准备好跳槽了吗? 为了应对年 ...
- H5坦克大战之【画出坦克】
今天是个特殊的日子,圣诞节,也是周末,在这里先祝大家圣诞快乐!喜庆的日子,我们可以稍微放松一下,扯一扯昨天雷霆对战凯尔特人的比赛,这场比赛大威少又双叒叕拿下三双,而且是一个45+11+11的超级三双, ...
- 用css画出三角形
看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及 ...
随机推荐
- Android近场通信---NFC基础(五)(转)
转自 http://blog.csdn.net/think_soft/article/details/8190463 Android应用程序记录(Android Application Record- ...
- Execution failed for task ':app:installDebug'.
解决方案:重新起服务(react-native start),重新起项目(react-native run-android)
- bzoj1966:[AHOI2005]病毒检测
传送门 我也没想到map如此垃圾,bitset优秀啊 直接trie树上搜索就好了 代码: #include<cstdio> #include<iostream> #includ ...
- JS中一个new到底做了哪些事情?
1.https://www.cnblogs.com/faith3/p/6209741.html 2.https://www.cnblogs.com/AaronNotes/p/6529492.html
- radio与img对齐 (CSS3)
实现方式: html: <div class="pay-four"> <div class="pay-four-border"> < ...
- POP页面暂时不销毁
摘要:我们经常使用的QQ空间,当我们短时间内两次进入页面的时候,页面是没有重新创建的,不光是缓存的数据,是整个页面都没有变.我们在开发中可能也会有这样的需求.开始的时候,想的思路是这样的:用定时器,将 ...
- struts2的@Result annotation 如何添加params,并且在页面取值
http://www.bubuko.com/infodetail-2492575.html .............................................. 标签:lai ...
- 104 Maximum Depth of Binary Tree 二叉树的最大深度
给定一个二叉树,找出其最大深度.二叉树的深度为根节点到最远叶节点的最长路径上的节点数.案例:给出二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / ...
- Unity Shader入门精要学习笔记 - 第13章 使用深度和法线纹理
线纹理的代码非常简单,但是我们有必要在这之前首先了解它们背后的实现原理. 深度纹理实际上就是一张渲染纹理,只不过它里面存储的像素值不是颜色值而是一个高精度的深度值.由于被存储在一张纹理中,深度纹理里的 ...
- Django模板导入及母版继承和自定义返回Html片段
1.ROOT_URLCONF = '总路由所在路径(比如untitled.urls)'<===默认情况是这样 根路由的路径是可以修改的:ROOT_URLCONF = app01.urls< ...