CSS教你画一个可爱蛋

2,393 阅读3分钟

生活中,我们早上通常都会吃一个茶叶蛋来补充一天的营养,今天我们就来用CSS来实现一个可爱蛋吧

效果图

企业微信截图_16583009261244.png

实现思路

我们利用container类名盒子作为可爱蛋的载体并通过flex布局的方式使得可爱蛋能够在元素中居中,给上地位便于以后进行定位操作,在通过外边距使得载体距离上面有一定的距离,我们来用ellipse盒子用于定位蛋身里面的内容以及实现单身下边部分的黄壳,egg类名盒子作为蛋身,通过边框圆角的属性实现椭圆蛋身,在通过eye类名元素通过定位结合伪元素的方式实现眼睛的布局,在通过mouth类名元素实现嘴巴的效果,在通过无序列表的方式实现一个蛋齿纹,最后通过动画属性实现可爱蛋的摇摆,下面我们来实现一下吧

主体结构

 <div class="container">
        <!-- 蛋 -->
        <div class="ellipse">
            <!-- 内容 -->
            <div class="egg">
                <!-- 蛋眼睛 -->
                <div class="eye"></div>
                <div class="eye"></div>
                <!-- 蛋嘴巴 -->
                <div class="mouth"></div>
                <!-- 蛋齿纹 -->
                <ul>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                </ul>
            </div>
        </div>
    </div>

初始样式

  * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            list-style: none;
        }

可爱蛋的载体,在通过圆边框属性实现单身的椭圆形状

        .container {
            width: 500px;
            height: 500px;
            margin: 50px auto;
            display: flex;
            justify-content: center;
            align-items: center;
            position: relative;
        }
  .ellipse {
            position: relative;
        }
     .egg {
            width: 290px;
            height: 340px;
            border: 18px solid black;
            border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
            position: relative;
            z-index: 5;
        }
     

企业微信截图_16583048741454.png

眼睛

我们在给可爱蛋做出眼睛,这里通过俩个盒子进行实现,一个左眼睛一个右眼睛,在通过伪元素的方式实现目光,在通过定位的方式定位到对应的位置

    .eye {
            position: absolute;
            width: 30px;
            height: 30px;
            border-radius: 50%;
            background-color: #000;
            top: 18%
        }

        .eye:nth-child(1) {
            left: 23%;
        }

        .eye:nth-child(2) {
            right: 23%;
        }

        .eye::after {
            content: "";
            width: 13px;
            height: 13px;
            background-color: #fff;
            border-radius: 50%;
            position: absolute;
            left: 2px;
            top: 3px;
        }

企业微信截图_1658304965256.png

嘴巴

嘴巴这里我们通过css的定位方式以及旋转属性实现一个菱形的效果定位到合适的位置

      .mouth {
            width: 28px;
            height: 28px;
            background-color: #000;
            border-radius: 12% / 4%;
            transform: rotate(45deg) translateX(-50%);
            transform-origin: left;
            position: absolute;
            top: 35%;
            left: 50%;
        }

企业微信截图_16583050481118.png

齿纹

我们通过无序列表的方式结合定位以及旋转属性实现蛋壳齿纹,因为每个元素旋转的度数不一样,所以需要每一个都单独设置旋转角度

    .egg ul li {
            position: absolute;
            height: 51px;
            transform: rotate(220deg);
            border-left: 18px solid black;
            border-top: 18px solid black;
        }

        .egg ul li:nth-child(1) {
            top: 53%;
            height: 40px;
            width: 45px;
            left: -4px;
        }

        .egg ul li:nth-child(2) {
            top: 49.5%;
            width: 58px;
            left: 16%;
        }

        .egg ul li:nth-child(3) {
            top: 49.5%;
            width: 58px;
            left: 36.5%;
        }

        .egg ul li:nth-child(4) {
            top: 49.5%;
            width: 58px;
            left: 57%;
        }

        .egg ul li:nth-child(5) {
            top: 49.5%;
            width: 62px;
            left: 77.5%;
        }

企业微信截图_16583056899501.png

下半身

这样基本上做好了,不过下面的蛋壳齿纹下面不太好看,我们通过伪元素来做一个下半身蛋壳

  .ellipse::after {
            content: "";
            position: absolute;
            width: calc(100% - 25px);
            height: 39%;
            background-color: rgba(244, 247, 97, 0.753);
            bottom: 0;
            left: 10px;
            border-radius: 0 0 50% 50% / 0 0 100% 100%;
            z-index: 0;
        }

企业微信截图_16583058013294.png

动画

最后我们通过css的动画属性设置动画在0%/50%/100%的时候角度全部归为0也就是原本样式,在25%和75%的时候分别向右偏移10deg和向左偏移10deg,在给ellipse类名盒子设置好摇摆角度和对应的运行速度进行无限次运行

   .ellipse {
            animation: swing 3s linear infinite;
            transform-origin: center bottom;
        }
        @keyframes swing {
            0% {
                transform: rotate(0deg);
            }

            25% {
                transform: rotate(10deg);
            }

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

            75% {
                transform: rotate(-10deg);
            }

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

代码我已经放到码上掘金上了,快开看看吧!

我正在参加「创意开发 投稿大赛」详情请看:掘金创意开发大赛来了!