CSS特效之丑蘑菇

930 阅读3分钟

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

先上效果图

企业微信截图_16534898951777.png

图如其名,接下来我讲解排版思路

实现思路

蘑菇分为头部,根部,俩大部分,头部还有一些不规则形状的蘑菇点

头部通过盒子先花一个半圆,然后通过伪元素的方式定位到头部盒子的最底部,实现头部的效果

根部就很简单了,这里就不说了

小圆点通过定位的方式实现不同位置的排列,其中还通过CSS的扭曲属性实现不规则的小圆点

   transform: skew(0deg, 10deg);

页面结构

    <!-- 大盒子 -->
    <div class="mushroom_box">
        <!-- 蘑菇头 -->
        <div class="mushroom_top">
            <!-- 不规则小圆点 -->
            <i></i>
            <i></i>
            <i></i>
            <i></i>
            <i></i>
        </div>
        <!-- 蘑菇根部 -->
        <div class="mushroom_bottom"></div>
    </div>

先给大盒子排好基本布局样式免得最后样式错乱,大盒子采用flex布局的方式设置Y轴为主轴侧轴居中,实现盒子里面的子元素居中排列

         /* 大盒子 */
        .mushroom_box {
            position: relative;
            box-sizing: border-box;
            width: 750px;
            padding-top: 20px;
            margin: 0 auto;
            display: flex;
            flex-direction: column;
            align-items: center;
        }

蘑菇头部

首先先画出来一个半圆

企业微信截图_16534879635851.png

          /* 蘑菇头 */
         .mushroom_top {
            position: relative;
            width: 400px;
            height: 200px;
            background: #FE876F;
            border-top-left-radius: 200px;
            border-top-right-radius: 200px;
        }
        

画出半圆后在通过伪元素的方式完成蘑菇头的基本样式,伪元素这里要采用定位的方式把他定位到半圆的底部,这样就实现了一个头部的基本轮廓

企业微信截图_16534882005941.png

    .mushroom_top::after {
            content: '';
            position: absolute;
            top: 100%;
            width: 400px;
            height: 100px;
            border-bottom-left-radius: 200px;
            border-bottom-right-radius: 200px;
            background: #FE876F;
        }

头部完成后,需要在给上边框,这样才能实现一个初步的效果,伪元素也需要给边框,整个头部都需要有边框,伪元素有了边框之后会和头部的盒子对不起,这是因为伪元素是基准头部盒子的content部分进行定位的,但是边框不在content部分,这个时候需要给通过定位的left属性减去边框的宽度就可以实现对齐的效果了

企业微信截图_16534882991624.png

     /* 蘑菇头 */
        
        .mushroom_top {
  
            border: 4px solid #000;
        }
        
        .mushroom_top::after {
            content: '';
            position: absolute;
            top: 100%;
            left: -4px;
            border: 4px solid #000;
            border-top: none;
        }

蘑菇头根部

蘑菇头根部比较简单,给宽高和边框就好了,最后在通过边框圆角的方式实现一个圆底

企业微信截图_16534887968031.png

  /* 蘑菇根部 */ 
        .mushroom_bottom {
            width: 120px;
            height: 300px;
            background: #FFF6E5;
            border: 4px solid #000;
            border-top-left-radius: 150px;
            border-top-right-radius: 150px;
            border-bottom-left-radius: 100px;
            border-bottom-right-radius: 100px;
        }

不规则蘑菇圆点

企业微信截图_16534896292486.png

不规则蘑菇圆底,通过给蘑菇头里面的标签定位的方式结合css序选择器实现圆点的大小和不同位置的排列,在通过css3的skew扭曲属性实现不规则的圆点大小

  /* 蘑菇小黄点 */
        
        .mushroom_top>i {
            position: absolute;
            width: 30px;
            height: 30px;
            border-radius: 50%;
            background: #FFF9D6;
            border: 3px solid #000;
            top: 20%;
            left: 40%;
        }
        
        .mushroom_top>i:nth-child(2) {
            top: 30%;
            left: 20%;
            width: 40px;
            height: 50px;
            transform: skew(30deg, 20deg);
        }
        
        .mushroom_top>i:nth-child(3) {
            top: 70%;
            left: 60%;
            width: 70px;
            height: 70px;
            z-index: 8;
        }
        
        .mushroom_top>i:nth-child(4) {
            top: 70%;
            left: 20%;
            width: 90px;
            height: 90px;
            transform: skew(0deg, 10deg);
            z-index: 8;
        }
        
        .mushroom_top>i:nth-child(5) {
            top: 15%;
            left: 60%;
            width: 90px;
            height: 90px;
            z-index: 8;
        }

我把代码放到码上掘金上了,大家快来看看吧 最后祝大家如花似叶,岁岁年年,共占春风。