想起之前朋友给我发的一个图片
其实是chrome插件infinity首页右下角的风车
请允许我安利一波这插件
忽发奇想能不能用纯CSS做一个出来.. 仔细看了看这风车,好像构造也不算太复杂,于是昨晚就动手了
先看看最终效果
传送门(github)
其实源码大家都可以用F12看到了(代码很烂- -大婶勿喷)..
下面我就来分析一下制作过程(过程仅供大家参考..因为太烂了..不建议模仿..有更好的代码欢迎交流..)
首先先做出风车的其中一个扇叶
原理其实也很简单,深色部分其实是一个完整的矩形,然后用border-radius把右上角做成圆角的。至于那个有圆角的三角形,其实是用边框做的,当然,还是要用border-radius把角做成有弧度的。
有兴趣的朋友可以看看这里详解css画一个三角形
事不宜迟。talk is cheap , show you my code
*{
margin: 0;
padding: 0;
}
.tri{
width: 0;
height: 0;
border-width: 142px;
border-style: solid;
border-top-left-radius: 109px 122px;
position: absolute;
transform: rotate(45deg);
top: 28px;
left: 56px;
border-color: #1ABC9C transparent transparent #1ABC9C;
}
.squ{
position: absolute;
width: 271px;
height: 170px;
border-top-right-radius: 98px 68px;
background-color: #16A085;
}
把剩下的三个扇叶做出来
OK,既然一个扇叶做出来了,其他的也就不成问题了,也就是改一改颜色,每个扇叶用一个div包起来,然后再加上各种位移,将四个扇叶分别放好
当然咯,少不了我们中间的小圆点(完整代码放最后)
最后用一个大的div把整个风车包起来,加上旋转的效果,就大功告成了!
(今天刚学了选择器,为了没有太多的冗余代码,css较上面的会稍稍进行处理)
超级无敌完整代码:
CSS部分:
*{
margin: 0;
padding: 0;
}
.main{
width: 804px;
height: 804px;
animation: roll 1000ms linear infinite;
}
@keyframes roll{
0%{transform: rotate(0deg);}
100%{transform: rotate(-360deg);}
}
.white_circle{
z-index: 99;
position: absolute;
width: 50px;
height: 50px;
border-radius: 50px;
background-color: white;
margin: 377px 0 0 377px;
}
.fla{
position: absolute;
width: 402px;
height: 180px;
}
.fla_one{
transform: rotate(270deg);
margin:108px 0px 0px 121px;
}
.fla_two{
transform: rotate(180deg);
margin-top: 389px;
}
.fla_three{
transform: rotate(90deg);
margin: 511px 0 0 280px;
}
.fla_four{
transform: rotate(360deg);
margin: 230px 0 0 402px;
}
.tri{
width: 0;
height: 0;
border-width: 142px;
border-style: solid;
border-top-left-radius: 109px 122px;
position: absolute;
transform: rotate(45deg);
top: 28px;
left: 56px;
}
.tri_one {
border-color: #F1C40F transparent transparent #F1C40F;
}
.tri_two {
border-color: #EA4C3C transparent transparent #EA4C3C;
}
.tri_three {
border-color: #2ECC71 transparent transparent #2ECC71;
}
.tri_four {
border-color: #1ABC9C transparent transparent #1ABC9C;
}
.squ{
position: absolute;
width: 271px;
height: 170px;
border-top-right-radius: 98px 68px;
}
.squ_one{
background-color: #F39C12;
}
.squ_two{
background-color: #C0392B;
}
.squ_three{
background-color: #27AE60;
}
.squ_four{
background-color: #16A085;
}
HTML部分:
<div class="main">
<div class="white_circle"></div>
<div class="fla fla_one">
<div class="squ squ_one"></div>
<div class="tri tri_one"></div>
</div>
<div class="fla fla_two">
<div class="squ squ_two"></div>
<div class="tri tri_two"></div>
</div>
<div class="fla fla_three">
<div class="squ squ_three"></div>
<div class="tri tri_three"></div>
</div>
<div class="fla fla_four">
<div class="squ squ_four"></div>
<div class="tri tri_four"></div>
</div>
</div>