效果预览

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/VBGWqX

可交互视频

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/p/pEgDAM/cVweZAr

源代码下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含 3 个元素,分别代表耳朵、眼睛、鼻子:

  1. <div class="pig">
  2. <span class="ears"></span>
  3. <span class="eyes"></span>
  4. <span class="nose"></span>
  5. </div>

居中显示:

  1. body {
  2. margin: 0;
  3. height: 100vh;
  4. display: flex;
  5. align-items: center;
  6. justify-content: center;
  7. background-color: skyblue;
  8. }

设置伪元素的共有属性,后面有多处用到伪元素:

  1. .pig::before,
  2. .pig::after,
  3. .pig *::before,
  4. .pig *::after {
  5. content: '';
  6. position: absolute;
  7. }

定义容器尺寸:

  1. .pig {
  2. width: 12em;
  3. height: 10em;
  4. font-size: 20px;
  5. background-color: #50a032;
  6. border: 0.2em solid #2b4d13;
  7. }

用圆角属性画出头部轮廓:

  1. .pig {
  2. border-radius: 50% 50% 50% 50% / 55% 60% 40% 45%;
  3. }

画出鼻子的轮廓:

  1. .pig {
  2. position: relative;
  3. }
  4. .nose {
  5. position: absolute;
  6. width: 4.6em;
  7. height: 4em;
  8. background-color: #82b923;
  9. border: 0.1em solid #1d3c07;
  10. border-radius: 50% 50% 45% 45% / 55% 55% 45% 45%;
  11. top: 3em;
  12. left: 4.2em;
  13. }

用伪元素画出鼻孔:

  1. .nose::before,
  2. .nose::after {
  3. width: 1.2em;
  4. background-color: #0f2d00;
  5. border-radius: 50%;
  6. top: 1.4em;
  7. }
  8. .nose::before {
  9. left: 0.8em;
  10. height: 1.8em;
  11. }
  12. .nose::after {
  13. right: 0.8em;
  14. height: 1.6em;
  15. }

画出眼睛的轮廓:

  1. .eyes::before,
  2. .eyes::after {
  3. width: 2.8em;
  4. height: 2.8em;
  5. background: white;
  6. border-radius: 50%;
  7. border: 0.1em solid #193c09;
  8. top: 3.6em;
  9. }
  10. .eyes::before {
  11. left: 0.8em;
  12. }
  13. .eyes::after {
  14. right: 0.3em;
  15. }

用径向渐变画出眼珠:

  1. .eyes::before,
  2. .eyes::after {
  3. background:
  4. radial-gradient(
  5. circle at var(--eyeball-left) 1.5em,
  6. black 0.4em,
  7. transparent 0.4em
  8. ),
  9. white;
  10. }
  11. .eyes::before {
  12. --eyeball-left: 1em;
  13. }
  14. .eyes::after {
  15. --eyeball-left: 1.9em;
  16. }

画出内耳的轮廓:

  1. .ears::before,
  2. .ears::after {
  3. width: 0.8em;
  4. height: 0.9em;
  5. background-color: #2f6317;
  6. border: 0.1em solid #1d3a0d;
  7. border-radius: 45% 45% 45% 45% / 55% 45% 55% 45%;
  8. }
  9. .ears::before {
  10. top: 0.3em;
  11. left: 1.3em;
  12. }
  13. .ears::after {
  14. top: -1.1em;
  15. right: 5.8em;
  16. }

用阴影画出外耳:

  1. .ears::before {
  2. color: #50a032;
  3. box-shadow:
  4. 0.4em 0.7em 0 -0.2em,
  5. -0.2em 0.7em 0 -0.1em,
  6. -0.6em 0.5em 0 -0.2em,
  7. -0.1em -0.2em 0 0.4em,
  8. -0.1em -0.2em 0 0.6em #2b4d13;
  9. transform: rotate(-40deg);
  10. }
  11. .ears::after {
  12. color: #5cb739;
  13. box-shadow:
  14. 0.3em 0.6em 0 -0.2em,
  15. -0.1em 0.6em 0 -0.1em,
  16. -0.6em 0.6em 0 -0.2em,
  17. -0.1em -0.2em 0 0.4em,
  18. -0.1em -0.2em 0 0.6em #2b4d13;
  19. transform: rotate(-6deg);
  20. }

用伪元素画出眉毛:

  1. .pig::before,
  2. .pig::after {
  3. width: 1.4em;
  4. height: 1em;
  5. border-top: 0.5em solid #0f2d00;
  6. top: 2.3em;
  7. border-radius: 50% 50% 0 0 / 40% 40% 0 0;
  8. }
  9. .pig::before {
  10. left: 1.2em;
  11. transform: rotate(-20deg);
  12. }
  13. .pig::after {
  14. right: 1em;
  15. transform: rotate(25deg);
  16. }

接下来设置阴影,增加立体效果。
为头部增加阴影效果:

  1. .pig {
  2. box-shadow:
  3. inset -1.5em 1em 1.5em -0.5em rgba(255, 255, 255, 0.3),
  4. inset 0.5em -0.5em 0.8em 0.2em rgba(0, 0, 0, 0.2);
  5. }

为鼻子增加阴影效果:

  1. .nose {
  2. box-shadow: -0.1em 0.5em 0.2em 0.1em rgba(68, 132, 36, 0.6);
  3. }
  4. .nose::before,
  5. .nose::after {
  6. box-shadow: inset -0.3em -0.2em 0.1em -0.1em #2d6b1f;
  7. }

为眼睛增加阴影效果:

  1. .eyes::before,
  2. .eyes::after {
  3. box-shadow:
  4. inset 0.3em -0.6em 0.5em -0.2em rgba(0, 0, 0, 0.3),
  5. -0.1em 0.5em 0.2em 0.1em rgba(68, 132, 36, 0.6);
  6. }

大功告成!

前端每日实战:98# 视频演示如何用纯 CSS 创作一只愤怒小鸟中的绿猪的更多相关文章

  1. 前端每日实战:124# 视频演示如何用纯 CSS 创作一只纸鹤

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xagoYb 可交互视频 此视频是可 ...

  2. 前端每日实战:103# 视频演示如何用纯 CSS 创作一只监视眼

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/GBzLdy 可交互视频 此视频是可 ...

  3. 前端每日实战:58# 视频演示如何用纯 CSS 创作一只卡通鹦鹉

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/vrRmWy 可交互视频 此视频是可 ...

  4. 前端每日实战:73# 视频演示如何用纯 CSS 创作一只卡通狐狸

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEKZed 可交互视频 此视频是可 ...

  5. 前端每日实战:132# 视频演示如何用纯 CSS 创作一只思考的手

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/WgdVyx/ 可交互视频 此视频是 ...

  6. 前端每日实战:111# 视频演示如何用纯 CSS 创作一只艺术的鸭子

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/aaoveW 可交互视频 此视频是可 ...

  7. 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VdOKQG 可交互视频 此视频是可 ...

  8. 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZRjGGy 可交互视频 此视频是可 ...

  9. 前端每日实战:62# 视频演示如何用纯 CSS 创作一只蒸锅

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YvOzNy 可交互视频 此视频是可 ...

随机推荐

  1. 状压dp(8.8上午)

    神马是状态压缩? 就是当普通dp的每一维表示的状态非常少的时候,可以压缩成一维来表示 如果m==8 dp[i][0/1][0/1]......[0/1] 压缩一下 dp[i][s]表示到了第i行,状态 ...

  2. mysql-c++连接

    1.mysql-c++连接MySQL :: Download Connector/C++ https://dev.mysql.com/downloads/connector/cpp/ 1-1VS201 ...

  3. 【tensorflow使用笔记三】:tensorflow tutorial中的源码阅读

    https://blog.csdn.net/victoriaw/article/details/61195620#t0 input_data 没用的另一种解决方法:tensorflow1.8版本及以上 ...

  4. python值的引用传递和go语言的值传递

    一:值传递 实参a 原本指向地址 1638212,代表1638212这个地址的值是3.在swap函数中,实参a将值拷贝给形参a,形参a此时也在内存中拥有地址,地址= xxxx,值为3,在所有的函数体内 ...

  5. Java 位运算超全面总结

    1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...

  6. SpringBoot系列:二、SpringBoot的配置文件

    SpringBoot的配置文件在resources文件夹下 springboot的配置文件支持两种形式的写法,一种是经典的properties另一种是yml yml通过空格缩进的形式来表示对象的层级关 ...

  7. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第5节 String类_10_练习:统计输入的字符串中

    char类型在发生数学运算的时候,可以提升为int类型 这就表示char在A到Z之间的

  8. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_1_File类的概述

  9. Free Pascal User’s Guide

    https://www.freepascal.org/docs-html/current/user/user.html

  10. 深入理解任何Binder Client都可以直接通过ServiceManager的0这个Binder句柄创建一个BpBinde

    ServiceManager是安卓中一个重要的类,用于管理所有的系统服务,维护着系统服务和客户端的binder通信.对此陌生的可以先看系统服务与ServiceManager来了解应用层是如何使用Ser ...