I am working on creating a responsive navbar that has a dropdown in it. Below is my code:
I have the CSS code and media queries inline for testing purpose. So it might look lengthy.
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> <link href="../../themes/bootstrap/starterkits/THEMENAME/css/style.css" rel="stylesheet" /> <link href="//fonts.googleapis.com/css?family=Raleway" rel="stylesheet" type="text/css" /> <style type="text/css">body {margin:0;font-family:Arial} .topnav { overflow: hidden; background-color: #ffffff; } .home { float: left; overflow: hidden; } .topnav a { float: right; display: block; color: #000000; text-align: center; padding: 14px 16px; text-decoration: none; font-size: 17px; } .active { background-color: #4CAF50; color: white; } .topnav .icon { display: none; } .dropdown { float: right; overflow: hidden; } .dropdown .dropbtn { font-size: 17px; border: none; outline: none; color: black; padding: 14px 16px; background-color: inherit; margin: 0; } .dropdown-content { display: none; position: absolute; background-color: #ffffff; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1; } .dropdown-content a { float: none; color: black; padding: 12px 16px; text-decoration: none; display: block; text-align: left; } .topnav a:hover, .dropdown:hover .dropbtn { background-color: #555; color: #D5DBDB; } .dropdown-content a:hover { background-color: #ddd; color: black; } .dropdown:hover .dropdown-content { display: block; } @media screen and (max-width: 600px) { .topnav a:not(:first-child), .dropdown .dropbtn { display: none; } .topnav a.icon { float: right; display: block; } } @media screen and (max-width: 600px) { .topnav.responsive {position: relative;} .topnav.responsive .icon { position: absolute; right: 0; top: 0; } .topnav.responsive a { float: none; display: block; text-align: left; } .topnav.responsive .dropdown {float: none;} .topnav.responsive .dropdown-content {position: relative;} .topnav.responsive .dropdown .dropbtn { display: block; width: 100%; text-align: left; } } </style> <div class="panel"> <div class="topnav" id="myTopnav"> <div class="home"><a href="#"><img src="../../sites/default/files/logo_0.png" /></a></div> <div class="dropdown"> <div class="dropbtn"><a href="#">Programs</a></div> <div class="dropdown-content"><a href="#">Success</a></div> </div> <a href="#">Contact</a> <a href="#">Families</a> <a href="#">About</a> <a class="icon" href="javascript:void(0);" onclick="myFunction()" style="font-size:15px;">☰</a></div> </div> <script> function myFunction() { var x = document.getElementById("myTopnav"); if (x.className === "topnav") { x.className += " responsive"; } else { x.className = "topnav"; } } </script>
The menu contains the Home logo image at the left and 4 menu items on the right.
After the active ‘home’ link is the ‘Programs’ drop-button that should have a dropdown ‘Success’ underneath it. This dropdown is not loading correctly and the design is distorted. Any help to fix this?
Advertisement
Answer
You don’t need your dropdown button to be a div
tag, it should be a button
tag.
So change
<div class="dropbtn"><a href="#">Programs</a></div>
to
<button class="dropbtn"><a style="padding: 0px" href="#">Programs</a></button>
This should the drop-down load correctly and inline with the other items in the navbar. Hopefully this helps you get on the right track without changing most of your original code.
.topnav { overflow: hidden; background-color: #ffffff; } .home { float: left; overflow: hidden; } .topnav a { float: right; display: block; color: #000000; text-align: center; padding: 14px 16px; text-decoration: none; font-size: 17px; } .active { background-color: #4CAF50; color: white; } .topnav .icon { display: none; } .dropdown { float: right; overflow: hidden; } .dropdown .dropbtn { font-size: 17px; border: none; outline: none; color: black; padding: 14px 16px; background-color: inherit; margin: 0; } .dropdown-content { display: none; position: absolute; background-color: #ffffff; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1; } .dropdown-content a { float: none; color: black; padding: 12px 16px; text-decoration: none; display: block; text-align: left; } .topnav a:hover, .dropdown:hover .dropbtn { background-color: #555; color: #D5DBDB; } .dropdown-content a:hover { background-color: #ddd; color: black; } .dropdown:hover .dropdown-content { display: block; } @media screen and (max-width: 600px) { .topnav a:not(:first-child), .dropdown .dropbtn { display: none; } .topnav a.icon { float: right; display: block; } } @media screen and (max-width: 600px) { .topnav.responsive {position: relative;} .topnav.responsive .icon { position: absolute; right: 0; top: 0; } .topnav.responsive a { float: none; display: block; text-align: left; } .topnav.responsive .dropdown {float: none;} .topnav.responsive .dropdown-content {position: relative;} .topnav.responsive .dropdown .dropbtn { display: block; width: 100%; text-align: left; } }
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> <link href="../../themes/bootstrap/starterkits/THEMENAME/css/style.css" rel="stylesheet" /> <link href="//fonts.googleapis.com/css?family=Raleway" rel="stylesheet" type="text/css" /> <style type="text/css">body {margin:0;font-family:Arial} </style> <div class="panel"> <div class="topnav" id="myTopnav"> <div class="home"><a href="#"><img src="../../sites/default/files/logo_0.png" /></a></div> <div class="dropdown"> <button class="dropbtn"><a style="padding: 0px" href="#">Programs</a></button> <div class="dropdown-content"><a href="#">Success</a></div> </div> <a href="#">Contact</a> <a href="#">Families</a> <a href="#">About</a> <a class="icon" href="javascript:void(0);" onclick="myFunction()" style="font-size:15px;">☰</a></div> </div> <script> function myFunction() { var x = document.getElementById("myTopnav"); if (x.className === "topnav") { x.className += " responsive"; } else { x.className = "topnav"; } } </script>