利用纯CSS3实现动态的自行车特效源码


Posted in HTML / CSS onJanuary 20, 2017

首先来看看实现的效果图(静态):

利用纯CSS3实现动态的自行车特效源码

实例源码:

<!DOCTYPE html>
<html>

 <head>
  <meta charset="UTF-8">
  <title>自行车</title>
  <style type="text/css">
   * {
    margin: 0;
    padding: 0
   }
   
   ol,
   ul {
    list-style: none/*去掉圆点或数字*/
   }
   
   .cycle-outer {
    width: 534px;
    height: 260px;
    position: absolute;
    /*绝对定位*/
    top: 50%;
    /*距离顶部*/
    margin: -160px 0 0 -267px;
    /*距离外边距*/
    left: 50%;
   }
   
   .cycle-wrapper {
    width: 534px;
    height: 260px;
    margin: 0 auto;
    position: relative;
    /*相对定位*/
   }
   
   .cycle-wheel-front {
    /*前轮*/
    margin: 100px 0 0 330px;
   }
   
   .cycle-wheel-back {
    /*后轮*/
    margin: 100px 0 0 0px;
   }
   
   .cycle-wheel-outer {
    background: transparent;
    border: 5px solid #aaa;
    border-radius: 50%;
    /*画外轮圆圈*/
    width: 190px;
    height: 190px;
    position: absolute;
    margin-top: 5px;
    animation: wheel-rotate 2s linear infinite;
    /*定义动画*/
   }
   /*轮胎开始旋转*/
   @keyframes wheel-rotate {
    from {
     transform: rotate(0deg);
    }
    to {
     transform: rotate(360deg);
    }
   }
   
   .cycle-wheel-outer:after {
    /*插入内轮胎圆圈*/
    background: transparent;
    border: 4px solid #EF9058;
    border-radius: 50%;
    width: 176px;
    height: 176px;
    position: absolute;
    margin: 3px;
    content: "";
   }
   
   .spoke {
    /*开始画车轮线条*/
    position: absolute;
    width: 1px;
    height: 200px;
    background: #ccc;
    margin: -5px 0 0 95px;
    z-index: 0;
   }
   
   .spoke:after {
    /*在后面插入两条*/
    content: "";
    position: absolute;
    width: 1px;
    height: 200px;
    background: #ccc;
    transform: rotate(120deg);
   }
   
   .spoke:before {
    /*在前面插入两条*/
    content: "";
    position: absolute;
    width: 1px;
    height: 200px;
    background: #ccc;
    transform: rotate(240deg);
   }
   /*轮胎线条完成*/
   
   .spoke-container li:nth-child(2) {
    /*中心点旋转*/
    transform: rotate(30deg);
   }
   
   .inner-disc {
    /*画中心轴圆点*/
    background: #666;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    position: absolute;
    left: 50%;
    margin: -10px 0 0 -10px;
    top: 50%;
   }
   /*.cycle-wheel-back .inner-disc:after {
    content: "";
    background: #666;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    position: absolute;
    left: 50%;
    margin: -10px 0 0 -10px;
    top: 50%;
   }*/
   
   .inner-disc-2 {
    /*画轮胎中心轴的圆圈*/
    background: transparent;
    width: 6px;
    height: 6px;
    border: 2px solid #FFF;
    border-radius: 50%;
    position: absolute;
    left: 50%;
    margin: -5px 0 0 -5px;
    top: 50%;
   }
   
   .cycle-wheel-back .inner-disc-2:after {
    /*插入后轮轴心齿轮*/
    content: "";
    background: transparent;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    position: absolute;
    left: 50%;
    margin: -13px 0 0 -13px;
    top: 50%;
    border: 4px dotted #666;
   }
   .cycle-body {
    margin-left: 125px;
   }
   .front-wheel-frame {/*前叉*/
    background: #5E999B;
    width: 8px;
    height: 180px;
    position: absolute;
    z-index: 2;
    transform: rotate(-25deg);
    margin: -72px 0 0 260px;
   }
   .top-frame {/*上管*/
    background: #5E999B;
    width: 180px;
    height: 8px;
    position: absolute;
    z-index: 2;
    margin: -20px 0 0 62px;
    transform: rotate(-8deg);
   }
   .front-frame {/*下管*/
    background: #5E999B;
    width: 8px;
    height: 160px;
    position: absolute;
    z-index: 2;
    transform: rotate(41deg);
    margin: -36px 0 0 189px;
   }
   .center-frame { /*坐杆*/
    background: #5E999B;
    width: 8px;
    height: 205px;
    position: absolute;
    z-index: 2;
    transform: rotate(-33deg);
    margin: -84px 0 0 75px;
   }
   .back-frame {/*后管*/
    background: #5E999B;
    width: 8px;
    height: 136px;
    position: absolute;
    z-index: 2;
    transform: rotate(39deg);
    margin: -23px 0 0 19px;
   }
   .bottom-frame {/*后叉or平管*/
    background: #5E999B;
    width: 159px;
    height: 8px;
    position: absolute;
    z-index: 2;
    margin: 100px 0 0 -16px;
   }
   .handlebar-front {/*车把*/
    width: 60px;
    height: 8px;
    background: #5E999B;
    z-index: 2;
    position: absolute;
    margin: -68px 0 0 222px;
    border-top-left-radius: 3px;
    border-bottom-left-radius: 3px;
   }
   .handlebar-curve {/*车把手*/
    width: 40px;
    height: 40px;
    border: 8px solid #666;
    border-top-right-radius: 100%;
    border-bottom-right-radius: 100%;
    border-bottom-left-radius: 100%;
    background: transparent;
    position: absolute;
    margin: -68px 0 0 258px;
    border-left: 8px solid transparent;
    border-top: 8px solid #666;
    border-bottom: 8px solid #666;
   }
   /*座垫*/
   .seat { 
    width: 50px;
    height: 10px;
    background: #666;
    border-radius: 44%;
    position: absolute;
    margin: -73px 0 0 15px;
   }
   
   .seat:after {
    width: 0px;
    height: 0px;
    border-style: solid;
    border-width: 0 40px 16px 40px;
    border-color: transparent transparent #666 transparent;
    content: "";
    position: absolute;
    z-index: 3;
    transform: rotate(-12deg);
    position: absolute;
    border-radius: 100%;
    margin: 0 0 0 -26px;
   }
   .seat:before {
    width: 0px;
    height: 0px;
    border-style: solid;
    border-width: 0 40px 16px 40px;
    border-color: transparent transparent #666 transparent;
    content: "";
    position: absolute;
    z-index: 3;
    transform: rotate(179deg);
    position: absolute;
    border-radius: 100%;
    margin: 0 0 0 -26px;
   }
   .seat span {
    width: 32px;
    height: 19px;
    background: #666;
    border-radius: 100%;
    position: absolute;
    margin: 1px 0 0 -22px;
    transform: rotate(-11deg);
   }
   /*去掉中心轴的*/
   .chain-rotation {
    position: absolute;
    z-index: 16;
   }
   /*中心轴*/
   .chain-disc-inner {
    background: #666;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    position: absolute;
    margin: 2px;
    z-index: 4;
   }
   .chain-disc-outer {
    background: #FFF;
    width: 22px;
    height: 22px;
    border: 5px solid #666;
    border-radius: 50%;
    position: absolute;
    margin: 87px 0 0 250px;
    z-index: 3;
    content: "";
   }
   /*牙盘*/
   .chain-rods {
    height: 70px;
    width: 6px;
    background: #666;
    position: absolute;
    margin: 67px 0 0 263px;
    z-index: 15;
    animation: wheel-rotate 2s linear infinite;
   }
   .chain-rods:before {
    content: "";
    height: 70px;
    width: 6px;
    background: #666;
    position: absolute;
    transform: rotate(120deg);
   }
   .chain-rods:after {
    content: "";
    height: 70px;
    width: 6px;
    background: #666;
    position: absolute;
    transform: rotate(240deg);
    -webkit-transform: rotate(240deg);
    -moz-transform: rotate(240deg);
   }
   .outer-axle {
    height: 70px;
    width: 70px;
    border-radius: 50%;
    background: transparent;
    border: 5px solid #666;
    position: absolute;
    margin: 62px 0 0 226px;
    z-index: 3;
   }
   
   .outer-axle:after {
    content: "";
    height: 74px;
    width: 74px;
    border-radius: 50%;
    background: transparent;
    border: 5px dotted #666;
    margin: -7px;
    position: absolute;
    z-index: 3;
    animation: wheel-rotate 2s linear infinite;
   }
   /*车链子*/
   .chain-up {
    background-color: transparent;
    background-size: 8px 2px;
    background-position: 0 0, 30px 30px;
    width: 155px;
    height: 4px;
    position: absolute;
    z-index: 9;
    background: #EEE;
    transform: rotate(-11deg);
    margin: 76px 0 0 98px;
   }
   .chain-up:before {
    content: "";
    background-color: transparent;
    background-image: linear-gradient(90deg, #666 25%, transparent 25%, transparent 75%, #666 75%, #666);
    background-size: 8px 2px;
    background-position: 0 0, 30px 30px;
    width: 155px;
    height: 4px;
    animation: chainUp 2s linear infinite;
    position: absolute;
    z-index: 10;
   }
   .chain-bottom {
    background-color: transparent;
    background-size: 8px 2px;
    background-position: 0 0, 30px 30px;
    width: 155px;
    height: 4px;
    position: absolute;
    z-index: 9;
    background: #EEE;
    -webkit-transform: rotate(9deg);
    -moz-transform: rotate(9deg);
    transform: rotate(9deg);
    margin: 127px 0 0 98px;
   }
   
   .chain-bottom:before {
    content: "";
    background-color: transparent;
    background-image: linear-gradient(90deg, #666 25%, transparent 25%, transparent 75%, #666 75%, #666);
    background-size: 8px 2px;
    background-position: 0 0, 30px 30px;
    width: 155px;
    height: 4px;
    animation: chainDown 2s linear infinite;
    position: absolute;
    z-index: 10;
   }
   /*脚踏*/
   .pedal-rod {
    height: 120px;
    width: 6px;
    background: #666;
    position: absolute;
    margin: -25px 0 0 0px;
   }
   
   .pedal-rod:before {
    width: 40px;
    height: 10px;
    background: #666;
    position: absolute;
    margin: 10px;
    content: "";
    margin: -7px -17px;
    animation: pedal1 2s linear infinite;
   }
   
   .pedal-rod:after {
    width: 40px;
    height: 10px;
    background: #666;
    position: absolute;
    margin: 10px;
    content: "";
    margin: 119px -17px;
    animation: pedal2 2s linear infinite;
   }
   /*水壶架*/
   .bottle-holder {
    width: 20px;
    height: 36px;
    background: #daeded;
    border: 3px solid #5E999B;
    position: absolute;
    margin: 54px 0 0 -25px;
   }
   
   .bottle-holder:after {
    width: 20px;
    height: 3px;
    content: "";
    background: #5E999B;
    position: absolute;
    margin: 24px 0 0 0px;
   }
   /*水壶*/
   .bottle-holder:before {
    background-color: #daeded;
    width: 18px;
    height: 10px;
    border-radius: 30% / 100%;
    border-bottom-left-radius: 0;
    border-bottom-right-radius: 0;
    content: "";
    position: absolute;
    margin-top: -13px;
    border: 1px solid #98baba;
    border-bottom: 0;
   }
   .bottle-holder span {
    position: absolute;
    width: 9px;
    height: 4px;
    background: #666;
    margin: -17px 0 0 5px;
   }
   /*车链子动画*/
   @keyframes chainUp {
    0% {
     background-position: 0 25%;
    }
    100% {
     background-position: 100% 0;
    }
   }
   @keyframes chainDown {
    0% {
     background-position: 100% 0;
    }
    100% {
     background-position: 0 25%;
    }
   }
   /*脚踏动画*/
   @keyframes pedal1 {
    0% {
     transform: rotate(00deg);
    }
    25% {
     transform: rotate(-140deg);
    }
    50% {
     transform: rotate(-180deg);
    }
    75% {
     transform: rotate(-240deg);
    }
    100% {
     transform: rotate(-360deg);
    }
   }
   @keyframes pedal2 {
    0% {
     transform: rotate(00deg);
    }
    25% {
     transform: rotate(-60deg);
    }
    50% {
     transform: rotate(-180deg);
    }
    75% {
     transform: rotate(-340deg);
    }
    100% {
     transform: rotate(-360deg);
    }
   }
  </style>
 </head>

 <body>
  <div class="cycle-outer">
   <div class="cycle-wrapper">
    <!--
                 描述:车架
                -->
    <div class="cycle-body">
     <div class="seat">
      <span></span>
     </div>
     <div class="front-wheel-frame"></div>
     
     <div class="top-frame"></div>
     <div class="front-frame">
      <div class="bottle-holder">
       <span></span>
      </div>
     </div>
     <div class="center-frame"></div>
     <div class="back-frame"></div>
     <div class="bottom-frame"></div>
     <div class="handlebar-front"></div>
     <div class="handlebar-curve"></div>
    </div>
    <!--
                 描述:后轮
                -->
    <div class="cycle-wheel cycle-wheel-back">
     <div class="cycle-wheel-outer">
      <div class="cycle-wheel-inner">
       <div class="cycle-wheel-inner-padding">
        <ul class="spoke-container">
         <li class="spoke"></li>
         <li class="spoke"></li>
        </ul>
        <div class="inner-disc"></div>
        <div class="inner-disc-2"></div>
       </div>
      </div>
     </div>
    </div>
    <!--
                 描述:前轮
                -->
    <div class="cycle-wheel cycle-wheel-front">
     <div class="cycle-wheel-outer">
      <div class="cycle-wheel-inner">
       <div class="cycle-wheel-inner-padding">
        <ul class="spoke-container">
         <li class="spoke"></li>
         <li class="spoke"></li>
        </ul>
        <div class="inner-disc"></div>
        <div class="inner-disc-2"></div>
       </div>
      </div>
     </div>
    </div>
    <!--
                 描述:中心轴  车链子 牙盘 水壶架  水壶   脚踏
                -->
    <div class="chain-up"></div>
    <div class="chain-bottom"></div>
    <div class="chain-rotation">
     <div class="outer-axle"></div>
     <div class="chain-disc-outer">
      <div class="chain-disc-inner"></div>
     </div>

    </div>
    <div class="chain-rods">
     <div class="pedal-rod"></div>
    </div>
   </div>
  </div>

  <div style="text-align:center;clear:both;">
 </body>

</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以交流。

HTML / CSS 相关文章推荐
基于CSS3实现的几个小loading效果
Sep 27 HTML / CSS
通过css3动画和opacity透明度实现呼吸灯效果
Aug 09 HTML / CSS
css3 中实现炫酷的loading效果
Apr 26 HTML / CSS
CSS3弹性盒模型开发笔记(二)
Apr 26 HTML / CSS
10分钟理解CSS3 FlexBox弹性布局
Dec 20 HTML / CSS
CSS3标注引用的出处和来源的方法
Feb 25 HTML / CSS
HTML5重塑Web世界它将如何改变互联网
Dec 17 HTML / CSS
html5指南-6.如何创建离线web应用程序实现离线访问
Jan 07 HTML / CSS
html5贪吃蛇游戏使用63行代码完美实现
Jun 25 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
Jun 16 HTML / CSS
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
Jan 01 HTML / CSS
【HTML5】3D模型--百行代码实现旋转立体魔方实例
Dec 16 HTML / CSS
css3加js做一个简单的3D行星运转效果实例代码
Jan 18 #HTML / CSS
纯CSS3实现扇形动画菜单(简化版)实例源码
Jan 17 #HTML / CSS
纯CSS3大转盘抽奖示例代码(响应式、可配置)
Jan 13 #HTML / CSS
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
Jan 12 #HTML / CSS
CSS3,线性渐变(linear-gradient)的使用总结
Jan 09 #HTML / CSS
详解CSS3中nth-child与nth-of-type的区别
Jan 05 #HTML / CSS
CSS3打造百度贴吧的3D翻牌效果示例
Jan 04 #HTML / CSS
You might like
php allow_url_include的应用和解释
2010/04/22 PHP
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
javascript解析json实例详解
2014/11/05 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
Python类的多重继承问题深入分析
2014/11/09 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
python 写一个文件分发小程序
2020/12/05 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
优秀实习自我鉴定
2013/12/04 职场文书
鸿星尔克广告词
2014/03/21 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
win10搭建配置ftp服务器的方法
2022/08/05 Servers