正值初夏,用CSS教你画夏天常玩的四彩小风车

简介: 正值初夏,用CSS教你画夏天常玩的四彩小风车

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

image.png

实现思路


一个盒子中有4个盒子,代表了四个叶片,叶片是一边圆的,通过边框圆角属性实现,每个页片中有俩种不同的颜色,通过伪元素的方式实现另一个盒子,通过定位和边框圆角属性实现俩种不同颜色,定位属性是以上一个拥有定位属性的元素作为基准点的,我们可以利用这一个特点,叶片父元素相对定位,叶片绝对定位的方式定位到合适的位置

中心白色原点通过存放叶片大盒子中的伪元素实现,避免层级结构太过繁琐

棍棍通过额外的一个标签实现,和叶片大盒子并列

风车可以转动,通过css动画属性实现

页面结构


<!-- 风车 Start -->
    <div class="windmill">
    <!-- 叶片 Start -->
        <div></div>
        <div></div>
        <div></div>
        <div></div>
      <!-- 叶片 End -->
    </div>
      <!-- 小棍棍  Start-->
      <i class="windmill_stick"></i>
      <!-- 小棍棍  End-->
    <!-- 风车 End -->

这里需要先给大盒子设置下样式,以便于定位叶片位置

.windmill {
            width: 700px;
            height: 700px;
            margin: 0 auto;
            position: relative;
            z-index: 99;
            }

叶片轮廓


image.png

通过给一个盒子设置宽高,左上角边框圆角为90%实现这种效果

.windmill>div {
            width: 100px;
            height: 150px;
            background: red;
            border-top-right-radius: 95%;
        }

叶片样式实现


叶片给边框颜色实现边框的和内容不同色的效果,然后再通过伪元素的方式实现俩种不同颜色,也需要给伪元素添加边框颜色,这样可以做出一个分区的效果,伪元素是行内元素,所以使用了浮动脱离了标准流,可以给伪元素设置宽和高

image.png

.windmill>div {
            box-sizing: border-box;
            width: 100px;
            height: 150px;
            background: rgb(255, 227, 101);
            border-top-right-radius: 95%;
            border: 3px solid rgb(255, 158, 18);
            overflow: hidden;
        }
        .windmill>div::after {
            width: 100%;
            height: 100%;
            content: '';
            float: left;
            background: rgb(255, 243, 192);
            border-bottom-right-radius: 100%;
            border-bottom: 3px solid rgb(255, 158, 18);
            border-right: 3px solid rgb(255, 158, 18);
        }

叶片不同样式实现


image.png

由于每个叶片的颜色不一样,我们通过css属性选择器给每个风车的叶片添加上颜色分区的效果

.windmill>div {
            width: 100px;
            height: 150px;
            background: rgb(255, 227, 101);
            border-top-right-radius: 95%;
            border: 3px solid rgb(255, 158, 18);
            overflow: hidden;
        }
        .windmill>div::after {
            width: 100%;
            height: 100%;
            content: '';
            float: left;
            background: rgb(255, 243, 192);
            border-bottom-right-radius: 100%;
            border-bottom: 3px solid rgb(255, 158, 18);
            border-right: 3px solid rgb(255, 158, 18);
        }
        .windmill>div:nth-child(2) {
            background: rgb(255, 142, 103);
            border: 3px solid rgb(255, 105, 134);
        }
        .windmill>div:nth-child(2)::after {
            background: rgb(253, 208, 228);
            border-bottom: 3px solid rgb(255, 105, 134);
            border-right: 3px solid rgb(255, 105, 134);
        }
        .windmill>div:nth-child(3) {
            background: rgb(48, 203, 255);
            border: 3px solid rgb(44, 150, 255);
        }
        .windmill>div:nth-child(3)::after {
            background: rgb(131, 211, 255);
            border-bottom: 3px solid rgb(44, 150, 255);
            border-right: 3px solid rgb(44, 150, 255);
        }
        .windmill>div:nth-child(4) {
            background: rgb(95, 226, 158);
            border: 3px solid rgb(53, 186, 140);
        }
        .windmill>div:nth-child(4)::after {
            background: rgb(164, 255, 216);
            border-bottom: 3px solid rgb(53, 186, 140);
            border-right: 3px solid rgb(53, 186, 140);
        }

小圆点的实现


image.png

这里通过叶片大盒子的伪元素实现小圆点的效果,设置一个边框颜色,采用边框圆角属性实现圆得效果

.windmill::after {
            content: "";
            width: 20px;
            height: 20px;
            border-radius: 50%;
            background: #fff;
            border: 3px solid rgb(134, 89, 69);
        }

小棍棍的实现


image.png

这个盒子需要和叶片大盒子同级,因为大盒子最后要添加一个动画效果,如果添加上去的话会导致棍棍跟着旋转

.windmill_stick {
            position: absolute;
            top: 400px;
            left: 50%;
            width: 10px;
            height: 290px;
            background: rgb(97, 56, 40);
        }

叶片摆放


image.png

通过css旋转属性,旋转出不同摆放位置的角度,在通过给子绝父相的方式把叶片的位置摆放好

.windmill {
            width: 700px;
            height: 700px;
            margin: 0 auto;
            position: relative;
            display: flex;
            justify-content: center;
            align-items: center;
            z-index: 99;
        }
        .windmill::after {
            content: "";
            width: 20px;
            height: 20px;
            border-radius: 50%;
            background: #fff;
            border: 3px solid rgb(134, 89, 69);
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            z-index: 99;
        }
        .windmill>div {
            box-sizing: border-box;
            position: absolute;
            top: 28%;
            left: 33%;
            width: 100px;
            height: 150px;
            background: rgb(255, 227, 101);
            border-top-right-radius: 95%;
            border: 3px solid rgb(255, 158, 18);
            overflow: hidden;
            transform: translate(50%) rotate(-45deg);
            z-index: 9;
        }
        .windmill>div::after {
            width: 100%;
            height: 100%;
            content: '';
            float: left;
            background: rgb(255, 243, 192);
            border-bottom-right-radius: 100%;
            border-bottom: 3px solid rgb(255, 158, 18);
            border-right: 3px solid rgb(255, 158, 18);
        }
        .windmill>div:nth-child(2) {
            background: rgb(255, 142, 103);
            border: 3px solid rgb(255, 105, 134);
            top: 15%;
            left: 56%;
            transform: translate(0, 100%) rotate(45deg);
            z-index: 10;
        }
        .windmill>div:nth-child(2)::after {
            background: rgb(253, 208, 228);
            border-bottom: 3px solid rgb(255, 105, 134);
            border-right: 3px solid rgb(255, 105, 134);
        }
        .windmill>div:nth-child(3) {
            background: rgb(48, 203, 255);
            border: 3px solid rgb(44, 150, 255);
            top: 30%;
            left: 46%;
            transform: translate(0, 100%) rotate(136deg);
            z-index: 11;
        }
        .windmill>div:nth-child(3)::after {
            background: rgb(131, 211, 255);
            border-bottom: 3px solid rgb(44, 150, 255);
            border-right: 3px solid rgb(44, 150, 255);
        }
        .windmill>div:nth-child(4) {
            background: rgb(95, 226, 158);
            border: 3px solid rgb(53, 186, 140);
            top: 21%;
            left: 30%;
            transform: translate(0, 100%) rotate(-135deg);
        }
        .windmill>div:nth-child(4)::after {
            background: rgb(164, 255, 216);
            border-bottom: 3px solid rgb(53, 186, 140);
            border-right: 3px solid rgb(53, 186, 140);
        }
        .windmill_stick {
            position: absolute;
            top: 400px;
            left: 50%;
            width: 10px;
            height: 290px;
            background: rgb(97, 56, 40);
        }

风车的转动


我们通过css动画属性@keyframes实现风车转动的效果,我们让他转速快一些就设置1000度

@keyframes windmillRotate {
            from {
                transform: rotate(0deg);
            }
            to {
                transform: rotate(1000deg);
            }
        }

最后把动画添加给风车叶片的大盒子

.windmill {
            animation: windmillRotate 5s linear infinite;
        }

最终效果


image.png



相关文章
|
前端开发 JavaScript 开发者
CSS动画新挑战:纯CSS实现的小风车效果!
CSS动画新挑战:纯CSS实现的小风车效果!
|
前端开发
css实现风车样式
css实现风车样式
200 0
|
前端开发
CSS 绘制小风车
CSS 绘制小风车
241 0
|
前端开发 JavaScript
正值初夏,用CSS画一个七彩风车
正值初夏,用CSS画一个七彩风车
正值初夏,用CSS画一个七彩风车
|
前端开发
css 实现旋转-风车
css 实现旋转-风车
css 实现旋转-风车
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
1287 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
css3 svg制作404页面动画效果HTML源码
css3 svg制作404页面动画效果HTML源码
330 34
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
934 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
1009 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    593
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    451
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    452
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    297
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    577
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    751
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1475
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    325
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1191
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    530