首页 文章详情

如何用纯 CSS 创作一只愤怒小鸟中的绿猪

前端阳光 | 565 2021-04-20 22:33 0 0 0
UniSMS (合一短信)

如何用纯 CSS 创作一只愤怒小鸟中的绿猪

实现步骤

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

<div class="pig">
    <span class="ears"></span>
    <span class="eyes"></span>
    <span class="nose"></span>
</div>

居中显示:

body {
    margin0;
    height100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: skyblue;
}

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

.pig::before,
.pig::after,
.pig *::before,
.pig *::after {
    content'';
    position: absolute;
}

定义容器尺寸:

.pig {
    width12em;
    height10em;
    font-size20px;
    background-color#50a032;
    border0.2em solid #2b4d13;
}

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

.pig {
    border-radius50% 50% 50% 50% / 55% 60% 40% 45%;
}

以前以为border-radius只能设置四个角,实际上可以设置八条边。

画出鼻子的轮廓:

.pig {
    position: relative;
}

.nose {
    position: absolute;
    width4.6em;
    height4em;
    background-color#82b923;
    border0.1em solid #1d3c07;
    border-radius50% 50% 45% 45% / 55% 55% 45% 45%;
    top3em;
    left4.2em;
}

用伪元素画出鼻孔:

.nose::before,
.nose::after {
    width1.2em;
    background-color#0f2d00;
    border-radius50%;
    top1.4em;
}

.nose::before {
    left0.8em;
    height1.8em;
}

.nose::after {
    right0.8em;
    height1.6em;
}

画出眼睛的轮廓:

.eyes::before,
.eyes::after {
    width2.8em;
    height2.8em;
    background: white;
    border-radius50%;
    border0.1em solid #193c09;
    top3.6em;
}

.eyes::before {
    left0.8em;
}

.eyes::after {
    right0.3em;
}

用径向渐变画出眼珠:

.eyes::before,
.eyes::after {
    background
        radial-gradient(
            circle at var(--eyeball-left) 1.5em,
            black 0.4em,
            transparent 0.4em
        ),
        white;
}

.eyes::before {
    --eyeball-left1em;
}

.eyes::after {
    --eyeball-left1.9em;
}

画出内耳的轮廓:

.ears::before,
.ears::after {
    width0.8em;
    height0.9em;
    background-color#2f6317;
    border0.1em solid #1d3a0d;
    border-radius45% 45% 45% 45% / 55% 45% 55% 45%;
}

.ears::before {
    top0.3em;
    left1.3em;
}

.ears::after {
    top: -1.1em;
    right5.8em;
}

用阴影画出外耳:

.ears::before {
    color#50a032;
    box-shadow
        0.4em 0.7em 0 -0.2em,
        -0.2em 0.7em 0 -0.1em,
        -0.6em 0.5em 0 -0.2em,
        -0.1em -0.2em 0 0.4em,
        -0.1em -0.2em 0 0.6em #2b4d13;
    transformrotate(-40deg);
}

.ears::after {
    color#5cb739;
    box-shadow
        0.3em 0.6em 0 -0.2em,
        -0.1em 0.6em 0 -0.1em,
        -0.6em 0.6em 0 -0.2em,
        -0.1em -0.2em 0 0.4em,
        -0.1em -0.2em 0 0.6em #2b4d13;
    transformrotate(-6deg);
}

用伪元素画出眉毛:

.pig::before,
.pig::after {
    width1.4em;
    height1em;
    border-top0.5em solid #0f2d00;
    top2.3em;
    border-radius50% 50% 0 0 / 40% 40% 0 0;
}

.pig::before {
    left1.2em;
    transformrotate(-20deg);
}

.pig::after {
    right1em;
    transformrotate(25deg);
}

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

.pig {
    box-shadow
        inset -1.5em 1em 1.5em -0.5em rgba(2552552550.3),
        inset 0.5em -0.5em 0.8em 0.2em rgba(0000.2);
}

为鼻子增加阴影效果:

.nose {
    box-shadow: -0.1em 0.5em 0.2em 0.1em rgba(68132360.6);
}

.nose::before,
.nose::after {
    box-shadow: inset -0.3em -0.2em 0.1em -0.1em #2d6b1f;
}

为眼睛增加阴影效果:

.eyes::before,
.eyes::after {
    box-shadow
        inset 0.3em -0.6em 0.5em -0.2em rgba(0000.3),
        -0.1em 0.5em 0.2em 0.1em rgba(68132360.6);
}

ok!

参考文献:

  • https://www.runoob.com/cssref/func-radial-gradient.html
  • https://segmentfault.com/a/1190000015909608


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter