• 技术文章 >web前端 >css教程

    如何使用纯CSS实现一把剪刀的效果(附源码)

    不言不言2018-09-10 15:38:56原创1121
    本篇文章给大家带来的内容是关于如何使用纯CSS实现一把剪刀的效果(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    效果预览

    3878475719-5b95ba3809143_articlex.gif

    源代码下载

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

    代码解读

    定义 dom,容器中包含 2 个 .half 元素,各表示剪刀的半边,它的子元素 handle 表示刀柄,blade 表示刀,最后的 .joint 表示连接左右两部分铆钉:

    <figure class="scissors">
        <div class="half">
            <span class="handle"></span>
            <span class="blade"></span>
        </div>
        <div class="half">
            <span class="blade"></span>
            <span class="handle"></span>
        </div>
        <div class="joint"></div>
    </figure>

    居中显示:

    body {
        margin: 0;
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    定义容器尺寸,其中 outline 是辅助线:

    .scissors {
        width: 21em;
        height: 7em;
        outline: 1px dashed;
    }

    定义半边剪刀的尺寸,其中 outline 是辅助线:

    .scissors {
        position: relative;
    }
    
    .half {
        position: absolute;
        width: inherit;
        height: 4em;
        outline: 1px dashed red;
    }

    画出刀柄:

    .handle {
        position: absolute;
        box-sizing: border-box;
        width: 8em;
        height: inherit;
        border: 1em solid #333;
        border-radius: 2em;
    }

    画出刀,用圆角属性画出了顶部的刀尖:

    .blade {
        position: absolute;
        width: 15em;
        height: 1em;
        background-color: silver;
        top: 3em;
        left: 6em;
        border-radius: 0 0 1em 0;
        z-index: -1;
    }

    用伪元素在刀的底部画一个三角形,使刀与刀柄连接得更牢固:

    .blade::before {
        content: '';
        position: absolute;
        border-style: solid;
        border-width: 0 1.8em 1em 1.8em;
        border-color: transparent transparent silver transparent;
        top: -1em;
        left: 0.2em;
    }

    使半边刀倾斜:

    .half {
        transform-origin: 45% bottom;
        transform: rotate(15deg);
    }

    利用 scale() 函数画出剪刀的另一半:

    .half {
        transform-origin: 45% bottom;
        transform: rotate(calc(15deg * var(--direction))) scaleY(var(--direction));
    }
    
    .half:nth-child(1) {
        --direction: 1;
        top: 0;
    }
    
    .half:nth-child(2) {
        --direction: -1;
        top: -1em;
    }

    画出连接左右半边的铆钉:

    .joint {
        position: absolute;
        width: 0.7em;
        height: 0.7em;
        background-color: #333;
        border-radius: 50%;
        top: calc(50% - 0.7em / 2);
        left: 45%;
    }

    增加动画鼠标悬停时的动画效果:

    .scissors:hover .half {
        animation: cut 2s ease-out;
    }
    
    @keyframes cut {
        20%, 60% {
            transform: rotate(calc(30deg * var(--direction))) scaleY(var(--direction));
        }
    
        40%, 80% {
            transform: rotate(calc(5deg * var(--direction))) scaleY(var(--direction));
        }
    }

    最后,别忘了删掉辅助线。

    大功告成!

    相关推荐:

    如何使用纯CSS实现条纹错觉的动画效果(附源码)

    如何使用css实现中国结的效果(代码)

    以上就是如何使用纯CSS实现一把剪刀的效果(附源码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:解决浏览器兼容性的小技巧 下一篇:如何使用CSS在线字体和D3实现Google的信息图
    大前端线上培训班

    相关文章推荐

    • 如何使用纯CSS实现蝴蝶标本的展示框效果• 如何使用纯CSS实现一个足球场的俯视图(附源码)• 如何使用纯CSS实现太阳和地球和月亮的运转模型动画• 如何使用纯CSS实现一个圆环旋转错觉的动画效果(附源码)• 如何使用纯CSS实现方块跳跃的动画(附源码)• 如何使用纯CSS实现条纹错觉的动画效果(附源码)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网