效果预览

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

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);
}

大功告成!

原文地址:https://segmentfault.com/a/1190000015828039

如何用纯 CSS 创作一台拍立得照相机 1相关推荐

  1. 如何用纯 CSS 创作一台拍立得照相机

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YjYgey 可交互视频 此视频是可 ...

  2. 前端每日实战:94# 视频演示如何用纯 CSS 创作一台拍立得照相机

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YjYgey 可交互视频 此视频是可 ...

  3. 如何用纯 CSS 创作一个小球上台阶的动画

    如何用纯 CSS 创作一个小球上台阶的动画 效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/come ...

  4. 如何用纯 CSS 创作一个同心圆弧旋转 loader 特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/OZmXQX 可交互视频教程 此视 ...

  5. 如何用纯 CSS 创作一个荧光脉冲 loader 特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/erRzzR 可交互视频教程 此视 ...

  6. 如何用纯 CSS 创作一个冒着热气的咖啡杯

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/xjXxoz 可交互视频教程 此视 ...

  7. 如何用纯 CSS 创作一个渐变色动画边框

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/odpRKX 可交互视频教 ...

  8. css动态彩虹背景,如何用纯 CSS 创作彩虹背景文字

    CSS3 渐变(Gradients) https://www.runoob.com/css3/css3-gradients.html 效果预览 按下右侧的"点击预览"按钮可以在当前 ...

  9. 如何用纯 CSS 创作一个金属光泽 3D 按钮特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/full/MGeRRO 可交互视频教程 此 ...

最新文章

  1. 关于spring-mvc.xml的mvc:resources元素浅析。
  2. 【Python实战】机型自动化标注(搜狗爬虫实现)
  3. java查看上下文加载器_线程上下文类加载器
  4. 若依部署上线之后验证码不显示的解决方法之一
  5. python求字符串的所有子集_打印一字符串的所有子集 | 学步园
  6. linux双wan网关负载均衡,Csico2951路由器,如何做到双WAN口负载均衡?
  7. java代码实现解压文件_Java压缩/解压文件的实现代码
  8. 中兴天机Axon 10 Pro系列中国发布:售价3199元起
  9. 1.TCP/IP 详解卷1 --- 概述
  10. 数据抓取的艺术(一)
  11. 金蝶K3 WISE BOM多级展开_销售成本表
  12. 【Unity】文字游戏制作插件Fungus教程(1)基础的使用方法
  13. 最最最简单从官方获取最新行政区划代码、区划拼音
  14. golang: grpc: received message larger than max
  15. 计算机技巧数学,如何快速掌握数学技巧
  16. kityminder-editor 百度脑图与my-mind 使用体验
  17. 怎么样振作起来-How to Cheer Up
  18. 修改vue项目到服务器端渲染,现有vue-cli3搭建的vue项目改ssr服务器渲染
  19. Android测试——(下篇)
  20. 技术福利:最全实时音视频开发要用到的开源工程汇总

热门文章

  1. dolphinscheduler 测试数据源失败直接跳转到登录页面
  2. mysql 严格模式_MySQL: 严格模式
  3. mysql查询记录大于1条
  4. 400页PPT,讲清ChatGPT前世今生与1200+个AI工具大全
  5. 岁月的剪影【四月Moving in the Air】
  6. 电子工程可以报考二建_【电子信息工程专业能考二级建造师吗_2020年二级建造师】- 环球网校...
  7. Cisco简单配置(三)—静态路由
  8. 循环赛日程表--C语言
  9. 4.3—代入法求解递归式
  10. LoRaWAN的网络协议是怎样的?有哪些应用?