本篇文章给大家带来的内容是关于如何使用纯CSS实现飞机舷窗风格的toggle控件,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
效果预览
源代码下载
https://github.com/comehope/front-end-daily-challenges
代码解读
定义 dom,.windows
容器表示舷窗,它的子元素 .curtain
表示窗帘:
<figure class="window"> <div class="curtain"></div> </figure>
居中显示:
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: inset 0 0 8em rgba(0, 0, 0, 0.2), 0 0 0 0.4em #808080, 0 0 0 4em whitesmoke, 0 0 0 4.4em #808080, 0 2em 4em 4em rgba(0, 0, 0, 0.1); }
设置窗帘样式,和窗口尺寸一样,但不拉到底:
.window .curtain { position: absolute; width: inherit; height: inherit; border-radius: 5em; box-shadow: 0 0 0 0.5em #808080, 0 0 3em rgba(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
时即表示舷窗被打开:
<input type="checkbox" class="toggle"> <figure class="window"> <div class="handle"></div> </figure>
隐藏 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.5s ease-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 个 <span>
子元素分别表示 1 朵白云:
<input type="checkbox" class="toggle"> <figure class="window"> <div class="curtain"></div> <div class="clouds"> <span></span> <span></span> <span></span> <span></span> <span></span> </div> </figure>
用云朵容器画出窗外的蓝天:
.window .clouds { position: relative; width: 20em; height: 30em; background-color: deepskyblue; box-shadow: 0 0 0 0.4em #808080; left: calc((100% - 20em) / 2); top: calc((100% - 30em) / 2); border-radius: 7em; }
每朵云由 3 部分组成,先画面积最大的部分:
.clouds span { position: absolute; width: 10em; height: 4em; background-color: white; top: 20%; border-radius: 4em; }
再用伪元素画 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 { animation: move 4s linear infinite; } @keyframes move { from { left: -150%; } to { left: 150%; } }
使每朵云的大小、位置有一些变化:
.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%; transform: scale(1.5); animation-delay: -3s; }
最后,隐藏容器外的内容:
.window .clouds { overflow: hidden; }
大功告成!
以上是如何使用纯CSS实现飞机舷窗风格的toggle控件的详细内容。更多信息请关注PHP中文网其他相关文章!

在css中,可用list-style-type属性来去掉ul的圆点标记,语法为“ul{list-style-type:none}”;list-style-type属性可设置列表项标记的类型,当值为“none”可不定义标记,也可去除已有标记。

区别是:css是层叠样式表单,是将样式信息与网页内容分离的一种标记语言,主要用来设计网页的样式,还可以对网页各元素进行格式化;xml是可扩展标记语言,是一种数据存储语言,用于使用简单的标记描述数据,将文档分成许多部件并对这些部件加以标识。

在css中,可以利用cursor属性实现鼠标隐藏效果,该属性用于定义鼠标指针放在一个元素边界范围内时所用的光标形状,当属性值设置为none时,就可以实现鼠标隐藏效果,语法为“元素{cursor:none}”。

在css中,rtl是“right-to-left”的缩写,是从右往左的意思,指的是内联内容从右往左依次排布,是direction属性的一个属性值;该属性规定了文本的方向和书写方向,语法为“元素{direction:rtl}”。

转换方法:1、给英文元素添加“text-transform: uppercase;”样式,可将所有的英文字母都变成大写;2、给英文元素添加“text-transform:capitalize;”样式,可将英文文本中每个单词的首字母变为大写。

在css中,可以利用“font-style”属性设置i元素不是斜体样式,该属性用于指定文本的字体样式,当属性值设置为“normal”时,会显示元素的标准字体样式,语法为“i元素{font-style:normal}”。

在css3中,可以用“transform-origin”属性设置rotate的旋转中心点,该属性可更改转换元素的位置,第一个参数设置x轴的旋转位置,第二个参数设置y轴旋转位置,语法为“transform-origin:x轴位置 y轴位置”。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

SublimeText3 Linux新版
SublimeText3 Linux最新版

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Atom编辑器mac版下载
最流行的的开源编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),