CSS3:行驶中的自行车,浪起来吧!
<!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <style> .canvas{ width: 80%; height:80%; background:#ccc; position:absolute; left:0; right:0; bottom:0; top:0; margin:auto; overflow: hidden; } .road{ width: 100%; height:100px; position:absolute; left:0; right:0; bottom:0; margin:auto; background:#333; transform: rotateX(30deg); display: -webkit-flex; display: flex; justify-content: space-between; flex-direction: column; } .road>span{ width: 100%; height:5px; border-width:5px; border-style:solid; border-color:#999 transparent #666; background:#fff; } .road>div{ width: 100%; height:5px; display: -webkit-flex; display: flex; align-items: center; animation: road .1s linear infinite; } .road>div>i{ width: 15px; height:2px; margin-right:3px; background:#fff; } .bicycle{ width:80%; height:60%; position:absolute; left:0; right:0; bottom:0; margin:auto; } .chain{ width: 500px; height:250px; position:absolute; left:-185px; right:0; bottom:18px; margin: auto; transform: rotate(5deg); z-index: 1; } .top-chain{ width: 200px; height:3px; transform: rotate(-7deg); margin-top:84px; margin-left:80px; overflow: hidden; } .bottom-chain{ width: 179px; height:3px; transform: rotate(6deg); margin-top:58px; margin-left:88px; overflow: hidden; } .top-chain>div{ width: 300px; display: -webkit-flex; display: flex; align-items: center; animation: topChain .1s linear infinite; } .bottom-chain>div{ width: 300px; display: -webkit-flex; display: flex; align-items: center; animation: road .1s linear infinite; } .top-chain>div>i{ margin-right:3px; width: 15px; height:5px; background:#b7b6b6; } .bottom-chain>div>i{ margin-right:3px; width: 15px; height:5px; background:#b7b6b6; } .right-axis{ width: 80px; height:80px; border-radius:50%; display: -webkit-flex; display: flex; justify-content: center; align-items: center; background:#ccc; border:3px dashed #999; position:absolute; right:180px; top:73px; animation: axis .8s linear infinite; z-index:1; } .right-axis>i{ width: 30px; height:30px; border-radius:50%; background:#999; border:2px dashed #666; display: -webkit-flex; display: flex; justify-content: center; align-items: center; } .left-axis{ width: 37px; height:37px; border-radius:50%; border:3px dashed #999; position:absolute; left:70px; top:95px; animation: axis .8s linear infinite; z-index:0; } .left-tread{ width:100px; height:100px; border-radius:50%; position: absolute; right:173px; top:66px; animation: axis .8s linear infinite; } .right-tread{ width:100px; height:100px; border-radius:50%; position: absolute; right:173px; top:66px; z-index:2; animation: axis .8s linear infinite; display: -webkit-flex; display: flex; justify-content: center; align-items: center; } .right-tread .top, .left-tread .top{ width: 20px; height:20px; border-radius:50%; background:#fff; display: block; position:absolute; left:0; right:0; bottom:0; top:0; margin:auto; } .right-tread .top>i{ width: 10px; height:10px; background:#333; display: block; } .right-tread .top::before, .left-tread .top::before{ content:''; width: 2px; height:80px; background:#fff; display: block; transform: rotate(-3deg); margin-top:10px; margin-left:2px; } .left-tread .top::before{ transform: rotate(3deg); margin-top:-70px; } .right-tread .top::after, .left-tread .top::after{ content:''; width: 2px; height:80px; background:#fff; display: block; transform: rotate(3deg); margin-top:10px; position: absolute; right:2px; top:0; } .left-tread .top::after{ transform: rotate(-3deg); top:-78px; } .right-tread .bottom, .left-tread .bottom{ width: 12px; height:12px; background:#fff; border-radius: 50%; position: absolute; bottom:-36px; left:0; right:0; margin:auto; } .left-tread .bottom{ bottom:123px; } .right-tread .left, .left-tread .left{ width: 50px; height:30px; background:#fff; position:absolute; bottom:-52px; left:0; right:0; margin:auto; transform: rotateX(65deg) rotateY(0deg) rotateZ(90deg); transform-style: preserve-3d; box-shadow: 10px 0px 8px #949494; } .left-tread .left{ bottom:122px; box-shadow: -10px 0px 8px #949494; } .right-axis>span{ width: 100%; height:10px; border:2px solid #f8f8f8; position:absolute; left:0; right:0; bottom:0; top:0; margin:auto; box-sizing: border-box; z-index:-1; border-width: 2px 0px; } .right-axis>span:nth-child(3){ transform: rotate(45deg); } .right-axis>span:nth-child(4){ transform: rotate(90deg); } .right-axis>span:nth-child(5){ transform: rotate(135deg); } .back-wheel,.before-wheel{ width: 200px; height:200px; border-radius:50%; border:15px solid #222; position:absolute; bottom:0; left:-318px; right:0; top:-18px; margin:auto; animation: axis .5s linear infinite; display: -webkit-flex; display: flex; justify-content: center; align-items: center; } .before-wheel{ left:444px; top:-98px; } .back-wheel:before, .before-wheel:before{ content:''; width: 230px; height:230px; display: block; border-radius:50%; position: absolute; left:-15px; top:-15px; border:2px dashed #fff; box-shadow: inset 0 0 15px #fff; z-index:1; box-sizing: border-box; } .back-wheel:after, .before-wheel:after{ content:''; width: 204px; height:204px; display: block; border-radius:50%; position: absolute; left:-3px; top:-3px; border:1px solid #f2f2f2; z-index:1; } .back-wheel>i, .before-wheel>i{ width: 100%; height:10px; border:2px solid #f2f2f2; border-width: 2px 0 ; position: absolute; left:0; right:0; margin:auto; } .back-wheel>i:nth-child(2), .before-wheel>i:nth-child(2){ transform: rotate(30deg); } .back-wheel>i:nth-child(3), .before-wheel>i:nth-child(3){ transform: rotate(60deg); } .back-wheel>i:nth-child(4), .before-wheel>i:nth-child(4){ transform: rotate(90deg); } .back-wheel>i:nth-child(5), .before-wheel>i:nth-child(5){ transform: rotate(120deg); } .back-wheel>i:nth-child(6), .before-wheel>i:nth-child(6){ transform: rotate(150deg); } .back-wheel>div, .before-wheel>div{ width: 20px; height:20px; /* background:radial-gradient(#fff 5%,#000 95%); */ border-radius:50%; display: flex; justify-content: center; align-items: center; background:#bfbfbf; z-index:1; } .back-wheel>div:before, .before-wheel>div:before{ content:''; background:radial-gradient(#fff,#000); width: 10px; height:10px; display: block; border-radius:50%; } .before-stand{ width: 120px; height:18px; box-shadow: inset 0px -6px 15px #afafaf; position: absolute; bottom:218px; right:-94px; background:#f2f2f2; transform: rotate(65deg); } .top-stand{ width: 120px; height:18px; box-shadow: inset 0px -6px 15px #afafaf; position: absolute; bottom:344px; right:-35px; background:#f2f2f2; transform: rotate(65deg); z-index: 2; } .center-top-stand{ width: 267px; height:18px; box-shadow: inset 0px 6px 15px #afafaf; position: absolute; bottom:315px; right:30px; background:#f2f2f2; transform: rotate(-15deg); z-index:-1; } .center-stand{ width: 264px; height:18px; box-shadow: inset 0px -6px 15px #afafaf; position: absolute; bottom:240px; right:145px; background:#f2f2f2; transform: rotate(65deg); } .center-bottom-stand{ width: 296px; height:18px; box-shadow: inset 0px -6px 15px #afafaf; position: absolute; bottom:236px; right:-28px; background:#f2f2f2; transform: rotate(-47deg); } .left-bottom-stand{ width: 200px; height:9px; box-shadow: inset 0px -4px 8px #afafaf; position: absolute; bottom:126px; right:200px; background:#f2f2f2; transform: rotate(1deg); } .left-top-stand{ width: 180px; height:9px; box-shadow: inset 0px 4px 8px #afafaf; position: absolute; bottom:210px; right:263px; background:#f2f2f2; transform: rotate(-55deg); z-index:0; } .before-stand>div{ width: 20px; height:20px; border-radius:50%; display: flex; justify-content: center; align-items: center; background:#bfbfbf; z-index:1; position:absolute; top:-1px; right:-9px; display: flex; justify-content: center; align-items: center; } .before-stand>div:before{ content:''; background:radial-gradient(#fff,#000); width: 10px; height:10px; display: block; border-radius:50%; } .plug{ width: 22px; height:22px; background:#333; position:absolute; top:-50px; right:-16px; transform: rotate(-25deg); border-radius:2px; box-shadow: inset 0 0 15px #ccc; transform-style: preserve-3d; } .plug .top{ width: 22px; height: calc(22px / 2); border-radius:50%; background:#fff; transform: rotateX(70deg) translateY(-18px); } .plug .bottom{ width: 22px; height: calc(22px / 2); border-radius:50%; background:#fff; transform: rotateX(70deg) translateY(13px); } .plug-top{ width: 22px; height:22px; background:#333; position:absolute; top:-176px; right:43px; transform: rotate(-25deg); border-radius:2px; box-shadow: inset 0 0 15px #ccc; transform-style: preserve-3d; } .plug-top .top{ width: 22px; height: calc(22px / 2); border-radius:50%; background:#fff; transform: rotateX(70deg) translateY(-18px); } .plug-top .bottom{ width: 22px; height: calc(22px / 2); border-radius:50%; background:#fff; transform: rotateX(70deg) translateY(13px); } .handgrip{ width: 48px; height:50px; border-left: 10px solid #a09f9f; border-top: 5px solid #a09f9f; border-bottom: 5px solid #a09f9f; border-top-left-radius: 45px; border-bottom-left-radius: 45px; position:absolute; top:-256px; right:30px; transform: rotate(-30deg); } .handgrip::before, .handgrip::after{ content:''; width: 30px; height: 12px; display: block; background:#333; border-radius:10px; margin-left:25px; margin-top:-10px; } .handgrip::after{ margin-top:43px; } .hand{ width: 22px; height:50px; position: absolute; right:54px; top:-214px; transform: rotate(-28deg); display: -webkit-flex; display: flex; justify-content: flex-end; align-items: center; flex-direction: column; } .hand:before{ content:''; width:8px; height:50px; box-shadow: inset -2px 0 10px #4a4a4a; display: block; } .hand:after{ content:''; width: 22px; height: calc(22px / 2); border-radius: 50%; background: #ccc; transform: rotateX(70deg) translateY(-18px); display: block; } .seat{ width: 150px; height:50px; position:absolute; top:-148px; left:115px; transform: rotateZ(-5deg) rotateX(30deg); transform-style: preserve-3d; } .seat:before{ content:''; position: absolute; left:10px; top:-8px; border-color:transparent transparent transparent #fff; border-width: 22px 0 22px 110px; border-style:solid; width: 10px; height:10px; } .seat .top{ width: 100px; height:1px; background:#fff; display: block; transform: rotate(10deg); margin-left:15px; } .seat .right{ width: 20px; height:20px; position:absolute; right:27px; top:9px; border-radius:50%; background:#fff; } .seat .bottom{ width: 100px; height:1px; background:#fff; transform: rotate(-10deg); position: absolute; right:35px; bottom:12px; } .seat .left{ width: 34px; height:54px; position:absolute; left:-4px; top:-8px; border-radius:50%; background:#fff; } .seat>div{ width: 10px; height:30px; background:#333; position:absolute; left:40px; bottom:-18px; z-index:-1; transform: rotate(-20deg); } .seat>div:before{ content:''; width: 10px; height:30px; background:#333; position:absolute; left:0; top:0; z-index:-1; } .seat>div:after{ content:''; width: 5px; background:#666; height:30px; position:absolute; bottom:-26px; right:0; z-index:-2; } .seat>div>i{ width: 100%; height:2px; display: block; margin-top:5px; background:#f2f2f2; } @keyframes road{ form{ transform: translate3d(0 ,0 ,0 ); } to{ transform: translate3d(-18px ,0 ,0 ); } } @keyframes topChain{ form{ transform: translate3d(0 ,0 ,0 ); } to{ transform: translate3d(18px ,0 ,0 ); } } @keyframes axis{ form{ transform:rotate(0deg) } to{ transform:rotate(360deg) } } @keyframes wheel{ form{ transform:rotate(0deg) } to{ transform:rotate(-360deg) } } </style> <div class="canvas"> <!--道路--> <div class="road"> <span></span> <div class="line"> <i></i> </div> <span></span> </div> <!--道路--> <!--自行车--> <div class="bicycle"> <div class="chain"> <!-- 左踩踏 --> <div class="left-tread"> <i class="top"></i> <i class="right"></i> <i class="bottom"></i> <i class="left"></i> </div> <!-- 后轮 --> <div class="back-wheel"> <i></i> <i></i> <i></i> <i></i> <i></i> <i></i> <div> </div> </div> <!-- 上链 --> <div class="top-chain"> <div> <i></i> </div> </div> <!-- 下链 --> <div class="bottom-chain"> <div> <i></i> </div> </div> <!-- 左轴 --> <div class="left-axis"></div> <!-- 前轮 --> <div class="before-wheel"> <i></i> <i></i> <i></i> <i></i> <i></i> <i></i> <div> </div> </div> <!-- 自行车架子 --> <div class="stand"> <div class="plug"> <div class="top"></div> <div class="bottom"></div> </div> <div class="plug-top"> <div class="top"></div> <div class="bottom"></div> </div> <!-- 前轮架子 --> <div class="before-stand"> <div> </div> </div> <div class="top-stand"> <div> </div> </div> <!-- 中上架子 --> <div class="center-top-stand"> </div> <!-- 左上架子 --> <div class="left-top-stand"> </div> <!-- 中架子 --> <div class="center-stand"> </div> <!-- 中下架子 --> <div class="center-bottom-stand"> </div> <!-- 左下架子 --> <div class="left-bottom-stand"> </div> <div class="hand"> </div> <!-- 手把 --> <div class="handgrip"> </div> <div class="handgrip"> </div> </div> <!-- 右轴 --> <div class="right-axis"> <i></i> <span></span> <span></span> <span></span> <span></span> </div> <!-- 右踩踏 --> <div class="right-tread"> <i class="top"> <i></i> </i> <i class="right"></i> <i class="bottom"></i> <i class="left"></i> </div> <div class="seat"> <i class="top"></i> <i class="right"></i> <i class="bottom"></i> <i class="left"></i> <div> <i></i> <i></i> <i></i> <i></i> </div> </div> </div> </div> </div> <script> window.onload = function(){ var w = (document.querySelector(".canvas").offsetWidth / 18).toFixed(0) , cW = (document.querySelector(".top-chain").offsetWidth / 18).toFixed(0) var i = document.createElement("i") for(let o = 0;o<w;o++){ document.querySelector(".line").appendChild(i.cloneNode(true)); } for(let o = 0;o<cW;o++){ document.querySelector(".top-chain>div").appendChild(i.cloneNode(true)); } for(let o = 0;o<cW;o++){ document.querySelector(".bottom-chain>div").appendChild(i.cloneNode(true)); } } </script> </body> </html>
网友评论文明上网理性发言 已有0人参与
发表评论: