(四十一)巧用CSS3之吃豆变豆

182 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

老话常说:“吃什么补什么”,吃豆人吃了豆是不是就变成了一个大的豆,今天来做一个吃豆人效果,又叫吃豆变豆。

吃豆变豆

吃豆变豆由吃豆人和黄豆组成。

结构

一个容器中包含了吃豆人元素和黄豆元素,如下:

<div class="container">
    <div class="eat">
        <span></span>
    </div>
    <div class="bean"></div>
</div>

样式

首先,我们要把吃豆人给画出来,吃豆人使用两个伪元素形成脸和嘴巴,span标签用来做眼睛👀,如下:

.eat {
    width: var(--size);
    height: var(--size);
    position: absolute;
    left: 0;
    top: 0;
}

.eat span {
    display: inline-block;
    width: 10%;
    height: 10%;
    border-radius: 50%;
    background: #000;
    position: absolute;
    z-index: 1;
    left: 35%;
    top: 20%;
}

.eat::before,
.eat::after {
    content: '';
    width: 100%;
    height: 50%;
    background: gold;
    position: absolute;
    left: 0;
}

.eat::before {
    border-radius: 50% 50% 0 0 /100% 100% 0 0;
    transform-origin: center bottom;
    top: 0;
    transform: rotate(-45deg);
}

.eat::after {
    border-radius: 0 0 50% 50%/0 0 100% 100%;
    transform-origin: center top;
    bottom: 0;
    transform: rotate(45deg);
}

嘴巴和脸是由两个半圆,交叉旋转形成的,因为用的是半圆,所以做注意一下旋转角度的中心点,上半圆以center bottom为旋转中心点,下半圆以center top为旋转中心点,眼睛给个z-index: 1;让它始终在最上层。

然后,我们需要给出黄豆的样式,这个就非常简答了,但是我们还要让它移动,所以我们给出的是一排豆子,使用的是背景色径向渐变和重复,如下:

.bean{
    width: 100%;
    height: 100%;
    position: absolute;
    background: radial-gradient(gold,gold 5%, transparent 20%);
    background-size: var(--size) var(--size);
    z-index: 0;
}

最后,我们需要给吃豆人和豆子加上动画,如下:

.eat::before,
.eat::after {
    animation: _rotate 2s linear infinite;
}

.bean{
    animation: _move 1s linear infinite;
}
@keyframes _rotate{
    50%{
        transform: rotate(0deg);
    }
}
@keyframes _move{
    100%{
        background-position-x: -100%;
    }
}

效果

效果及其代码详情,如下:

总结

吃豆变豆的效果是一口吃两个豆,你可以根据想要的效果,你改变动画时长,吃豆的速度和豆数。