Close Menu

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    How to create Valentine’s Love Button Animation using HTML CSS and JS

    23 June 2025

    How to create Magic Indicator Menu using HTML CSS and JS

    20 June 2025

    How to create Awesome Cool Loading Animation using HTML CSS and JS

    16 June 2025
    Facebook X (Twitter) Instagram YouTube Telegram Threads
    Coding StellaCoding Stella
    • Home
    • Blog
    • HTML & CSS
      • Login Form
    • JavaScript
    • Hire us!
    Coding StellaCoding Stella
    Home - HTML & CSS - How to Create Animated Bicycle Product Card using HTML & CSS
    HTML & CSS

    How to Create Animated Bicycle Product Card using HTML & CSS

    Coding StellaBy Coding Stella1 June 2025No Comments18 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Email WhatsApp Copy Link

    Let’s create an Animated Bicycle Product Card using HTML and CSS. This project will feature a sleek, interactive product card for a bicycle, with animated effects that enhance the user experience when click over the card.

    We’ll use HTML to structure the card, CSS to style it, and animations to bring the product card to life with hover effects.

    Let’s get started on building the Animated Bicycle Product Card. Whether you’re a beginner or an experienced developer, this project is a fun and engaging way to improve your skills and create visually appealing, interactive product cards. Let’s bring this bicycle card to life!

    HTML :

    This HTML code creates an interactive, animated bicycle product card. It includes inputs to configure the bike (like selecting wheels and toggling purchase options) and headings for customization options. Icons and div elements visually represent the bicycle frame and wheels, while the toggles provide animations. External fonts, styles, and icons are imported to enhance design and interactivity. The id, class, and input elements work together to control the animation and layout for the product card.

    <!DOCTYPE html>
    <html lang="en" >
    <head>
      <meta charset="UTF-8">
      <title>Animated Bi-Cycle Product Card</title>
      <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;900&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
      <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css'><link rel="stylesheet" href="./style.css">
    
    </head>
    <body>
    
    <div id='wrap'>
      <input class='initial' type='checkbox'>
      <input class='wheel1' name='wheel' type='radio'>
      <input class='wheel2' name='wheel' type='radio'>
      <input class='wheel3' name='wheel' type='radio'>
      <input class='wheel4' name='wheel' type='radio'>
      <input class='buy' type='checkbox'>
      <h1>Configure the Bike</h1>
      <h2>Added to Cart</h2>
      <h3>Wheels</h3>
      <div class='wheeltoggle'></div>
      <div class='wheeltoggle'></div>
      <div class='wheeltoggle'></div>
      <div class='wheeltoggle'></div>
      <div class='buy'></div>
      <div class='toggle expand'>
        <i class='fas fa-bicycle'></i>
      </div>
      <div class='toggle'>
        <i class='fas fa-bicycle'></i>
      </div>
      <div class='background'></div>
      <div class='frame'>
        <div class='rear'></div>
        <div class='stem'></div>
        <div class='shaft'></div>
        <div class='seat'></div>
        <div class='wheel one front'>
          <div class='inner'></div>
        </div>
        <div class='wheel one back'>
          <div class='inner'></div>
        </div>
      </div>
    </div>
    
    </body>
    </html>

    CSS :

    This CSS styles a responsive center-aligned container with a grid layout for interactive elements like headings, toggles, buttons, and animations. It uses flexbox for centering, grid for element placement, and transitions with keyframes for smooth animations. Buttons like “Buy” and toggles have hover and checked states for dynamic effects. The design includes multiple themes, wheel toggles with image backgrounds, and animations like fade-ins and bounce effects for a modern, interactive user interface.

    body {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      font-family: "Roboto", sans-serif;
      background: #dfe1eb;
    }
    body #wrap {
      width: 800px;
      height: 550px;
      background: #efefef;
      box-shadow: 0 20px 40px -15px rgba(0, 0, 0, 0.25);
      position: relative;
      border-radius: 5px;
      overflow: hidden;
      display: grid;
      grid-template-columns: repeat(15, 1fr);
      grid-template-rows: repeat(15, 1fr);
      grid-column-gap: 0px;
      grid-row-gap: 0px;
    }
    body #wrap h1,
    body #wrap h2 {
      grid-area: 4/10/5/15;
      color: #000;
      position: relative;
      z-index: 9;
      font-size: 28px;
      transition: 0.4s cubic-bezier(0.75, 0.885, 0.32, 1);
      text-align: right;
      opacity: 0.25;
    }
    body #wrap h2 {
      grid-area: 4/2/5/7;
      text-align: left;
      transform: translateY(100px);
      opacity: 0;
    }
    body #wrap h3 {
      position: relative;
      z-index: 9;
      grid-area: 10/11/11/12;
      opacity: 0.25;
      transition: 0.4s cubic-bezier(0.75, 0.885, 0.32, 1);
    }
    body #wrap .toggle {
      width: 30px;
      height: 30px;
      box-shadow: -5px 0 0 rgba(255, 255, 255, 0.15);
      z-index: 9;
      background: rgba(255, 255, 255, 0.05);
      position: relative;
      grid-area: 4/2/5/3;
      transition: 0.2s ease-in-out;
    }
    body #wrap .toggle.expand:before {
      content: "IF Mode";
      position: absolute;
      color: #fff;
      top: -40px;
      width: 100px;
      font-weight: 900;
    }
    body #wrap .toggle i {
      color: #fff;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
    body #wrap .toggle:not(.expand) {
      margin-top: 40px;
      box-shadow: -5px 0 0 #ff6a5e;
    }
    body #wrap .toggle:not(.expand) i {
      transform: translate(-50%, -50%) rotate(-90deg);
    }
    body #wrap input {
      cursor: pointer;
      opacity: 0;
    }
    body #wrap .buy {
      grid-area: 14/3/15/5;
      background: #ff6a5e;
      position: relative;
      height: 50px;
      left: 40px;
      border-radius: 3px;
      z-index: 9;
      transition: 0.2s ease-in-out;
      transform: translateY(200px);
    }
    body #wrap .buy:not(input) {
      pointer-events: none;
      -webkit-animation: fadein 0.2s ease-in-out 1 forwards;
              animation: fadein 0.2s ease-in-out 1 forwards;
    }
    @-webkit-keyframes fadein {
      from {
        opacity: 0;
      }
      to {
        opacity: 1;
      }
    }
    @keyframes fadein {
      from {
        opacity: 0;
      }
      to {
        opacity: 1;
      }
    }
    body #wrap .buy:not(input):after {
      content: "Buy Now";
      position: absolute;
      width: 100%;
      height: 100%;
      box-shadow: 0 0 0 1px #ff6a5e;
      border-radius: inherit;
      right: calc(100% + 10px);
      top: 0;
      display: flex;
      justify-content: center;
      align-items: center;
      color: #ff6a5e;
      cursor: pointer;
      transition: 0.6s ease-in-out;
      transform: translateY(200px);
    }
    body #wrap .buy:before {
      content: "Check Out";
      width: 100%;
      height: 100%;
      display: flex;
      justify-content: center;
      align-items: center;
      color: #fff;
      -webkit-animation: buynow 1s ease-in-out 1 forwards;
              animation: buynow 1s ease-in-out 1 forwards;
    }
    @-webkit-keyframes buynow {
      0% {
        opacity: 0;
      }
      100% {
        opacity: 1;
        content: "Check Out";
      }
    }
    @keyframes buynow {
      0% {
        opacity: 0;
      }
      100% {
        opacity: 1;
        content: "Check Out";
      }
    }
    body #wrap input.initial {
      position: relative;
      grid-area: 4/2/5/3;
      z-index: 999;
      width: 30px;
      height: 70px;
      opacity: 0;
    }
    body #wrap input.initial:first-of-type:hover ~ .toggle.expand {
      background: #ff6a5e;
    }
    body #wrap input.initial:checked {
      pointer-events: none;
    }
    body #wrap input.initial:checked ~ .toggle:not(.expand) {
      transform: translateX(-100px);
    }
    body #wrap input.initial:checked ~ input[type=radio] {
      pointer-events: all;
    }
    body #wrap input.initial:checked ~ .wheeltoggle, body #wrap input.initial:checked ~ h3, body #wrap input.initial:checked ~ h1 {
      filter: saturate(1);
      opacity: 1;
    }
    body #wrap input.initial:checked ~ .buy {
      transform: translateY(0);
      min-width: 110px;
      transition-delay: 1s;
    }
    body #wrap input.initial:checked ~ .buy:after {
      transform: translateY(200px);
    }
    body #wrap input.initial:checked ~ .buy:checked {
      transform: translateY(-250px);
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .toggle {
      opacity: 0;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .frame .wheel .inner {
      -webkit-animation: wheelroll6 1.25s ease-in-out 1 forwards;
              animation: wheelroll6 1.25s ease-in-out 1 forwards;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ h2 {
      transform: translateY(0px);
      transition-delay: 0.4s;
      opacity: 1;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .wheeltoggle, body #wrap input.initial:checked ~ .buy:checked ~ h1, body #wrap input.initial:checked ~ .buy:checked ~ h3 {
      transform: translateY(100px);
      opacity: 0;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .wheeltoggle:nth-of-type(1) {
      transition-delay: 0.05s;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .wheeltoggle:nth-of-type(2) {
      transition-delay: 0.1s;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .wheeltoggle:nth-of-type(3) {
      transition-delay: 0.15s;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .wheeltoggle:nth-of-type(4) {
      transition-delay: 0.2s;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ h3 {
      transition-delay: 0.1s;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .buy {
      -webkit-animation: bounceback 1s ease-in-out 1 forwards;
              animation: bounceback 1s ease-in-out 1 forwards;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .buy:after {
      transition-delay: 0.3s;
      transform: translateY(0);
      opacity: 1;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .buy:before {
      -webkit-animation: buynow2 1s ease-in-out 1 forwards;
              animation: buynow2 1s ease-in-out 1 forwards;
    }
    @-webkit-keyframes buynow2 {
      100% {
        content: "Back";
      }
    }
    @keyframes buynow2 {
      100% {
        content: "Back";
      }
    }
    @-webkit-keyframes bounceback {
      0% {
        transform: translateY(0px);
      }
      50% {
        transform: translateY(200px);
      }
      50.5% {
        transform: translateY(200px);
        opacity: 0;
      }
      51% {
        transform: translateY(-200px);
        opacity: 0;
      }
      100% {
        transform: translateY(-250px);
      }
    }
    @keyframes bounceback {
      0% {
        transform: translateY(0px);
      }
      50% {
        transform: translateY(200px);
      }
      50.5% {
        transform: translateY(200px);
        opacity: 0;
      }
      51% {
        transform: translateY(-200px);
        opacity: 0;
      }
      100% {
        transform: translateY(-250px);
      }
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .frame:not(.two):not(i):not(.buy) {
      transform: scale(0.7) translateX(350px) translateY(50px);
      transition: 0.75s cubic-bezier(0.75, 0.885, 0.32, 1);
      transition-delay: 0.25s;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .background:before {
      transition: transform 0.4s cubic-bezier(0.75, 0.885, 0.32, 1), left 0.4s cubic-bezier(0.75, 0.885, 0.32, 1) !important;
      transition-delay: 0.4s, 0.8s !important;
      transform-origin: right;
      transform: scaleX(2) !important;
      left: -5%;
    }
    body #wrap input.initial:checked ~ .buy:checked ~ .background:after {
      transform: scaleY(1.25) translateX(-40px) !important;
      transition-delay: 0.3s;
    }
    body #wrap input.initial:checked ~ .buy:not(div) {
      pointer-events: all;
      z-index: 999;
    }
    body #wrap input.initial:checked ~ .buy:not(div):hover ~ .buy {
      transition-delay: 0s;
      background: #ff3b2b;
    }
    body #wrap .wheeltoggle {
      box-shadow: 0 0 0 1px #efefef, 0 10px 20px -20px #4e567d;
      border-radius: 3px;
      transition: 0.3s ease-in-out;
      pointer-events: none;
      filter: saturate(0);
      opacity: 0.5;
      background: #fff;
      z-index: 9;
    }
    body #wrap .wheeltoggle:before {
      content: "";
      position: absolute;
      width: 100%;
      height: 50px;
      top: 0;
      transition: 0.4s ease-in-out;
    }
    body #wrap .wheeltoggle:nth-of-type(1):after {
      content: "Wheel Type 1";
      position: absolute;
      width: 100%;
      top: 55px;
      font-size: 10px;
      text-align: center;
      line-height: 1.25;
      color: #4e567d;
      text-transform: uppercase;
    }
    body #wrap .wheeltoggle:nth-of-type(1):before {
      background: url(/Images/wheel1.png) 50% 50%/80% auto no-repeat;
    }
    body #wrap .wheeltoggle:nth-of-type(2):after {
      content: "Wheel Type 2";
      position: absolute;
      width: 100%;
      top: 55px;
      font-size: 10px;
      text-align: center;
      line-height: 1.25;
      color: #4e567d;
      text-transform: uppercase;
    }
    body #wrap .wheeltoggle:nth-of-type(2):before {
      background: url(/Images/wheel2.png) 50% 50%/80% auto no-repeat;
    }
    body #wrap .wheeltoggle:nth-of-type(3):after {
      content: "Wheel Type 3";
      position: absolute;
      width: 100%;
      top: 55px;
      font-size: 10px;
      text-align: center;
      line-height: 1.25;
      color: #4e567d;
      text-transform: uppercase;
    }
    body #wrap .wheeltoggle:nth-of-type(3):before {
      background: url(/Images/wheel3.png) 50% 50%/80% auto no-repeat;
    }
    body #wrap .wheeltoggle:nth-of-type(4):after {
      content: "Wheel Type 4";
      position: absolute;
      width: 100%;
      top: 55px;
      font-size: 10px;
      text-align: center;
      line-height: 1.25;
      color: #4e567d;
      text-transform: uppercase;
    }
    body #wrap .wheeltoggle:nth-of-type(4):before {
      background: url(/Images/wheel4.png) 50% 50%/80% auto no-repeat;
    }
    body #wrap input[type=radio],
    body #wrap .wheeltoggle {
      position: absolute;
      z-index: 999;
      width: 50px;
      height: 90px;
      z-index: 999;
      pointer-events: none;
    }
    body #wrap input[type=radio].wheel1, body #wrap input[type=radio]:not(input):nth-of-type(1),
    body #wrap .wheeltoggle.wheel1,
    body #wrap .wheeltoggle:not(input):nth-of-type(1) {
      grid-area: 11/14/12/15;
    }
    body #wrap input[type=radio].wheel2, body #wrap input[type=radio]:not(input):nth-of-type(2),
    body #wrap .wheeltoggle.wheel2,
    body #wrap .wheeltoggle:not(input):nth-of-type(2) {
      grid-area: 11/13/12/14;
    }
    body #wrap input[type=radio].wheel3, body #wrap input[type=radio]:not(input):nth-of-type(3),
    body #wrap .wheeltoggle.wheel3,
    body #wrap .wheeltoggle:not(input):nth-of-type(3) {
      grid-area: 11/12/12/13;
    }
    body #wrap input[type=radio].wheel4, body #wrap input[type=radio]:not(input):nth-of-type(4),
    body #wrap .wheeltoggle.wheel4,
    body #wrap .wheeltoggle:not(input):nth-of-type(4) {
      grid-area: 11/11/12/12;
    }
    body #wrap input[type=radio].wheel1:checked ~ .wheeltoggle:nth-of-type(1),
    body #wrap .wheeltoggle.wheel1:checked ~ .wheeltoggle:nth-of-type(1) {
      box-shadow: 0 0 0 1px #ff6a5e, 0 10px 20px -30px #4e567d;
    }
    body #wrap input[type=radio].wheel1:hover ~ .wheeltoggle:nth-of-type(1),
    body #wrap .wheeltoggle.wheel1:hover ~ .wheeltoggle:nth-of-type(1) {
      box-shadow: 0 0 0 1px #efefef, 0 10px 20px -10px #4e567d;
      transform: scale(1.05);
    }
    body #wrap input[type=radio].wheel1:hover ~ .wheeltoggle:nth-of-type(1):before,
    body #wrap .wheeltoggle.wheel1:hover ~ .wheeltoggle:nth-of-type(1):before {
      transform: rotate(180deg);
    }
    body #wrap input[type=radio].wheel1:checked ~ .frame > div.wheel,
    body #wrap .wheeltoggle.wheel1:checked ~ .frame > div.wheel {
      -webkit-animation: wheelout1 0.75s ease-in-out 1 forwards 0.25s;
              animation: wheelout1 0.75s ease-in-out 1 forwards 0.25s;
    }
    body #wrap input[type=radio].wheel1:checked ~ .frame > div.wheel .inner:before,
    body #wrap .wheeltoggle.wheel1:checked ~ .frame > div.wheel .inner:before {
      background-image: url(/Images/wheel1.png);
      -webkit-animation: wheelroll1 1s ease-in-out 1 forwards 0s;
              animation: wheelroll1 1s ease-in-out 1 forwards 0s;
    }
    @-webkit-keyframes wheelroll1 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(720deg);
      }
    }
    @keyframes wheelroll1 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(720deg);
      }
    }
    @-webkit-keyframes wheelroll6 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(360deg);
      }
    }
    @keyframes wheelroll6 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(360deg);
      }
    }
    body #wrap input[type=radio].wheel1:checked ~ .frame > div.wheel.back,
    body #wrap .wheeltoggle.wheel1:checked ~ .frame > div.wheel.back {
      -webkit-animation: wheelback1 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
              animation: wheelback1 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
    }
    @-webkit-keyframes wheelback1 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(-700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @keyframes wheelback1 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(-700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @-webkit-keyframes wheelout1 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @keyframes wheelout1 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    body #wrap input[type=radio].wheel1:checked ~ .frame > div:not(.wheel),
    body #wrap .wheeltoggle.wheel1:checked ~ .frame > div:not(.wheel) {
      -webkit-animation: jump1 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
              animation: jump1 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
    }
    @-webkit-keyframes jump1 {
      0% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-75px) rotate(-2.5deg);
      }
      100% {
        transform: translateY(0);
      }
    }
    @keyframes jump1 {
      0% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-75px) rotate(-2.5deg);
      }
      100% {
        transform: translateY(0);
      }
    }
    body #wrap input[type=radio].wheel2:checked ~ .wheeltoggle:nth-of-type(2),
    body #wrap .wheeltoggle.wheel2:checked ~ .wheeltoggle:nth-of-type(2) {
      box-shadow: 0 0 0 1px #ff6a5e, 0 10px 20px -30px #4e567d;
    }
    body #wrap input[type=radio].wheel2:hover ~ .wheeltoggle:nth-of-type(2),
    body #wrap .wheeltoggle.wheel2:hover ~ .wheeltoggle:nth-of-type(2) {
      box-shadow: 0 0 0 1px #efefef, 0 10px 20px -10px #4e567d;
      transform: scale(1.05);
    }
    body #wrap input[type=radio].wheel2:hover ~ .wheeltoggle:nth-of-type(2):before,
    body #wrap .wheeltoggle.wheel2:hover ~ .wheeltoggle:nth-of-type(2):before {
      transform: rotate(180deg);
    }
    body #wrap input[type=radio].wheel2:checked ~ .frame > div.wheel,
    body #wrap .wheeltoggle.wheel2:checked ~ .frame > div.wheel {
      -webkit-animation: wheelout2 0.75s ease-in-out 1 forwards 0.25s;
              animation: wheelout2 0.75s ease-in-out 1 forwards 0.25s;
    }
    body #wrap input[type=radio].wheel2:checked ~ .frame > div.wheel .inner:before,
    body #wrap .wheeltoggle.wheel2:checked ~ .frame > div.wheel .inner:before {
      background-image: url(/Images/wheel2.png);
      -webkit-animation: wheelroll2 1s ease-in-out 1 forwards 0s;
              animation: wheelroll2 1s ease-in-out 1 forwards 0s;
    }
    @-webkit-keyframes wheelroll2 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(720deg);
      }
    }
    @keyframes wheelroll2 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(720deg);
      }
    }
    @keyframes wheelroll6 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(360deg);
      }
    }
    body #wrap input[type=radio].wheel2:checked ~ .frame > div.wheel.back,
    body #wrap .wheeltoggle.wheel2:checked ~ .frame > div.wheel.back {
      -webkit-animation: wheelback2 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
              animation: wheelback2 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
    }
    @-webkit-keyframes wheelback2 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(-700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @keyframes wheelback2 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(-700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @-webkit-keyframes wheelout2 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @keyframes wheelout2 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    body #wrap input[type=radio].wheel2:checked ~ .frame > div:not(.wheel),
    body #wrap .wheeltoggle.wheel2:checked ~ .frame > div:not(.wheel) {
      -webkit-animation: jump2 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
              animation: jump2 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
    }
    @-webkit-keyframes jump2 {
      0% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-75px) rotate(-2.5deg);
      }
      100% {
        transform: translateY(0);
      }
    }
    @keyframes jump2 {
      0% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-75px) rotate(-2.5deg);
      }
      100% {
        transform: translateY(0);
      }
    }
    body #wrap input[type=radio].wheel3:checked ~ .wheeltoggle:nth-of-type(3),
    body #wrap .wheeltoggle.wheel3:checked ~ .wheeltoggle:nth-of-type(3) {
      box-shadow: 0 0 0 1px #ff6a5e, 0 10px 20px -30px #4e567d;
    }
    body #wrap input[type=radio].wheel3:hover ~ .wheeltoggle:nth-of-type(3),
    body #wrap .wheeltoggle.wheel3:hover ~ .wheeltoggle:nth-of-type(3) {
      box-shadow: 0 0 0 1px #efefef, 0 10px 20px -10px #4e567d;
      transform: scale(1.05);
    }
    body #wrap input[type=radio].wheel3:hover ~ .wheeltoggle:nth-of-type(3):before,
    body #wrap .wheeltoggle.wheel3:hover ~ .wheeltoggle:nth-of-type(3):before {
      transform: rotate(180deg);
    }
    body #wrap input[type=radio].wheel3:checked ~ .frame > div.wheel,
    body #wrap .wheeltoggle.wheel3:checked ~ .frame > div.wheel {
      -webkit-animation: wheelout3 0.75s ease-in-out 1 forwards 0.25s;
              animation: wheelout3 0.75s ease-in-out 1 forwards 0.25s;
    }
    body #wrap input[type=radio].wheel3:checked ~ .frame > div.wheel .inner:before,
    body #wrap .wheeltoggle.wheel3:checked ~ .frame > div.wheel .inner:before {
      background-image: url(/Images/wheel3.png);
      -webkit-animation: wheelroll3 1s ease-in-out 1 forwards 0s;
              animation: wheelroll3 1s ease-in-out 1 forwards 0s;
    }
    @-webkit-keyframes wheelroll3 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(720deg);
      }
    }
    @keyframes wheelroll3 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(720deg);
      }
    }
    @keyframes wheelroll6 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(360deg);
      }
    }
    body #wrap input[type=radio].wheel3:checked ~ .frame > div.wheel.back,
    body #wrap .wheeltoggle.wheel3:checked ~ .frame > div.wheel.back {
      -webkit-animation: wheelback3 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
              animation: wheelback3 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
    }
    @-webkit-keyframes wheelback3 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(-700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @keyframes wheelback3 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(-700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @-webkit-keyframes wheelout3 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @keyframes wheelout3 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    body #wrap input[type=radio].wheel3:checked ~ .frame > div:not(.wheel),
    body #wrap .wheeltoggle.wheel3:checked ~ .frame > div:not(.wheel) {
      -webkit-animation: jump3 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
              animation: jump3 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
    }
    @-webkit-keyframes jump3 {
      0% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-75px) rotate(-2.5deg);
      }
      100% {
        transform: translateY(0);
      }
    }
    @keyframes jump3 {
      0% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-75px) rotate(-2.5deg);
      }
      100% {
        transform: translateY(0);
      }
    }
    body #wrap input[type=radio].wheel4:checked ~ .wheeltoggle:nth-of-type(4),
    body #wrap .wheeltoggle.wheel4:checked ~ .wheeltoggle:nth-of-type(4) {
      box-shadow: 0 0 0 1px #ff6a5e, 0 10px 20px -30px #4e567d;
    }
    body #wrap input[type=radio].wheel4:hover ~ .wheeltoggle:nth-of-type(4),
    body #wrap .wheeltoggle.wheel4:hover ~ .wheeltoggle:nth-of-type(4) {
      box-shadow: 0 0 0 1px #efefef, 0 10px 20px -10px #4e567d;
      transform: scale(1.05);
    }
    body #wrap input[type=radio].wheel4:hover ~ .wheeltoggle:nth-of-type(4):before,
    body #wrap .wheeltoggle.wheel4:hover ~ .wheeltoggle:nth-of-type(4):before {
      transform: rotate(180deg);
    }
    body #wrap input[type=radio].wheel4:checked ~ .frame > div.wheel,
    body #wrap .wheeltoggle.wheel4:checked ~ .frame > div.wheel {
      -webkit-animation: wheelout4 0.75s ease-in-out 1 forwards 0.25s;
              animation: wheelout4 0.75s ease-in-out 1 forwards 0.25s;
    }
    body #wrap input[type=radio].wheel4:checked ~ .frame > div.wheel .inner:before,
    body #wrap .wheeltoggle.wheel4:checked ~ .frame > div.wheel .inner:before {
      background-image: url(/Images/wheel4.png);
      -webkit-animation: wheelroll4 1s ease-in-out 1 forwards 0s;
              animation: wheelroll4 1s ease-in-out 1 forwards 0s;
    }
    @-webkit-keyframes wheelroll4 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(720deg);
      }
    }
    @keyframes wheelroll4 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(720deg);
      }
    }
    @keyframes wheelroll6 {
      from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(360deg);
      }
    }
    body #wrap input[type=radio].wheel4:checked ~ .frame > div.wheel.back,
    body #wrap .wheeltoggle.wheel4:checked ~ .frame > div.wheel.back {
      -webkit-animation: wheelback4 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
              animation: wheelback4 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
    }
    @-webkit-keyframes wheelback4 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(-700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @keyframes wheelback4 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(-700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @-webkit-keyframes wheelout4 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    @keyframes wheelout4 {
      0% {
        transform: translate(0px);
      }
      50% {
        transform: translateX(700px);
      }
      100% {
        transform: translate(0px);
      }
    }
    body #wrap input[type=radio].wheel4:checked ~ .frame > div:not(.wheel),
    body #wrap .wheeltoggle.wheel4:checked ~ .frame > div:not(.wheel) {
      -webkit-animation: jump4 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
              animation: jump4 0.75s cubic-bezier(0.75, 0.885, 0.32, 1) 1 forwards 0.25s;
    }
    @-webkit-keyframes jump4 {
      0% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-75px) rotate(-2.5deg);
      }
      100% {
        transform: translateY(0);
      }
    }
    @keyframes jump4 {
      0% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-75px) rotate(-2.5deg);
      }
      100% {
        transform: translateY(0);
      }
    }
    body #wrap input[type=radio]:checked ~ .frame > div:not(.wheel),
    body #wrap .wheeltoggle:checked ~ .frame > div:not(.wheel) {
      -webkit-animation: jump 1s ease-in-out 1 forwards;
              animation: jump 1s ease-in-out 1 forwards;
    }
    body #wrap input.initial:checked ~ .toggle {
      box-shadow: -5px 0 0 #ff6a5e;
    }
    body #wrap input.initial:checked ~ .toggle:not(.expand) {
      box-shadow: -5px 0 0 rgba(255, 255, 255, 0.15);
    }
    body #wrap input.initial:checked ~ *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle) {
      transform: rotate(0deg);
      margin-left: 0px;
    }
    body #wrap input.initial:checked ~ *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle) *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle) {
      transform: rotate(0deg);
      margin-left: 0px;
    }
    body #wrap input.initial:checked ~ *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle) *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle):before, body #wrap input.initial:checked ~ *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle) *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle):after {
      transform: rotate(0deg);
    }
    body #wrap input.initial:checked ~ *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle).background:after {
      transform: scaleY(1.25) translateX(30px);
    }
    body #wrap input.initial:checked ~ *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle).background:before {
      transition: 0.5s cubic-bezier(0.75, 0.885, 0.32, 1);
    }
    body #wrap input.initial:checked ~ *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle).frame {
      transform: scale(0.7) rotate(0deg) translateY(50px);
      margin-left: -25px;
    }
    body #wrap input.initial:checked ~ *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle):before, body #wrap input.initial:checked ~ *:not(.two):not(i):not(.buy):not(h1):not(h2):not(h3):not(.toggle):after {
      transform: rotate(0deg);
    }
    body #wrap * {
      transition: transform 0.3s cubic-bezier(0.75, 0.885, 0.32, 1), margin-left 0.3s cubic-bezier(0.75, 0.885, 0.32, 1);
    }
    body #wrap *.frame {
      transition: transform 0.6s cubic-bezier(0.75, 0.885, 0.32, 1), margin-left 0.4s cubic-bezier(0.75, 0.885, 0.32, 1);
      transition-delay: 0.2s, 0.4s;
    }
    body #wrap *:before, body #wrap *:after {
      transition: transform 0.3s cubic-bezier(0.75, 0.885, 0.32, 1), margin-left 0.3s cubic-bezier(0.75, 0.885, 0.32, 1);
    }
    body #wrap .background {
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top: 0;
      background: #4e567d;
      overflow: hidden;
    }
    body #wrap .background:before {
      content: "";
      position: absolute;
      width: 65%;
      height: 100%;
      left: 35%;
      top: 0;
      background: #fff;
      z-index: 2;
      transition: cubic-bezier(0.75, 0.885, 0.32, 1) 0.5s ease-in-out;
    }
    body #wrap .background:after {
      content: "IF Mode";
      position: absolute;
      z-index: 0;
      width: 100%;
      height: 80%;
      top: 10%;
      left: 50px;
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 200px;
      font-weight: 900;
      color: #444b6d;
      transition: 1s ease-in-out;
      transform: scaleY(1.25);
    }
    body #wrap .frame {
      position: absolute;
      top: 60px;
      left: 85px;
      width: 427px;
      height: 365px;
      z-index: 2;
      transform-origin: 190px 210px;
      transform: scale(0.8) rotate(-62.5deg);
    }
    body #wrap .frame div {
      position: absolute;
      background-size: cover;
      width: 100%;
      height: 100%;
      top: 0;
      left: 0;
    }
    body #wrap .frame div.wheel.two.front, body #wrap .frame div.wheel.three.front, body #wrap .frame div.wheel.four.front {
      transform: translateX(700px);
      margin-left: 0px;
    }
    body #wrap .frame div.wheel.two.back, body #wrap .frame div.wheel.three.back, body #wrap .frame div.wheel.four.back {
      transform: translateX(-700px);
    }
    body #wrap .frame div.wheel.front {
      transform-origin: 273px 190px;
      margin-left: -75px;
      transform: rotate(115deg);
      transition-delay: 0.5s, 0.8s;
      z-index: 2;
    }
    body #wrap .frame div.wheel.back {
      z-index: -1;
    }
    body #wrap .frame div.wheel.back .inner {
      left: -40px;
    }
    body #wrap .frame div.wheel .inner {
      position: absolute;
      width: 210px;
      height: 210px;
      border-radius: 100%;
      z-index: -1;
      top: 170px;
      left: 300px;
    }
    body #wrap .frame div.wheel .inner:before {
      content: "";
      position: absolute;
      width: 100%;
      height: 100%;
      background-image: url("/Images/wheel1.png");
      background-size: contain;
      transform: rotate(360deg);
      transition: transform 1.25s cubic-bezier(0.75, 0.885, 0.32, 1), background-image 0s ease-in-out;
      transition-delay: 0.1s, 0.5s;
    }
    body #wrap .frame div.rear {
      background-image: url("/Images/rear.png");
    }
    body #wrap .frame div.stem {
      background-image: url("/Images/stem.png");
      transform-origin: 273px 190px;
      margin-left: -105px;
      transform: rotate(115deg);
      transition-delay: 0.5s, 0.8s;
    }
    body #wrap .frame div.shaft {
      background-image: url("/Images/shaft.png");
      transform-origin: 220px 200px;
      transform: translateX(-70px) translateY(40px);
      transition-delay: 0.8s;
    }
    body #wrap .frame div.seat {
      background-image: url("/Images/seat.png");
      transform: translateY(100px) translateX(40px);
      transition: 0.4s ease-in-out;
      transition-delay: 0.65s;
      z-index: -1;
    }

    In conclusion, creating an Animated Bicycle Product Card using HTML and CSS has been an exciting and creative way to kickstart the journey of cool CSS projects. By combining HTML for structure and CSS for styling and animations, we’ve crafted an interactive and visually appealing product card.

    If your project has problems, don’t worry. Just click to download the source code and face your coding challenges with excitement. Have fun coding!

    Animation bicycle Web Development
    Share. Copy Link Twitter Facebook LinkedIn Email WhatsApp
    Previous ArticleHow to make Happy birthday cake Animation using HTML & CSS
    Next Article How to create Animated Rubik Cube using HTML CSS and JS
    Coding Stella
    • Website

    Related Posts

    JavaScript

    How to create Valentine’s Love Button Animation using HTML CSS and JS

    23 June 2025
    JavaScript

    How to create Magic Indicator Menu using HTML CSS and JS

    20 June 2025
    HTML & CSS

    How to create Awesome Cool Loading Animation using HTML CSS and JS

    16 June 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Trending Post

    Master Frontend in 100 Days Ebook

    2 March 202419K Views

    How to make Modern Login Form using HTML & CSS | Glassmorphism

    11 January 202417K Views

    How to make I love you Animation in HTML CSS & JavaScript

    14 February 202415K Views

    How to make Valentine’s Day Card using HTML & CSS

    13 February 202412K Views
    Follow Us
    • Instagram
    • Facebook
    • YouTube
    • Twitter
    ads
    Featured Post

    How to make Login and Signup Form using HTML CSS & JavaScript

    14 January 2024

    How to make Valentine’s Day Card using HTML & CSS

    13 February 2024

    How to make Team Profiles Rotation using HTML & CSS

    2 August 2024

    Importance Of CSS In Web Development

    31 January 2024
    Latest Post

    How to create Valentine’s Love Button Animation using HTML CSS and JS

    23 June 2025

    How to create Magic Indicator Menu using HTML CSS and JS

    20 June 2025

    How to create Awesome Cool Loading Animation using HTML CSS and JS

    16 June 2025

    How to create Login and Signup Form using HTML CSS and JS

    9 June 2025
    Facebook X (Twitter) Instagram YouTube
    • About Us
    • Privacy Policy
    • Return and Refund Policy
    • Terms and Conditions
    • Contact Us
    • Buy me a coffee
    © 2025 Coding Stella. Made with 💙 by @coding.stella

    Type above and press Enter to search. Press Esc to cancel.

    Ad Blocker Enabled!
    Ad Blocker Enabled!
    Looks like you're using an ad blocker. We rely on advertising to help fund our site.
    Okay! I understood