资讯专栏INFORMATION COLUMN

前端每日实战:117# 视频演示如何用纯 CSS 创作一只愤怒小鸟中的红火

AWang / 1377人阅读

摘要:效果预览按下右侧的点击预览按钮可以在当前页面预览,点击链接可以全屏预览。可交互视频此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。为头部增加阴影为眼睛增加阴影为嘴增加阴影大功告成

效果预览

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

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

可交互视频

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

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

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

源代码下载

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

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

代码解读

定义 dom,容器中包含 6 个元素,分别代表头、眼睛、眉毛、嘴、冠羽、尾巴:

</>复制代码

居中显示:

</>复制代码

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

设置子元素的共有属性:

</>复制代码

  1. .red * {
  2. position: absolute;
  3. }
  4. .red *::before,
  5. .red *::after {
  6. content: "";
  7. position: absolute;
  8. }

定义容器尺寸:

</>复制代码

  1. .red {
  2. width: 12em;
  3. height: 11em;
  4. font-size: 16px;
  5. position: relative;
  6. }

画出头部轮廓,把描边参数定义为变量,是因为后面还会用到:

</>复制代码

  1. .red {
  2. --border: 0.2em solid #6a0306;
  3. }
  4. .head {
  5. width: inherit;
  6. height: inherit;
  7. background-color: #dc002d;
  8. border-radius: 45% 55% 45% 45% / 55% 60% 40% 45%;
  9. border: var(--border);
  10. }

用伪元素画出眼睛的轮廓:

</>复制代码

  1. .eyes::before,
  2. .eyes::after {
  3. width: 2.4em;
  4. height: 2.6em;
  5. background: white;
  6. border-radius: 50%;
  7. border: var(--border);
  8. }
  9. .eyes::before {
  10. top: 3.7em;
  11. left: 5.5em;
  12. z-index: 1;
  13. }
  14. .eyes::after {
  15. top: 3.8em;
  16. left: 7.8em;
  17. }

用径向渐变画出眼珠和瞳孔:

</>复制代码

  1. .eyes::before,
  2. .eyes::after {
  3. background:
  4. radial-gradient(
  5. circle at calc(var(--eyeball-left) + 6%) 48%,
  6. white 0.1em,
  7. transparent 0.1em
  8. ),
  9. radial-gradient(
  10. circle at var(--eyeball-left) 48%,
  11. black 0.5em,
  12. transparent 0.5em
  13. ),
  14. white;
  15. }
  16. .eyes::before {
  17. --eyeball-left: 65%;
  18. }
  19. .eyes::after {
  20. --eyeball-left: 41%;
  21. }

用伪元素画出眉毛:

</>复制代码

  1. .eyebrows::before,
  2. .eyebrows::after {
  3. height: 1.1em;
  4. background-color: black;
  5. top: 3.6em;
  6. z-index: 2;
  7. }
  8. .eyebrows::before {
  9. left: 5em;
  10. transform: skewY(12deg);
  11. width: 3.4em;
  12. }
  13. .eyebrows::after {
  14. left: 8.2em;
  15. transform: skewY(-15deg);
  16. width: 3.1em;
  17. }

画出嘴的轮廓:

</>复制代码

  1. .mouth {
  2. width: 2.8em;
  3. height: 2.8em;
  4. background-color: #fca90d;
  5. top: 6em;
  6. left: 7em;
  7. z-index: 3;
  8. border-radius: 20% 0 20% 10%;
  9. transform: rotate(34deg) skewX(-15deg);
  10. border: 0.1em solid black;
  11. }

用伪元素画出上下颌的分界线:

</>复制代码

  1. .mouth::before {
  2. width: 3.4em;
  3. height: 4em;
  4. border: 0.2em solid;
  5. top: -1.6em;
  6. left: -1.8em;
  7. border-radius: 0 0 40% 0;
  8. transform: rotate(42deg);
  9. border-color: transparent black transparent transparent;
  10. }

画出冠羽的左侧:

</>复制代码

  1. .hair {
  2. width: 1.2em;
  3. height: 3em;
  4. background-color: #dc002d;
  5. border-radius: 50%;
  6. border: var(--border);
  7. top: -1.8em;
  8. left: 2.8em;
  9. transform: rotate(-70deg);
  10. border-bottom-color: transparent;
  11. }

用伪元素画出冠羽的右侧:

</>复制代码

  1. .hair::before {
  2. width: inherit;
  3. height: inherit;
  4. background-color: inherit;
  5. border-radius: inherit;
  6. border: inherit;
  7. top: 1em;
  8. left: 0.8em;
  9. transform: rotate(20deg);
  10. }

用伪元素把冠羽多余的搭边线遮盖住:

</>复制代码

  1. .hair::after {
  2. width: 3em;
  3. height: 2em;
  4. background-color: #dc002d;
  5. border-radius: 50%;
  6. top: 2.3em;
  7. left: -1.5em;
  8. transform: rotate(70deg);
  9. }

画出尾巴中最长的一根羽毛:

</>复制代码

  1. .tail {
  2. width: 3em;
  3. height: 1em;
  4. background-color: black;
  5. top: 40%;
  6. left: -1.8em;
  7. z-index: -1;
  8. transform: rotate(15deg);
  9. }

用伪元素画出尾巴中较短的两根羽毛:

</>复制代码

  1. .tail::before,
  2. .tail::after {
  3. width: inherit;
  4. height: 70%;
  5. background-color: black;
  6. left: 0.6em;
  7. }
  8. .tail::before {
  9. transform: rotate(25deg);
  10. top: -0.4em;
  11. }
  12. .tail::after {
  13. transform: rotate(-20deg);
  14. top: 0.8em;
  15. }

用伪元素画出胸前的羽毛:

</>复制代码

  1. .head {
  2. overflow: hidden;
  3. }
  4. .head::before {
  5. width: inherit;
  6. height: inherit;
  7. background-color: #e3c4ab;
  8. border-radius: inherit;
  9. top: 65%;
  10. left: 25%;
  11. }

接下来画阴影,增强立体感。

为头部增加阴影:

</>复制代码

  1. .head {
  2. box-shadow:
  3. inset 0.5em -0.5em 0.3em 0.2em rgba(0, 0, 0, 0.2),
  4. inset -1em 0.8em 1.5em -0.5em rgba(237, 178, 144, 0.7);
  5. }

为眼睛增加阴影:

</>复制代码

  1. .eyes::before {
  2. box-shadow: -0.2em 0.2em 0.2em 0.3em rgba(0, 0, 0, 0.2);
  3. }
  4. .eyes::after {
  5. box-shadow: 0.2em 0.2em 0.4em 0.3em rgba(0, 0, 0, 0.1);
  6. }

为嘴增加阴影:

</>复制代码

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

大功告成!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/113777.html

相关文章

  • 前端每日实战117# 视频演示何用 CSS 创作一只愤怒小鸟中的红火

    摘要:效果预览按下右侧的点击预览按钮可以在当前页面预览,点击链接可以全屏预览。可交互视频此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。为头部增加阴影为眼睛增加阴影为嘴增加阴影大功告成 showImg(https://segmentfault.com/img/bVbfUeW?w=400&h=300); 效果预览 按下右侧的点击预览按钮可以在当前页面预览,点击链接可以全屏预览。 ht...

    greatwhole 评论0 收藏0
  • 前端每日实战:110# 视频演示何用 CSS 创作一只愤怒小鸟中的黑炮

    摘要:效果预览按下右侧的点击预览按钮可以在当前页面预览,点击链接可以全屏预览。可交互视频此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。为头部增加阴影为嘴增加阴影大功告成 showImg(https://segmentfault.com/img/bVbfxoZ?w=400&h=300); 效果预览 按下右侧的点击预览按钮可以在当前页面预览,点击链接可以全屏预览。 https://c...

    Lionad-Morotar 评论0 收藏0
  • 前端每日实战:110# 视频演示何用 CSS 创作一只愤怒小鸟中的黑炮

    摘要:效果预览按下右侧的点击预览按钮可以在当前页面预览,点击链接可以全屏预览。可交互视频此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。为头部增加阴影为嘴增加阴影大功告成 showImg(https://segmentfault.com/img/bVbfxoZ?w=400&h=300); 效果预览 按下右侧的点击预览按钮可以在当前页面预览,点击链接可以全屏预览。 https://c...

    PrototypeZ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<