前端每日实战:156# 视频演示如何用纯 CSS 创作一个飞机舷窗风格的 toggle 控件...
效果预览
按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
https://codepen.io/comehope/pen/jeaOrw
可交互视频
此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
请用 chrome, safari, edge 打开观看。
https://scrimba.com/p/pEgDAM/cdZVGSD
源代码下载
每日前端实战系列的全部源代码请从 github 下载:
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;
}
大功告成!
前端每日实战:156# 视频演示如何用纯 CSS 创作一个飞机舷窗风格的 toggle 控件...相关推荐
- 如何用纯 CSS 创作一个飞机舷窗风格的 toggle 控件
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jeaOrw 可交互视频 ...
- 如何用纯 CSS 创作一个飞机舷窗风格的 toggle 控件...
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jeaOrw 可交互视频 ...
- 前端每日实战:45# 视频演示如何用纯 CSS 创作一个菱形 loader 动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/eKzjqK 可交互视频教程 此视频 ...
- html鼠标拖尾效果,前端每日实战:25# 视频演示如何用纯 CSS 创作一个慧星拖尾效果的 loader 动画...
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. 可交互视频教程 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码. 请用 chrome, s ...
- 前端每日实战:102# 视频演示如何用纯 CSS 创作一个小和尚
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oMmYXp 可交互视频 此视频是可 ...
- 前端每日实战:125# 视频演示如何用纯 CSS 创作一个失落的人独自行走的动画...
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/MqpOdR/ 可交互视频 此视频是 ...
- 前端每日实战:160# 视频演示如何用纯 CSS 创作一个打开内容弹窗的交互动画...
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/GYXvez 可交互视频 此视频是可 ...
- 前端每日实战:119# 视频演示如何用纯 CSS 创作一个接扎啤的动画(内含2个视频)...
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/rZeOQp 可交互视频 此视频是可 ...
- 前端每日实战:84# 视频演示如何用纯 CSS 创作一个极品飞车 loader
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/MBbEMo 可交互视频 此视频是可 ...
最新文章
- Oracle单实例打补丁
- Springboot使用JPA框架对数据库实现增删改查(附详细代码)
- UA MATH567 高维统计I 概率不等式3 亚高斯性与亚高斯范数
- 【CSON原创】HTML5游戏框架cnGameJS开发实录
- php转java知乎_做了三年多的php,在上一家公司转java一年多,如何找工作
- mysqli 扩展_MySQLi的优势
- html 监控键盘,后台监控鼠标和键盘(可监听全局的鼠标以及键盘按键)
- windows下安装ta-lib的方法
- 将PICTUREBOX中显示的图片,存入数据库中
- Ubuntu使用——9(搜狗输入法安装)
- X1000对于camera控制部分的翻译
- 【python】pycharts画关联图
- .mpp文件的使用技巧
- django实现websocket作为安卓开发后台(软件课设,oo聊天)
- Go语言学习之路(二)
- MVC项目功能之加入购物车,清空购物车
- redenvelope php,Red Envelope (红包)
- 乐高教育版45544零件---分类识别
- c语言的编程switch,C语言之switch详解
- AD元件库下载不了的用下面这个链接试试