您好,欢迎来到易妖游戏网。
搜索
您的当前位置:首页如何使用纯CSS实现一只纸鹤(附源码)

如何使用纯CSS实现一只纸鹤(附源码)

来源:易妖游戏网
 本篇文章给大家带来的内容是关于如何使用纯CSS实现一只纸鹤(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

效果预览

源代码下载

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

代码解读

定义 dom,容器中包含 6 个元素,分别代表头、颈、身体侧面、翅、尾、胸:

<div class="cranes">
 <span class="head"></span>
 <span class="neck"></span>
 <span class="side"></span>
 <span class="wing"></span>
 <span class="tail"></span>
 <span class="belly"></span>
</div>

居中显示:

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

定义容器尺寸:

.cranes {
 width: 52em;
 height: 50em;
 font-size: 7px;
}

设置纸鹤的颜色为白色:

.cranes {
 color: white;
}

画出头部:

.cranes {
 position: relative;
}

.head {
 border-left: 13em solid transparent;
 border-right: 6em solid transparent;
 border-bottom: 2em solid;
 position: absolute;
 left: 0;
 top: 21;
 transform: rotate(-5deg);
}

把以上创建三角形的代码抽象成一个模板,然后数据都改为变量,类似于调用函数的样子:

.cranes span {
 border-left: calc(var(--left) * 1em) solid transparent;
 border-right: calc(var(--right) * 1em) solid transparent;
 border-bottom: calc(var(--bottom) * 1em) solid;
 position: absolute;
 transform: rotate(calc(var(--rotation) * 1deg));
 left: calc(var(--x) * 1em);
 top: calc(var(--y) * 1em);
}

.head {
 --left: 13;
 --right: 6;
 --bottom: 2; 
 --x: 0;
 --y: 21;
 --rotation: -5;
}

设置透明度,以便元素叠加处有折纸效果:

.cranes span {
 filter: opacity(0.6);
}

接下来就是逐个调用生成三角形的函数创建其他三角形:

颈:

.neck {
 --left: 6;
 --right: 6;
 --bottom: 12;
 --x: 14;
 --y: 19;
 --rotation: 75;
}

身体侧面:

.side {
 --left: 1.5;
 --right: 11.5;
 --bottom: 20;
 --x: 18.8;
 --y: 15.1;
 --rotation: 20;
}

翅:

.wing {
 --left: 18.7;
 --right: 30;
 --bottom: 8;
 --x: 6.7;
 --y: 9.2;
 --rotation: -41.9;
}

尾:

.tail {
 --left: 18.6;
 --right: 7.7;
 --bottom: 3.9;
 --x: 19.6;
 --y: 38.1;
 --rotation: -126.5;
}

胸:

.belly {
 --left: 6.2;
 --right: 1.8;
 --bottom: 11.5;
 --x: 17.5;
 --y: 27.8;
 --rotation: -99;
}

至此,纸鹤画完。
最后,增加一点交互效果,当鼠标悬停时,由等腰直角三角形变形成鹤:

.cranes:hover span {
 animation: appear 1s ease-in;
}

@keyframes appear {
 from {
 border-left: 3em solid transparent;
 border-right: 3em solid transparent;
 border-bottom: 3em solid;
 position: absolute;
 transform: rotate(0deg);
 left: calc((52em - 3em) / 2);
 top: calc((50em - 3em) / 2);
 }
}

大功告成!

Copyright © 2019- vipyiyao.com 版权所有 湘ICP备2023022495号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务