• 如何用纯 CSS 创作一个蝴蝶标本展示框


    效果预览

    在线演示

    按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

    https://codepen.io/comehope/pen/xzgZzQ

    可交互视频教程

    此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

    请用 chrome, safari, edge 打开观看。

    https://scrimba.com/p/pEgDAM/cN7EncL

    源代码下载

    本地下载

    每日前端实战系列的全部源代码请从 github 下载:

    https://github.com/comehope/front-end-daily-challenges

    代码解读

    定义 dom,容器表示整只蝴蝶,因为蝴蝶是对称的,所以分为左右两边,每边有 3 个子元素:

    <div class="butterfly">
        <div class="left">
            <span></span>
            <span></span>
            <span></span>
        </div>
        <div class="right">
            <span></span>
            <span></span>
            <span></span>
        </div>
    </div>
    

    居中显示:

    body {
        margin: 0;
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
        background: linear-gradient(gray, lightyellow, gray);
    }
    

    定义蝴蝶的尺寸:

    .butterfly {
        position: relative;
         10em;
        height: 10em;
    }
    

    先画左半边:

    .butterfly .left {
        position: absolute;
         inherit;
        height: inherit;
    }
    

    用第 1 个子元素画出翅膀的上半部分:

    .butterfly span {
        position: absolute;
        border-radius: 50%;
    }
    
    .butterfly span:nth-child(1) {
         5em;
        height: 7em;
        background-color: gold;
    }
    

    用第 2 个子元素画出翅膀的下半部分:

    .butterfly span:nth-child(2) {
         5.5em;
        height: 3.5em;
        background-color: orangered;
        top: 5em;
        left: -2.5em;
        filter: opacity(0.6);
    }
    

    用第 3 个子元素画出触角:

    .butterfly span:nth-child(3) {
         6em;
        height: 6em;
        border-right: 0.3em solid orangered;
        top: -0.5em;
    }
    

    把左半边复制一份到右半边:

    .butterfly .right {
        position: absolute;
         inherit;
        height: inherit;
    }
    
    .butterfly .right {
        transform: rotateY(180deg) rotate(-90deg);
        top: 0.4em;
        left: 0.4em;
    }
    

    把标本装到展示框里:

    .butterfly::before {
        content: '';
        position: absolute;
        box-sizing: border-box;
        top: -2.5em;
        left: -8em;
         24em;
        height: 18em;
        background-color: black;
          border: 0.2em inset silver;
    }
    
    .butterfly::after {
        content: '';
        position: absolute;
        box-sizing: border-box;
         40em;
        height: 30em;
        background-color: lightyellow;
        top: -9em;
        left: -16em;
        border: 2em solid burlywood;
        border-radius: 3em;
        box-shadow: 
            0 0.3em 2em 0.4em rgba(0, 0, 0, 0.3),
            inset 0.4em 0.4em 0.1em 0.5em rgba(0, 0, 0, .4);
        z-index: -1;
    }
    

    最后,调整一下因图案倾斜引起的位移:

    .butterfly {
        transform: translateX(1em);
    }
    

    大功告成!

    原文地址:https://segmentfault.com/a/1190000015236585
  • 相关阅读:
    linux ---用uniq实现文件的并集和交集
    vim的.vimrc文件设置
    CURL常用命令
    快速入门系列--MVC--03控制器和IOC应用
    linux下git安装
    openerp child_of操作符深度解析
    apache2 + virtualenv +djangocms
    django-cms安装
    pycharm3.4 下svn 项目checkout&配置
    在django项目外,使用django.db链接数据库(postgres)
  • 原文地址:https://www.cnblogs.com/lalalagq/p/10007732.html
Copyright © 2020-2023  润新知