HTML+CSS编写飞机窗帘开关动画,给有需要的朋友参考
HTML代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <!-- 引入css --> <link rel="stylesheet" href="./style.css"> </head> <body> <!--在dom中增加表示云朵的.clouds元素.其中可以定义5个span子元素 分别代表1个云朵 --> <input type="checkbox"> <figure> <!-- 窗帘 --> <div></div> <div> <span></span> <span></span> <span></span> <span></span> <span></span> </div> </figure> </body> </html>
CSS代码
/* 初始化 */ body{ margin: 0px; height: 100vh; /* 弹性布局 */ display: flex; /* 水平居中 */ justify-content: center; /* 上下居中 */ align-items: center; /* 定义背景颜色 */ background-color: skyblue; } .window{ /* 相对定位 */ position: relative; /* 盒子模型 */ box-sizing: border-box; /* 窗户视图宽是125px不包含外边有box-shadow 画的外边框 */ width: 25em; /* 窗户视图高是125px */ height: 35em; font-size: 5px; background-color: #d9d9d9; /* 边框变圆 */ border-radius: 5em; box-shadow: /* 定义黑色边框 */ inset 0 0 8em rgba(0, 0, 0, 0.2), /* 深灰色的边缘线 */ 0 0 0 0.4em #808080, 0 0 0 4em whitesmoke, /* 深灰色的边缘线 */ 0 0 0 0.4em #808080, /* 给阴影加一个原始尺寸 这个尺寸是由第四个参数决定的 */ 0 2em 4em 4em rgba(0, 0, 0, 0.1); /* 这个地方加个hidden 未来使下面用到定位的时候,top:-5%的时候 可以将溢出的部分隐藏 */ overflow: hidden; } /* curtain 是窗户的窗帘 和窗口尺寸一致 但不拉到底 */ .window .curtain{ /* 绝对定位 */ position: absolute; left: 0; /* 相对于窗帘的高度 计算向上移动一点 */ top: -5%; /* 继承父标签的尺寸 */ width: inherit; height: inherit; border-radius: 5em; background-color: whitesmoke; /* 给盖子加上边框 0.5em比上面的0,4em大一点能盖住之前的边框 */ box-shadow: 0 0 0 0.5em #808080, 0 0 3em rgba(0, 0, 0, 0.4); /* 给top元素加上过渡效果 */ transition: top 0.5s ease-in-out; z-index: 2; } /* 当多选框被选中的时候, 窗帘网上飘走*/ .toggle:checked ~ .window .curtain{ top: -90%; } /* 用伪类在窗帘上画出灰色长条 */ .window .curtain::before{ content: ''; position: absolute; width: 40%; height: 0.8em; background-color: #808080; left: 30%; bottom: 1.6em; border-radius: 0.4em; } /* 用伪类在窗帘上画出径向渐变的指示灯 */ .window .curtain::after{ content: ''; position: absolute; width: 1.6em; height: 0.8em; background-image: radial-gradient(orange,orangered); bottom: 1.6em; /* 100% 值得是窗户视图的唯一指示灯宽度,然后咱们可以将剩余的距离居中 */ left: calc((100% - 1.6em)/2); border-radius: 0.4em; } /* 当窗帘被选中的时候,颜色变成绿色 */ .toggle:checked ~ .window .curtain::after{ background-image: radial-gradient(lightgreen,limegreen); } /* 隐藏checkbox */ .toggle{ /* 绝对定位 */ position: absolute; width: 25em; height: 35em; font-size: 5px; z-index: 3; /* 鼠标放上变小手 */ cursor: pointer; filter: opacity(0%); } /* 用云朵容器画出窗外的蓝天 */ .window .clouds{ position: relative; width: 20em; height: 30em; background-color: deepskyblue; left: calc((100% - 20em)/2); top: calc((100% - 30em)/2); border-radius: 7em; box-shadow: 0 0 0 0.4em #808080; overflow: hidden; } /* 云朵画出来 */ .clouds span{ position: absolute; width: 10em; height: 4em; background-color: white; border-radius: 4em; top: 20%; animation: move 4s linear infinite; } /* 定义动画 */ @keyframes move{ from{ left: -150%; } to{ left: 150%; } } /* 用伪元素 画 2个突起的圆弧 */ .clouds span::before, .clouds span::after{ content: ""; position: absolute; width: 4em; height: 4em; background-color: white; border-radius: 50%; } .clouds span::before{ top: -2em; left: 2em; } .clouds span::after{ top: -1em; right: 1em; } .clouds span:nth-child(2){ top: 40%; animation-delay: -1s; } .clouds span:nth-child(3){ top: 60%; animation-delay: -0.5s; } .clouds span:nth-child(4){ top: 20%; transform: scale(2); animation-delay: -1.5s; } .clouds span:nth-child(5){ top: 70%; /* 变大1.5呗 */ transform: scale(1.5); animation-delay: -3s; }
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。