This is the 12th day of my participation in Gwen Challenge
Everybody is good! In this tutorial, we’ll use HTML, CSS, and some javascript to build responsive navigation bars and breadcrumb menus.
This is what it looks like,
So, let’s start with HTML,
<header class="header">
<nav class="navbar">
<a href="#" class="nav-logo">WebDev.</a>
<ul class="nav-menu">
<li class="nav-item">
<a href="#" class="nav-link">Services</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Blog</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">About</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Contact</a>
</li>
</ul>
<div class="hamburger">
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
</div>
</nav>
</header>
Copy the code
Here, we have
- Header works with header’s class as a container for our navigation bar
- Nav and navbar class
- A link to the class with the nav-logo
- Class of ul and nav-menu
- Ul has four classes for Li and Nav-item
- Inside each nav-item, we have a class for nav-link
- For our bread, I added a Hamburger class to the div, three spans from the category, and a bar class
This is the HTML we need
Now let’s add CSS
Here, we’ll import the required fonts and add some basic CSS to reset all the default styles.
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital, WGHT @ 0500; 1400 & display = swap ');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
font-size: 62.5%;
font-family: 'Roboto', sans-serif;
}
li {
list-style: none;
}
a {
text-decoration: none;
}
Copy the code
Now let’s add styles to each element,
- The header and the navbar
.header{
border-bottom: 1px solid #E2E8F0;
}
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5 rem;
}
Copy the code
- Mr. Hamburger style
.hamburger {
display: none;
}
.bar {
display: block;
width: 25px;
height: 3px;
margin: 5px auto;
-webkit-transition: all 0.3 s ease-in-out;
transition: all 0.3 s ease-in-out;
background-color: # 101010;
}
Copy the code
- Basic styles for other elements
.nav-menu {
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-item {
margin-left: 5rem;
}
.nav-link{
font-size: 1.6 rem;
font-weight: 400;
color: # 475569;
}
.nav-link:hover{
color: #482ff7;
}
.nav-logo {
font-size: 2.1 rem;
font-weight: 500;
color: #482ff7;
}
Copy the code
After that, it should look something like this
But it’s not reactive yet, so let’s add a media query.
@media only screen and (max-width: 768px) {
.nav-menu {
position: fixed;
left: -100%;
top: 5rem;
flex-direction: column;
background-color: #fff;
width: 100%;
border-radius: 10px;
text-align: center;
transition: 0.3 s;
box-shadow:
0 10px 27px rgba(0.0.0.0.05);
}
.nav-menu.active {
left: 0;
}
.nav-item {
margin: 2.5 rem 0;
}
.hamburger {
display: block;
cursor: pointer; }}Copy the code
This media query does nav-menu by setting position: fixed; left: -100%; To hide our content. In addition, we will set hamburger to display: block; So now you can see. We also added an additional class called. Nav-menu. active to set left: 0; On the nav – menu. Now we will need to add javascript, which will add this class to the navigation menu when we click on the hamburger.
Let’s add javascript
const hamburger = document.querySelector(".hamburger");
const navMenu = document.querySelector(".nav-menu");
hamburger.addEventListener("click", mobileMenu);
function mobileMenu() {
hamburger.classList.toggle("active");
navMenu.classList.toggle("active");
}
Copy the code
Here, the function mobileMenu() adds an active class to our hamburger and our nav-menu, which opens our move menu. When clicked, we can use the activity class on the hamburger to create the X animation Hamburger. So do it now.
// Inside the Media Query.
.hamburger.active .bar:nth-child(2) {
opacity: 0;
}
.hamburger.active .bar:nth-child(1) {
transform: translateY(8px) rotate(45deg);
}
.hamburger.active .bar:nth-child(3) {
transform: translateY(-8px) rotate(-45deg);
}
Copy the code
Now it should look something like this
But there’s a problem, the burger menu doesn’t close when we click the link. Now let’s add it
const navLink = document.querySelectorAll(".nav-link");
navLink.forEach(n= > n.addEventListener("click", closeMenu));
function closeMenu() {
hamburger.classList.remove("active");
navMenu.classList.remove("active");
}
Copy the code
The closeMenu() function removes the active class from both nav-menu and Hamburger, closing our move menu.
So we built a responsive navigation bar and burger menu using HTML CSS and javascript. Hope you like it 😀
As a free download
Pay attention to the author wechat public number [la la la want biU point what] reply [responsive navigation bar] free access
I will continue to update similar free fun H5 games, Java games, fun, practical projects and software, and so on
More relevant articles and my contact information are listed here:
Github.com/wanghao221 gitee.com/haiyongcsdn…
Finally, don’t forget to support ❤️ or 📑