怎么用纯CSS实现飞机舷窗风格的toggle控件
这篇文章主要介绍了怎么用纯CSS实现飞机舷窗风格的toggle控件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
我们提供的服务有:网站设计制作、成都网站制作、微信公众号开发、网站优化、网站认证、同江ssl等。为成百上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的同江网站制作公司
代码解读
定义dom,.windows容器表示舷窗,它的子元素.curtain表示窗帘:
居中显示:
body{
margin:0;
height:100vh;
display:flex;
align-items:center;
justify-content:center;
background-color:skyblue;
}
设置舷窗的尺寸,因为后面还会用到字号,所以字号用变量定义:
:root{
--font-size:10px;
}
.window{
position:relative;
box-sizing:border-box;
width:25em;
height:35em;
font-size:var(--font-size);
background-color:#d9d9d9;
}
用阴影画出厚窗框:
.window{
border-radius:5em;
box-shadow:
inset008emrgba(0,0,0,0.2),
0000.4em#808080,
0004emwhitesmoke,
0004.4em#808080,
02em4em4emrgba(0,0,0,0.1);
}
设置窗帘样式,和窗口尺寸一样,但不拉到底:
.window.curtain{
position:absolute;
width:inherit;
height:inherit;
border-radius:5em;
box-shadow:
0000.5em#808080,
003emrgba(0,0,0,0.4);
background-color:whitesmoke;
left:0;
top:-5%;
}
用伪元素在窗帘上画出指示灯,当窗帘关闭时亮红色光:
.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;
border-radius:0.4em;
left:calc((100%-1.6em)/2);
}
以上是舷窗关闭时的样子,接下来绘制舷窗打开时的效果。
先在dom中添加一个checkbox,当它被checked时即表示舷窗被打开:
隐藏checkbox,用opacity(0)可以使元素在不可见的状态下仍可交互,把它的尺寸设置得到舷窗一样大,并且图层在舷窗之上,得到的效果就是点击舷窗时实际是点击了checkbox:
.toggle{
position:absolute;
filter:opacity(0);
width:25em;
height:35em;
font-size:var(--font-size);
cursor:pointer;
z-index:2;
}
当舷窗打开时,.curtain要向上移动,并且指示灯亮绿色光:
.window.curtain{
transition:0.5sease-in-out;
}
.toggle:checked~.window.curtain{
top:-90%;
}
.toggle:checked~.window.curtain::after{
background-image:radial-gradient(lightgreen,limegreen);
}
隐藏超出窗户的部分:
.window{
overflow:hidden;
}
接下来绘制舷窗外的风景。
在dom中增加表示云朵的.clouds元素,其中的5个子元素分别表示1朵白云: