Skip to content

Commit 8ec7a10

Browse files
Add: Responsive Navbar structure
1 parent fc87793 commit 8ec7a10

File tree

2 files changed

+176
-72
lines changed

2 files changed

+176
-72
lines changed

components/Nav.js

Lines changed: 40 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,58 @@
11
import Link from "next/link";
2+
import { useState } from "react";
3+
import styles from "../styles/ResponsiveNavbar.module.css";
24

35
export default function Nav() {
6+
const [active, setActive] = useState(false);
7+
8+
const toggleActive = () => {
9+
setActive((active) => !active);
10+
};
11+
412
return (
5-
<nav className="nav">
6-
<div className="navContainer">
7-
<Link href="/">
8-
<img
9-
className="logo"
10-
src="/images/web-dev-path-logo-small.png"
11-
alt="Logo"
12-
/>
13-
</Link>
14-
<div className="linksContainer">
15-
<ul className="links">
16-
<li>
13+
<header className={styles.header}>
14+
<div className={`${styles.navContainer} ${styles.row}`}>
15+
<div className={styles.align}>
16+
<Link href="/">
17+
<img
18+
className={`${styles.img} ${styles.logo}`}
19+
src="/images/web-dev-path-logo-small.png"
20+
alt="Logo"
21+
/>
22+
</Link>
23+
<button
24+
className={styles.navToggle}
25+
aria-label="open navigation"
26+
onClick={toggleActive}
27+
>
28+
<span className={styles.hamburger} />
29+
</button>
30+
</div>
31+
<nav className={`${active ? styles.navVisible : styles.nav}`}>
32+
<ul className={styles.navList}>
33+
<li className={styles.navItem}>
1734
<Link href="/about-us">
18-
<a className="link">About Us</a>
35+
<a className={styles.navLink}>About Us</a>
1936
</Link>
2037
</li>
21-
<li>
22-
<Link href="/active-projects">
23-
<a className="link">Active Projects</a>
38+
<li className={styles.navItem}>
39+
<Link href="https://github.com/MarianaSouza/web-dev-path">
40+
<a className={styles.navLink}>Github Repository</a>
2441
</Link>
2542
</li>
26-
<li>
43+
<li className={styles.navItem}>
2744
<Link href="/blog/index">
28-
<a className="link">Blog</a>
45+
<a className={styles.navLink}>Blog</a>
2946
</Link>
3047
</li>
31-
<li>
32-
<Link className="link" href="/contact-us">
33-
<a className="link">Contact Us</a>
48+
<li className={styles.navItem}>
49+
<Link href="/contact-us">
50+
<a className={styles.navLink}>Contact Us</a>
3451
</Link>
3552
</li>
3653
</ul>
37-
</div>
54+
</nav>
3855
</div>
39-
<style jsx>
40-
{`
41-
.nav {
42-
width: 100%;
43-
}
44-
45-
.logo {
46-
padding: 1rem;
47-
border-radius: 100%;
48-
}
49-
50-
.navContainer {
51-
margin: 0 auto;
52-
display: flex;
53-
align-items: center;
54-
justify-content: space-between;
55-
56-
max-width: 800px;
57-
}
58-
59-
.linksContainer {
60-
flex-basis: 50%;
61-
}
62-
63-
.links {
64-
list-style: none;
65-
display: flex;
66-
justify-content: space-between;
67-
align-items: center;
68-
margin: 0;
69-
padding-left: 0;
70-
}
71-
72-
.link {
73-
text-decoration: none;
74-
color: black;
75-
}
76-
77-
.link:hover {
78-
opacity: 70%;
79-
}
80-
81-
@media (max-width: 768px) {
82-
.links {
83-
flex-direction: column;
84-
}
85-
}
86-
`}
87-
</style>
88-
</nav>
56+
</header>
8957
);
9058
}

styles/ResponsiveNavbar.module.css

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
.img {
2+
max-width: 100%;
3+
}
4+
5+
.navContainer {
6+
width: 80%;
7+
max-width: 800px;
8+
margin: 0 auto;
9+
position: relative;
10+
}
11+
12+
.header {
13+
width: 100%;
14+
padding: 1em 0;
15+
}
16+
17+
.align {
18+
display: flex;
19+
align-items: center;
20+
}
21+
22+
.nav {
23+
width: 100%;
24+
}
25+
26+
.navToggle {
27+
cursor: pointer;
28+
border: 0;
29+
width: 3em;
30+
height: 3em;
31+
padding: 0;
32+
border-radius: 50%;
33+
color: black;
34+
transition: opacity 250ms ease;
35+
position: absolute;
36+
right: 0;
37+
}
38+
39+
.navToggle:hover,
40+
.navToggle:focus {
41+
opacity: 0.75;
42+
}
43+
44+
.hamburger {
45+
width: 50%;
46+
position: relative;
47+
}
48+
49+
.hamburger,
50+
.hamburger::before,
51+
.hamburger::after {
52+
display: block;
53+
margin: 0 auto;
54+
height: 3px;
55+
background: black;
56+
}
57+
58+
.hamburger::before,
59+
.hamburger::after {
60+
content: "";
61+
width: 100%;
62+
}
63+
64+
.hamburger::before {
65+
transform: translateY(-6px);
66+
}
67+
68+
.hamburger::after {
69+
transform: translateY(3px);
70+
}
71+
72+
.nav {
73+
visibility: hidden;
74+
height: 0;
75+
position: absolute;
76+
font-size: 1rem;
77+
}
78+
79+
.navVisible {
80+
visibility: visible;
81+
height: auto;
82+
position: relative;
83+
text-align: end;
84+
}
85+
86+
.navList {
87+
margin: 0;
88+
padding: 0;
89+
list-style: none;
90+
}
91+
92+
.navItem {
93+
margin-top: 0.75em;
94+
}
95+
96+
.navLink {
97+
text-decoration: none;
98+
color: black;
99+
}
100+
101+
.navLink:focus,
102+
.navLink:hover {
103+
opacity: 0.65;
104+
}
105+
106+
.logo {
107+
border-radius: 50%;
108+
}
109+
110+
@media (min-width: 768px) {
111+
.navToggle {
112+
display: none;
113+
}
114+
115+
.nav {
116+
visibility: visible;
117+
display: flex;
118+
align-items: center;
119+
justify-content: flex-end;
120+
height: auto;
121+
position: relative;
122+
}
123+
124+
.navList {
125+
display: flex;
126+
}
127+
128+
.navItem {
129+
margin: 0 0 0 1.5em;
130+
}
131+
132+
.row {
133+
display: flex;
134+
justify-content: space-between;
135+
}
136+
}

0 commit comments

Comments
 (0)