看到google今天的女生节Doodle,自己用纯css仿制一个,送给老妈、老婆、女儿。

大家可以点这里在线观看效果,点这里下载收藏效果。

实现原理

1.利用checkbox侦听处理单击事件。

2.单击按钮、花、背景分别作盒子,公用背景并作背景偏移。

3.单击按钮之后,利用:checked伪类和兄弟选择符,为花、背景盒子作动画。

好的,来看html

  1. <input type="checkbox" id="play" />
  2. <div id="cont">
  3. <label id="btn" for="play"></label>
  4. <div id="circle"></div>
  5. </div>

css文件,具体参见注释。

  1. /* 设置容器 */
  2. #cont{
  3. width:482px;
  4. height:250px;
  5. background:url("http://www.google.com/logos/2014/womensday14/sprite-initial.png");
  6. background-position:-20px -10px;
  7. position:absolute;
  8. left:50%;
  9. top:50%;
  10. margin:-125px 0 0 -241px;
  11. }
  12. /* 设置按钮 */
  13. #btn{
  14. width:60px;
  15. height:78px;
  16. position:absolute;
  17. left:204px;
  18. top:64px;
  19. background:url("http://www.google.com/logos/2014/womensday14/sprite-initial.png");
  20. background-position:-1495px -110px;
  21. /* 确保垂直层次在#circle上面 */
  22. z-index:10;
  23. }
  24. #circle{
  25. /* 初始状态下,花不显示 */
  26. opacity:0;
  27. width:79px;
  28. height:79px;
  29. position:absolute;
  30. top:60px;
  31. left:184px;
  32. background:url("http://www.google.com/logos/2014/womensday14/sprite-initial.png");
  33. background-position:-1495px -190px;
  34. z-index:1;
  35. }
  36. /* hover状态下按钮样式 */
  37. #btn:hover{
  38. cursor:pointer;
  39. background-position:-1495px -30px;
  40. }
  41. /* 单击之后,按钮隐藏 */
  42. #play:checked~#cont #btn{
  43. display:none;
  44. }
  45. /* 单击之后,花显示,并轮转 */
  46. #play:checked~#cont #circle{
  47. opacity:1;
  48. animation:roll 1.8s linear infinite;
  49. }
  50. /* 单击之后,背景动画,这里偷了个懒,真比较少,注意一定是steps动画效果 */
  51. #play:checked~#cont{
  52. animation:run 1.2s steps(1,end) infinite;
  53. }
  54. @keyframes run{
  55. 0%{background-position:-20px -10px;}
  56. 33%{background-position:-521px -10px;}
  57. 66%{background-position:-1012px -10px;}
  58. 100%{background-position:-20px -10px;}
  59. }
  60. @keyframes roll{
  61. 0%{transform:rotate(0deg)}
  62. 100%{transform:rotate(360deg)}
  63. }

完工,请大家批评指正。

纯CSS仿制Google女生节Doodle的更多相关文章

  1. 使用纯 CSS 实现 Google Photos 照片列表布局

    文章太长,因为介绍了如何一步一步进化到最后接近完美的效果的,不想读的同学可以直接跳到最后一个大标题之后看代码.demo及原理就好,或者也可以直接看下面这个链接的源代码. 不过还是建议顺序读下去,因为后 ...

  2. 纯CSS无hacks的跨游览器多列布局

    利用纯CSS创建一个等高多列的布局并不件易事,本教程将着重分析出现在多列布局的多个问题,然后为大家等来一个简单全游览器通吃的解决方法,不使用图片,脚本,CSS hacks并在最严格的XHTML 规范中 ...

  3. 黑科技:纯CSS定制文本省略

    作者:weilong,腾讯 web前端开发 工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest导读 拿到设计MM的设计稿,Oh NO,点点点后面又双叒叕加内容了,弹丸 ...

  4. 纯css实现div中未知尺寸图片的垂直居中

    1.淘宝的方法 在曾经的"淘宝UED招聘"中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中.” 当然出题并不是 ...

  5. 纯CSS打造BiliBili样式博客主题

    前言 一直以来,我都在思考如何减少不必要的JS代码,仅通过CSS来实现博客园主题美化.CSS有很多魔法代码,例如:before,iconfont,order,等等,利用好这些技巧,也能实现很好美化效果 ...

  6. 谈谈一些有趣的CSS题目(八)-- 纯CSS的导航栏Tab切换方案

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  7. 一个标签的72变,打造一个纯CSS图标库

    每次要用到图标的时候都会到 icono 去copypaste,但每次用到的时候尺寸都各不一样,总是要调整参数,巨烦.当然你可以会想到用zoom.scale来做缩放,但是这样的缩放会使得线宽也变粗了,不 ...

  8. 利用animation和text-shadow纯CSS实现loading点点点的效果

    经常在网上看到loading状态时的点点点的动态效果,自己也用JS写了一个,思路是使用一个计数参数,然后在需要添加点的元素后面利用setInterval一个一个加点,当计数到3时,把点变为一个--写完 ...

  9. 使用纯CSS实现带箭头的提示框

    爱编程爱分享,原创文章,转载请注明出处,谢谢!http://www.cnblogs.com/fozero/p/6187323.html 1.全部代码 <!DOCTYPE html> < ...

随机推荐

  1. Android 6.0 7.0 8.0 一个简单的app内更新版本-okgo app版本更新

    登陆时splash初始页调用接口检查app版本.如有更新,使用okGo的文件下载,保存到指定位置,调用Android安装apk. <!-- Android 8.0 (Android O)为了针对 ...

  2. appium 使用过程问题踩坑-笔记

    问题1:虚拟设备选用问题 运行脚本抛出异常,创建session对象失败 排查过程:在进入cmd模式下: ①adb devices   --ok ②appium-doctor  --ok ③appium ...

  3. Eclipse配置C++环境

    由于实在不想用(界面太丑,超级强迫症),前段时间JAVA一直用eclipse,感觉这个IDE非常友好,看上去很舒服,下载的时候发现有C++版本,于是折腾了一会儿,谷歌上发现好多教程,但是大部分比较老, ...

  4. sql server 查询本年的每个月的数据

    一.以一行数据的形式,显示本年的12月的数据,本示例以2017年为例,根据CreateDate字段判断,计算总和,查询语句如下: end) as '1月', end) as '2月', end) as ...

  5. ECMAScript 6中的var,let,const

    var的变量提升 console.log(a); //输出undefined ; 他的实际执行顺序是: var a: console.log(a); a= 这就是var的变量提升 const命令的用法 ...

  6. Python数据类型(整型,字符串类型,列表)

    一:数据的概念 1.数据是什么 x=10,数据10就是我们要存储的数据. 2.为什么数据要分不同的种类? 因为数据是用来表示状态的,不同的状态就要用不同类型的数据去表示. 3:Python中常见的数据 ...

  7. MySQL防范SQL注入风险

    MySQL防范SQL注入风险 0.导读 在MySQL里,如何识别并且避免发生SQL注入风险 1.关于SQL注入 互联网很危险,信息及数据安全很重要,SQL注入是最常见的入侵手段之一,其技术门槛低.成本 ...

  8. 全面了解Nginx主要应用场景【转】

    前言 本文只针对 Nginx 在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得.所以还请见谅,同时欢迎留言交流 ...

  9. js对金额浮点数运算精度的处理方案

    浮点数产生的原因 浮点数转二进制,会出现无限循环数,计算机又对无限循环小数进行舍入处理 js弱语言的解决方案 方法一: 指定要保留的小数位数(0.1+0.2).toFixed(1) = 0.3;这个方 ...

  10. vue系列之项目优化

    webpack中的Code Splitting Code Splitting是什么以及为什么 在以前,为了减少HTTP请求,通常地,我们会把所有的代码都打包成一个单独的JS文件,但是,如果这个文件体积 ...