前端每日实战:94# 视频演示如何用纯 CSS 创作一台拍立得照相机
效果预览
按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
https://codepen.io/comehope/pen/YjYgey
可交互视频
此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
请用 chrome, safari, edge 打开观看。
https://scrimba.com/p/pEgDAM/cpQpGtQ
源代码下载
每日前端实战系列的全部源代码请从 github 下载:
https://github.com/comehope/front-end-daily-challenges
代码解读
定义 dom,容器中包含 2 个元素,分别代表镜头和照片:
<div class="camera">
<span class="lens"></span>
<span class="picture"></span>
</div>
居中显示:
body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(to left bottom, linen, tan);
}
画出相机的轮廓:
.camera {
width: 20em;
height: 23em;
font-size: 10px;
background:
linear-gradient(
blanchedalmond, blanchedalmond 10em,
wheat 10em, wheat 14em,
tan 14em
);
border-radius: 2em;
}
画出镜头的轮廓:
.camera {
position: relative;
}
.lens {
position: absolute;
width: 8em;
height: 8em;
background:
radial-gradient(
cadetblue 2em,
#555 2em, #555 2.5em,
#333 2.5em, #333 4em
);
border-radius: 50%;
top: 3em;
left: 6em;
}
用线性渐变画出下方照片的出口:
.camera {
background:
linear-gradient(
transparent 18em,
#333 18em, #333 19.5em,
transparent 19.5em
) no-repeat center / 80% 100%,
linear-gradient(
blanchedalmond, blanchedalmond 10em,
wheat 10em, wheat 14em,
tan 14em
);
border-radius: 2em;
position: relative;
}
接下来修饰细节。
用伪元素画出相机的取景器和闪光灯:
.camera::before {
content: '';
position: absolute;
width: 4.5em;
height: 2em;
background-color: #333;
border-radius: 0.5em;
top: 1.5em;
left: 1.5em;
}
.camera::after {
content: '';
position: absolute;
width: 3em;
height: 3em;
background-color: #333;
background-image: radial-gradient(
teal 10%,
#333 30%,
transparent 40%
);
right: 1.5em;
top: 1.5em;
border-radius: 0.3em;
}
用径向渐变画出相机上的按钮:
.camera {
background:
radial-gradient(
circle at 17em 7em,
black 0.8em,
darkgray 0.8em, darkgray 1em,
transparent 1em
),
radial-gradient(
circle at 3.6em 7em,
tomato 1em,
darkgray 1em, darkgray 1.2em,
transparent 1.2em
),
linear-gradient(
transparent 18em,
#333 18em, #333 19.5em,
transparent 18em
) no-repeat center / 80% 100%,
linear-gradient(
blanchedalmond, blanchedalmond 10em,
wheat 10em, wheat 14em,
tan 14em
);
}
用径向渐变画出镜头上的光影:
.lens {
background:
radial-gradient(
circle at 60% 45%,
khaki 0.1em,
transparent 0.3em
),
radial-gradient(
circle at 50% 40%,
khaki 0.3em,
transparent 0.5em
),
radial-gradient(
cadetblue 2em,
#555 2em, #555 2.5em,
#333 2.5em, #333 4em
);
}
接下来制作动画效果。
用伪元素模拟快门:
.lens::before,
.lens::after {
content: '';
position: absolute;
width: 5em;
height: 0.1em;
background-color: #333;
}
.lens::before {
top: 1em;
}
.lens::after {
bottom: 1em;
}
增加快门开合动画效果:
.lens::before,
.lens::after {
animation: take-a-photo 3s infinite;
}
@keyframes take-a-photo {
10% {
height: calc(50% - 1em);
}
20% {
height: 0.1em;
}
}
画出照片:
.picture {
position: absolute;
width: inherit;
height: 13em;
top: 18em;
}
.picture::before {
content: '';
position: absolute;
box-sizing: border-box;
width: 15em;
height: 15em;
background: #555;
left: 2.5em;
border: solid linen;
border-width: 0 1em 2em 1em;
bottom: 0;
}
增加打印照片的动画效果:
.picture {
height: 0em;
overflow: hidden;
animation: print 3s infinite;
}
@keyframes print {
30% {
height: 0em;
}
80%, 100% {
height: 13em;
}
}
最后,把相机向上挪一点,保持垂直居中:
.camera {
transform: translateY(-3em);
}
大功告成!
前端每日实战:94# 视频演示如何用纯 CSS 创作一台拍立得照相机的更多相关文章
- 前端每日实战:63# 视频演示如何用纯 CSS 创作一台烤面包机
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEBJRN 可交互视频 此视频是可 ...
- 前端每日实战:66# 视频演示如何用纯 CSS 创作一台咖啡机
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/rKPLMW 可交互视频 此视频是可 ...
- 前端每日实战:74# 视频演示如何用纯 CSS 创作一台 MacBook Pro
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/MXNNyR 可交互视频 此视频是可 ...
- 如何用纯 CSS 创作一台拍立得照相机
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YjYgey 可交互视频 此视频是可 ...
- 前端每日实战:157# 视频演示如何用纯 CSS 创作一个棋盘错觉动画(实际上每一行都是平行的)
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VEyoGj 可交互视频 此视频是可 ...
- 前端每日实战:158# 视频演示如何用纯 CSS 创作一个雨伞 toggle 控件
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/pxLbjv 可交互视频 此视频是可 ...
- 前端每日实战:140# 视频演示如何用纯 CSS 创作文本的淡入动画效果
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZMwgqK 可交互视频 此视频是可 ...
- 前端每日实战:161# 视频演示如何用纯 CSS 创作一张纪念卓别林的卡片(没有笑声的一天就是被荒废的一天)
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/WaaBNV 可交互视频 此视频是可 ...
- 前端每日实战:122# 视频演示如何用纯 CSS 创作一个苹果系统的相册图标
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/zJKwbO 可交互视频 此视频是可 ...
随机推荐
- Git使用gitignore建立项目过滤规则
在进行协作开发代码管理的过程中,常常会遇到某些临时文件.配置文件.或者生成文件等,这些文件由于不同的开发端会不一样,如果使用git add . 将所有文件纳入git库中,那么会出现频繁的改动和push ...
- 微信小程序列表时间戳转换
第一步先写js 随便命名为times.js function toDate(number){ var n=number * 1000; var date = new Date(n) ...
- input复制文本
input.value = this.$t('title') document.body.appendChild(input) input.select() input.setSelectionRan ...
- 《JAVA设计模式》之享元模式(Flyweight)
在阎宏博士的<JAVA与模式>一书中开头是这样描述享元(Flyweight)模式的: Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是 ...
- Linux固定ip配置
第一步:查看网络信息 [root@localhost ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu ...
- 第二章、Python基础
@编程语言分类: a.从运行角度分: 编译型:代码本身不能运行,需要一个附加程序(编译器〉将其转换成由二进制代码组成的可执行文件,然后才可以运行. 如 c/c++ 特点: 开发效率低.执行速度快 解释 ...
- 使用网易云web 版外部链接
右击打开控制台,找到音乐列表 ——> 点开详情 -------> 生成外部链接器 ,如: outchain/0/3073492173 ,这是每一个音乐的编号. 然后拼接上它的官网域名 ...
- Linux笔记1-简介
以下为观看兄弟连视频教程所记. 1.简介 1965年,MIT.GE.AT&T的贝尔实验室 --> Multics 分时.庞大 1969年,贝尔实验室的肯·汤普森 --> Unix ...
- JavaFX程序初次运行创建数据库并执行建表SQL
在我的第一个JavaFX程序完成安装的时候才突然发现,不能要用这个软件还要手动执行Sql来建表吧? 于是我的想法是在Main程序中执行时检测数据库连接状况,如果没有检测到数据库或者连接异常,那么出现错 ...
- 源码分析--ConcurrentHashMap与HashTable(JDK1.8)
ConcurrentHashMap和Hashtable都是线程安全的K-V型容器.本篇从源码入手,简要说明它们两者的实现原理和区别. 与HashMap类似,ConcurrentHashMap底层也是以 ...