(三十八)巧用CSS3之半瓶咣当水

425 阅读2分钟

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

俗话说:“一瓶子不满,半瓶子咣当”,今天我们就来实现一个半瓶咣当水效果。

半瓶咣当水

一个瓶子半瓶水,摇摇晃晃还挺美。

结构

需要一个瓶子和一个水的元素就好,如下:

<div class="container">
    <div class="water"></div>
</div>

样式

首先,我们需要把瓶子给画出来,瓶子由瓶身和瓶口组成。

瓶身

给瓶身一个背景色,还有一个瓶身反光色,瓶身反光色是使用伪元素after来完成的,代码如下:

.container {
    --size: 10rem;
    width: var(--size);
    height: var(--size);
    border-radius: 50%;
    border: calc(var(--size) * 0.05) solid transparent;
    background-color: rgba(255, 255, 255, 0.1);
    position: relative;
}

.container::before,
.container::after {
    content: '';
    width: 50%;
    height: 20%;
    border-radius: 50%;
    box-sizing: border-box;
    position: absolute;
    left: 25%;

}

.container::after {
    background-color: rgba(255, 255, 255, 0.1);
    top: 30%;
}

瓶身的效果,如下图所示:

1655434059313.jpg

半瓶水

半瓶水是使用伪元素before实现的,里面用到了阴影效果,如下:

.container::before {
    box-shadow: 0 0 1rem rgba(255, 255, 255, 0.1);
    border: calc(var(--size) * 0.05) solid rgba(255, 255, 255, 0.3);
    top: calc(var(--size) * -0.05);
}  

1655434267484.jpg

最后,我们需要给瓶子和水加上动画,瓶子的旋转角度区间是 [-30deg,30deg],水的旋转角度区间是 [-15deg,15deg],具体代码如下:

@keyframes _animate {

    0%,
    100% {
        transform: rotate(-30deg);
    }

    25%,
    75% {
        transform: rotate(0deg);
    }

    50% {
        transform: rotate(30deg);
    }
}

@keyframes _animate2 {

    0%,
    100% {
        transform: rotate(15deg);
        filter: hue-rotate(360deg);
    }

    25%,
    75% {
        transform: rotate(0deg);
    }

    50% {
        transform: rotate(-15deg);
        filter: hue-rotate(0deg);

    }
}

效果

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

总结

在这个效果中,我们需要注意的是瓶子和水的旋转角度的方向是相反的,另外在旋转的过程中增加了水颜色变换的效果,这样就变成了一个多彩的半瓶咣当水效果。