import { useState } from "react"; import Image from "next/image"; import logo from ""; import Hamburger from "./Hamburger"; import NavItem from "./NavItem"; export default function NavBar() { const [toggle, setToggle] = useState(false); function toggleHamburgerMenu() { setToggle((prevToggle) => !prevToggle); } const navItems = ["", "", "", ""]; return ( <header className="header"> <nav className="nav"> //<Image className="logo" alt="personal logo" src={logo} /> //<h4 className="logo-title"></h4> <ul className="links"> {navItems.map((item, index) => ( <NavItem key={index} onClick={() => setToggle(false)} href={item} className="link" > {item} </NavItem> ))} </ul> <Hamburger toggleHamburgerMenu={toggleHamburgerMenu} toggle={toggle} /> </nav> {toggle && ( <ul className="mobile-links"> {navItems.map((item, index) => ( <NavItem key={index} onClick={() => setToggle(false)} href={item} className="mobile-link" > {item} </NavItem> ))} </ul> )} </header> ); } //Hamburger function Hamburger({ toggleHamburgerMenu, toggle }) { return ( <button id="hamburger-button" aria-label="Mobile Menu Button" onClick={toggleHamburgerMenu} className="hamburger-menu" > <span className={`${toggle && "open"} hamburger-top`}></span> <span className={`${toggle && "open"} hamburger-middle`}></span> <span className={`${toggle && "open"} hamburger-bottom`}></span> </button> ); } export default Hamburger; //NavItem component function NavItem({ onClick, href, className, children }) { return ( <li> <a onClick={onClick} href={`#${href}`} className={className} aria-label="menu links"> {children} </a> </li> ); } export default NavItem;
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter