這篇文章主要介紹了怎么用純CSS實(shí)現(xiàn)飛機(jī)舷窗風(fēng)格的toggle控件,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、同江ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的同江網(wǎng)站制作公司
代碼解讀
定義dom,.windows容器表示舷窗,它的子元素.curtain表示窗簾:
<figureclass="window">
<divclass="curtain"></div>
</figure>
居中顯示:
body{
margin:0;
height:100vh;
display:flex;
align-items:center;
justify-content:center;
background-color:skyblue;
}
設(shè)置舷窗的尺寸,因?yàn)楹竺孢€會(huì)用到字號(hào),所以字號(hào)用變量定義:
:root{
--font-size:10px;
}
.window{
position:relative;
box-sizing:border-box;
width:25em;
height:35em;
font-size:var(--font-size);
background-color:#d9d9d9;
}
用陰影畫(huà)出厚窗框:
.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);
}
設(shè)置窗簾樣式,和窗口尺寸一樣,但不拉到底:
.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%;
}
用偽元素在窗簾上畫(huà)出指示燈,當(dāng)窗簾關(guān)閉時(shí)亮紅色光:
.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);
}
以上是舷窗關(guān)閉時(shí)的樣子,接下來(lái)繪制舷窗打開(kāi)時(shí)的效果。
先在dom中添加一個(gè)checkbox,當(dāng)它被checked時(shí)即表示舷窗被打開(kāi):
<inputtype="checkbox"class="toggle">
<figureclass="window">
<divclass="handle"></div>
</figure>
隱藏checkbox,用opacity(0)可以使元素在不可見(jiàn)的狀態(tài)下仍可交互,把它的尺寸設(shè)置得到舷窗一樣大,并且圖層在舷窗之上,得到的效果就是點(diǎn)擊舷窗時(shí)實(shí)際是點(diǎn)擊了checkbox:
.toggle{
position:absolute;
filter:opacity(0);
width:25em;
height:35em;
font-size:var(--font-size);
cursor:pointer;
z-index:2;
}
當(dāng)舷窗打開(kāi)時(shí),.curtain要向上移動(dòng),并且指示燈亮綠色光:
.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;
}
接下來(lái)繪制舷窗外的風(fēng)景。
在dom中增加表示云朵的.clouds元素,其中的5個(gè)<span>子元素分別表示1朵白云:
<inputtype="checkbox"class="toggle">
<figureclass="window">
<divclass="curtain"></div>
<divclass="clouds">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</figure>
用云朵容器畫(huà)出窗外的藍(lán)天:
.window.clouds{
position:relative;
width:20em;
height:30em;
background-color:deepskyblue;
box-shadow:0000.4em#808080;
left:calc((100%-20em)/2);
top:calc((100%-30em)/2);
border-radius:7em;
}
每朵云由3部分組成,先畫(huà)面積最大的部分:
.cloudsspan{
position:absolute;
width:10em;
height:4em;
background-color:white;
top:20%;
border-radius:4em;
}
再用偽元素畫(huà)2個(gè)突起的圓弧:
.cloudsspan::before,
.cloudsspan::after{
content:'';
position:absolute;
width:4em;
height:4em;
background-color:white;
border-radius:50%;
}
.cloudsspan::before{
top:-2em;
left:2em;
}
.cloudsspan::after{
top:-1em;
right:1em;
}
增加云朵飄動(dòng)的動(dòng)畫(huà)效果:
.cloudsspan{
animation:move4slinearinfinite;
}
@keyframesmove{
from{
left:-150%;
}
to{
left:150%;
}
}
使每朵云的大小、位置有一些變化:
.cloudsspan:nth-child(2){
top:40%;
animation-delay:-1s;
}
.cloudsspan:nth-child(3){
top:60%;
animation-delay:-0.5s;
}
.cloudsspan:nth-child(4){
top:20%;
transform:scale(2);
animation-delay:-1.5s;
}
.cloudsspan:nth-child(5){
top:70%;
transform:scale(1.5);
animation-delay:-3s;
}
最后,隱藏容器外的內(nèi)容:
.window.clouds{
overflow:hidden;
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么用純CSS實(shí)現(xiàn)飛機(jī)舷窗風(fēng)格的toggle控件”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
網(wǎng)站題目:怎么用純CSS實(shí)現(xiàn)飛機(jī)舷窗風(fēng)格的toggle控件
文章路徑:http://www.chinadenli.net/article4/giceoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、企業(yè)網(wǎng)站制作、網(wǎng)站排名、網(wǎng)站導(dǎo)航、品牌網(wǎng)站設(shè)計(jì)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)