Close Menu

    Subscribe to Updates

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

    What's Hot

    How to create Galaxy Animation using HTML CSS and JS

    11 October 2025

    How to create Animated Ghost Toggle using HTML CSS and JS

    9 October 2025

    How to make Magnetic Button Hover Effect using HTML & CSS

    6 October 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 make Iconic Magic Tab Bar using HTML & CSS
    HTML & CSS

    How to make Iconic Magic Tab Bar using HTML & CSS

    Coding StellaBy Coding Stella23 August 2025Updated:23 August 2025No Comments6 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Email WhatsApp Copy Link

    Let’s create an Iconic Magic Tab Bar using HTML and CSS. This stylish tab navigation will feature smooth hover effects, glowing highlights, and a clean layout to make switching between sections look magical.

    We’ll use:

    • HTML to structure the tab bar and icons.
    • CSS to style it with animations, hover effects, and glowing transitions.

    This project is perfect for websites, portfolios, or apps where you want a unique and interactive navigation bar. The Magic Tab Bar combines simplicity with eye-catching effects to keep your design modern and engaging. 🌟

    HTML :

    This code creates a simple tab bar menu using HTML, where each menu item (Home, Search, Notification, Favorites, Profile) is represented by a radio input paired with a label. Only one tab can be active at a time because all inputs share the same name. The checked attribute makes “Home” selected by default, and the selector div is used (with CSS) to highlight the currently active tab.

    <!DOCTYPE html>
    <html lang="en" >
    <head>
      <meta charset="UTF-8">
      <title>Iconic Tab Bar | @coding.stella</title>
      <link rel="stylesheet" href="./style.css">
    
    </head>
    <body>
    
    <nav class="menu">
    
    	<input type="radio" name="nav-item" id="m-home" checked><label for="m-home">Home</label>
    	<input type="radio" name="nav-item" id="m-search"><label for="m-search">Search</label>
    	<input type="radio" name="nav-item" id="m-notification"><label for="m-notification">Notification</label>
    	<input type="radio" name="nav-item" id="m-favorites"><label for="m-favorites">Favorites</label>
    	<input type="radio" name="nav-item" id="m-profile"><label for="m-profile">Profile</label>
    
    	<div class="selector"></div>
    </nav>
    
    </body>
    </html>

    CSS :

    This CSS styles the tab bar into a modern animated menu. It hides the radio buttons and uses labels as clickable tabs, giving them hover and active effects. Each label has custom ::before and ::after shapes that form icons (home, search, bell, heart, profile) purely with CSS gradients and borders. The .selector is a circular highlight that moves under the active tab with smooth transitions and color changes, creating a glowing spotlight effect. When a tab is checked, its color updates via --sel, making it look active. Overall, it’s a fully CSS-driven interactive tab menu without images or JavaScript.

    :root {
      --icon: #b0bfd8;
    }
    
    body {
      width: 100%;
      height: 100vh;
      display: flex;
      justify-content: center;
      align-items: center;
      overflow: hidden;
      margin: 0;
      background-color: #e3efe8;
      background-image: linear-gradient(315deg, #e3efe8 0%, #96a7cf 74%);
    }
    
    nav.menu {
      display: flex;
      justify-content: space-between;
      position: relative;
      height: 150px;
      padding: 0 29px 10px;
      background: #fff0;
      align-items: flex-end;
      width: 600px;
    }
    
    nav.menu:before {
      content: "";
      width: 100%;
      height: 150px;
      background: #181818;
      position: absolute;
      left: 0;
      bottom: 0;
      border-radius: 20px;
      z-index: -1;
      box-shadow: 1px 1px 2px 0px #fff;
    }
    
    input {
      display: none;
    }
    
    label {
      text-decoration: none;
      font-family: sans-serif;
      text-transform: uppercase;
      font-size: 14px;
      min-width: 100px;
      height: 100px;
      margin: 10px 10px 20px;
      text-align: center;
      display: inline-grid;
      align-items: end;
      color: #b0bfd8;
      position: relative;
      transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) 0s;
      cursor: pointer;
    }
    
    label:hover {
      color: #fff;
      text-shadow:
        0 0 5px #fff,
        0 0 10px #fff;
    }
    
    input:checked + label {
      color: #fff;
      height: 130px;
    }
    
    .selector {
      --hole: #2196f3;
      background:
        radial-gradient(
          circle at 50% 50%,
          #fff8 30px,
          #fff0 45px,
          #fff 50px,
          #fff0 50px 100%
        ),
        radial-gradient(circle at 50% 50%, var(--hole) 0 45px, #fff0 50px 100%),
        radial-gradient(circle at 50% 75px, #181818 0 70px, #fff0 71px 100%);
      width: 95px;
      height: 95px;
      position: absolute;
      bottom: 47px;
      left: 0;
      z-index: -1;
      transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) 0s;
      border: 19px solid #181818;
      border-radius: 100%;
    }
    
    #m-home:checked ~ .selector {
      left: 23px;
    }
    
    #m-search:checked ~ .selector {
      left: 143px;
      filter: hue-rotate(535deg);
    }
    
    #m-notification:checked ~ .selector {
      left: 263px;
      filter: hue-rotate(950deg);
    }
    
    #m-favorites:checked ~ .selector {
      left: 383px;
      filter: hue-rotate(1580deg);
    }
    
    #m-profile:checked ~ .selector {
      left: 502px;
      filter: hue-rotate(1850deg);
    }
    
    .selector:after {
      content: "";
      position: absolute;
      bottom: -80px;
      width: 80px;
      height: 10px;
      background: #181818;
      left: calc(50% - 40px);
      border-radius: 5px 5px 15px 15px;
    }
    
    input:checked ~ .selector:after {
      box-shadow: 0 -17px 35px 8px var(--hole);
    }
    
    /*** ICONS ***/
    label:before,
    label:after {
      content: "";
      position: absolute;
      box-sizing: border-box;
      transition: all 0.5s ease 0s;
    }
    
    label:hover:before,
    label:hover:after {
      filter: brightness(1.5) drop-shadow(0px 0px 4px #fff);
      transition: all 0.5s ease 0s;
    }
    
    input:checked + label:before,
    input:checked + label:after {
      filter: brightness(1.5) drop-shadow(0px 0px 2px var(--sel));
      transition: all 0.5s ease 0s;
    }
    
    label[for="m-home"]:before {
      width: 40px;
      height: 40px;
      left: 30px;
      top: 30px;
      transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) 0s;
      border-radius: 2px;
      background:
        conic-gradient(from 90deg at 65% 60%, var(--icon) 0 25%, #fff0 0 100%),
        conic-gradient(from 180deg at 35% 60%, var(--icon) 0 25%, #fff0 0 100%),
        conic-gradient(from 135deg at 50% 0%, var(--icon) 0 25%, #fff0 0 100%);
      background-repeat: no-repeat;
      background-size:
        100% 100%,
        100% 100%,
        100% 27px;
    }
    
    label[for="m-home"]:after {
      width: 40px;
      height: 40px;
      left: 30px;
      top: 24px;
      border: 6px solid var(--icon);
      border-right-width: 0;
      border-bottom-width: 0;
      transform: rotate(45deg);
      border-radius: 5px;
      transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) 0s;
    }
    
    label[for="m-search"]:before {
      width: 40px;
      height: 40px;
      left: 20px;
      top: 17px;
      border: 6px solid var(--icon);
      border-radius: 100%;
      transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) 0s;
    }
    
    label[for="m-search"]:after {
      width: 22px;
      height: 9px;
      left: 60px;
      top: 50px;
      transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) 0s;
      background: var(--icon);
      transform-origin: left top;
      transform: rotate(45deg);
      border-radius: 0 10px 10px 0;
    }
    
    label[for="m-notification"]:before {
      width: 50px;
      height: 42px;
      left: 25px;
      top: 20px;
      z-index: 1;
      border-radius: 30px 30px 0 0;
      transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) 0s;
      background:
        linear-gradient(
          90deg,
          #fff0 0 6px,
          var(--icon) 0 calc(100% - 6px),
          #fff0 calc(100% - 6px) 100%
        ),
        conic-gradient(from 135deg at 50% 33%, var(--icon) 0 25%, #fff0 0 100%);
    }
    
    label[for="m-notification"]:after {
      width: 10px;
      height: 57px;
      left: 45px;
      top: 14px;
      z-index: 0;
      transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) 0s;
      background:
        radial-gradient(circle at 50% 6px, var(--icon) 3px, #fff0 4px 100%), #fff0;
      transform-origin: left top;
      border-bottom: 6px solid var(--icon);
      border-radius: 5px;
    }
    
    label[for="m-favorites"]:before {
      width: 50px;
      height: 50px;
      left: 18px;
      top: -9px;
      transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55) 0s;
      background:
        radial-gradient(
          circle at 16px 16px,
          var(--icon) 0 16px,
          #fff0 calc(16px + 1px) 100%
        ),
        radial-gradient(
          circle at 34px 34px,
          var(--icon) 0 16px,
          #fff0 calc(16px + 1px) 100%
        ),
        linear-gradient(45deg, var(--icon) 0 37px, #fff0 38px 100%);
      border-radius: 17px 22px 17px 4px;
      transform: rotate(-45deg);
      transform-origin: center right;
    }
    
    label[for="m-profile"]:before {
      width: 50px;
      height: 54px;
      top: 16px;
      background:
        radial-gradient(circle at 50% 15px, var(--icon) 0 12px, #fff0 13px 100%),
        radial-gradient(circle at 50% 100%, var(--icon) 0 22px, #fff0 23px 100%);
      left: 25px;
      border-radius: 8px;
    }
    
    input:checked + label {
      color: var(--sel);
      text-shadow:
        0 0 5px var(--sel),
        0 0 10px var(--sel);
    }
    
    input:checked + label[for="m-home"] {
      --sel: #39a1f4;
    }
    
    input:checked + label[for="m-search"] {
      --sel: #f48d4e;
    }
    
    input:checked + label[for="m-notification"] {
      --sel: #84a91c;
    }
    
    input:checked + label[for="m-favorites"] {
      --sel: #ff6275;
      height: 125px;
    }
    
    input:checked + label[for="m-profile"] {
      --sel: #9d74ff;
    }
    
    @media only screen and (orientation: portrait) {
      label {
        color: transparent !important;
        text-shadow: none !important;
      }
    }
    

    In conclusion, creating an Iconic Magic Tab Bar with HTML and CSS is a great way to make your navigation stand out. With just a few lines of code, you can achieve smooth animations and glowing effects that bring a polished, professional feel to your project. 🚀✨

    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 glowing navigation tabbar
    Share. Copy Link Twitter Facebook LinkedIn Email WhatsApp
    Previous ArticleHow to make Glowing Animated Search Bar using HTML & CSS
    Next Article How to make Crazy Stunt Loading Animation using HTML & CSS
    Coding Stella
    • Website

    Related Posts

    JavaScript

    How to create Galaxy Animation using HTML CSS and JS

    11 October 2025
    JavaScript

    How to create Animated Ghost Toggle using HTML CSS and JS

    9 October 2025
    HTML & CSS

    How to make Animated Electric Card using HTML & CSS

    4 October 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Trending Post

    Master Frontend in 100 Days Ebook

    2 March 202429K Views

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

    11 January 202426K Views

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

    14 February 202421K Views

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

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

    How to make Facebook Login page using HTML & CSS

    14 January 2024

    How to make Website with Login & Signup form using HTML CSS & JavaScript

    12 January 2024

    Frontend Developer Roadmap 2025: The Complete Guide

    31 January 2025

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

    16 June 2025
    Latest Post

    How to create Galaxy Animation using HTML CSS and JS

    11 October 2025

    How to create Animated Ghost Toggle using HTML CSS and JS

    9 October 2025

    How to make Magnetic Button Hover Effect using HTML & CSS

    6 October 2025

    How to make Animated Electric Card using HTML & CSS

    4 October 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