正值初夏,用CSS画一个七彩风车

933 阅读3分钟

我正在参加「初夏创意投稿大赛」详情请看:初夏创意投稿大赛

效果图

企业微信截图_16537972342306.png

实现思路

我们给一个版心,防止屏幕变大变小样式错乱,然后使用div装风叶盒子和风车杆

风叶盒子采用ul和li去做,这样做出来的层次分明有结构感,然后通过css的旋转属性,用js进行遍历添加到行内,顺便也给每个风叶添加颜色,这里风叶有一个透明的效果,这里可以采用透明度属性进行设置

风叶杆用div的伪元素进行实现,然后通过定位,定位到合适的位置

在通过css的动画属性让风叶转动起来

页面结构

<div class="box">
	<!-- 风车盒子-->
 <div>
   <ul class="windmill">
<!-- 风车叶子 -->
	<li></li>
	<li></li>
	<li></li>
	<li></li>
	<li></li>
	<li></li>
	<li></li>
   </ul>
 </div>
</div>

风叶盒子

风叶盒子我们用ul来做,这样显得层次分明,也好便于使用js进行操作,给风叶盒子设置好宽高后,一个风叶盒子就好了

企业微信截图_16537957524563.png

	            /* 风车大盒子 */
			.windmill {
				position: relative;
				z-index: 9;
				width: 400px;
				height: 400px;
				
			}

风叶的制作

风叶通过ul里面的li结合CSS圆角边框的属性进行实现,我们在让所有的风叶同意到达风叶盒子的正中心,这里采用到了定位,然后再把他的旋转中心点设置到左下角,因为一会要通过js进行统一旋转

企业微信截图_16537957752241.png

		/* 风车叶片 */
			.windmill li {
				position: absolute;
				top: 0;
				left: calc(50% - 100px);
				z-index: 99;
				width: 100px;
				height: 200px;
				border-radius: 100px 0 0 100px;
				transform-origin: right bottom;
			
			}

通过js获取到所有的风叶,然后定义好一个旋转基准值便于循环赋值每个风叶的旋转角度,在设置一个扇叶数组,扇叶数组里面存着每个扇叶的颜色,如果有多的扇叶则默认采取第一个,完成以后在通过es6中的map方法进行循环遍历设置背景色和旋转角度

	//获取所有的风叶元素
			const lis = document.querySelectorAll('.windmill li');
			// 旋转基准值
			const deg = 50;
			// 扇叶颜色
			const Color = [
				'150,211,186',
				'215,152,186',
				'162,121,186',
				'150,211,186',
				'215,172,86',
				'251,100,81',
				'140,190,186',
				'251,101,120'
			];

                  // 由于获取的是伪数组,通过es6的解构赋值进行转换成真正的数组
			[...lis].map((R, i) => {
				// 给风叶设置行内属性旋转
				R.style.transform = `rotate(${(i+1)*deg}deg)`
				// 给风叶设置背景颜色,背景颜色如果当前未设置,就默认采用第一个
				R.style.backgroundColor = `rgb(${Color[i]||Color[0]})`
			})

然后再给风叶添加一个背景透明色,基本就完成了

opacity: .7;

企业微信截图_16537962909533.png

风车杆

风车杆我们采用包含着风车盒子的伪元素来做,设置一个宽高,在通过定位定位到正中间,然后设置一个颜色

	                    /* 风车杆 */
				.box>div{
					width: 400px;
					height: 400px;
				}
			.box>div::after {
				content: '';
				width: 15px;
				height: 450px;
				background: rgb(251, 199, 149);
				position: absolute;
				top: 230px;
				left: 50%;
				transform: translate(-50%);
			}

企业微信截图_16537965507562.png

风车转动

最后我们通过设置css的动画操作风叶大盒子的旋转属性让他旋转起来,这样就完成了

       /* 风车大盒子 */
			.windmill {
				position: relative;
				z-index: 9;
				width: 400px;
				height: 400px;
				animation: rote 2s linear infinite;
			}

			/* 旋转动画 */
			@keyframes rote {
				from {
					transform: rotate(0deg);
				}

				to {
					transform: rotate(1080deg);
				}
			}

代码我上传到了码上掘金上面,大家快过去看看吧 最后祝大家每天开开心心的,坚持努力,无惧未来!