Skip to content

Commit 6fc1dd1

Browse files
committed
update v1.2
1 parent 170281b commit 6fc1dd1

3 files changed

Lines changed: 136 additions & 9 deletions

File tree

index.html

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,22 @@
2626
<nav>
2727
<div class="container nav-container">
2828
<div class="logo">MS.</div>
29-
<button class="theme-toggle" id="theme-toggle" aria-label="Basculer le mode">
30-
<i class="fas fa-moon"></i>
31-
</button>
29+
30+
<ul class="nav-menu" id="nav-menu">
31+
<li><a href="#skills">Compétences</a></li>
32+
<li><a href="#experience">Expériences</a></li>
33+
<li><a href="#education">Formation</a></li>
34+
<li><a href="#contact">Contact</a></li>
35+
</ul>
36+
37+
<div class="nav-actions">
38+
<button class="theme-toggle" id="theme-toggle" aria-label="Basculer le mode">
39+
<i class="fas fa-moon"></i>
40+
</button>
41+
<button class="hamburger" id="hamburger" aria-label="Ouvrir le menu">
42+
<i class="fas fa-bars"></i>
43+
</button>
44+
</div>
3245
</div>
3346
</nav>
3447

script.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,44 @@
11
// Theme Toggle Logic
22
const themeToggle = document.getElementById('theme-toggle');
3+
const hamburger = document.getElementById('hamburger');
4+
const navMenu = document.getElementById('nav-menu');
35
const body = document.body;
4-
const icon = themeToggle.querySelector('i');
6+
const themeIcon = themeToggle.querySelector('i');
7+
const menuIcon = hamburger.querySelector('i');
58

6-
// Check for saved theme
9+
// Theme Logic
710
const savedTheme = localStorage.getItem('theme');
811
if (savedTheme === 'dark') {
912
body.classList.add('dark-mode');
10-
icon.classList.replace('fa-moon', 'fa-sun');
13+
themeIcon.classList.replace('fa-moon', 'fa-sun');
1114
}
1215

1316
themeToggle.addEventListener('click', () => {
1417
body.classList.toggle('dark-mode');
15-
1618
if (body.classList.contains('dark-mode')) {
1719
localStorage.setItem('theme', 'dark');
18-
icon.classList.replace('fa-moon', 'fa-sun');
20+
themeIcon.classList.replace('fa-moon', 'fa-sun');
1921
} else {
2022
localStorage.setItem('theme', 'light');
21-
icon.classList.replace('fa-sun', 'fa-moon');
23+
themeIcon.classList.replace('fa-sun', 'fa-moon');
2224
}
2325
});
2426

27+
// Hamburger Menu Logic
28+
hamburger.addEventListener('click', () => {
29+
navMenu.classList.toggle('active');
30+
menuIcon.classList.toggle('fa-bars');
31+
menuIcon.classList.toggle('fa-times');
32+
});
33+
34+
// Close menu when clicking links
35+
document.querySelectorAll('.nav-menu a').forEach(link => {
36+
link.addEventListener('click', () => {
37+
navMenu.classList.remove('active');
38+
menuIcon.classList.replace('fa-times', 'fa-bars');
39+
});
40+
});
41+
2542
// Scroll Reveal Animation
2643
const revealElements = document.querySelectorAll('[data-reveal]');
2744

style.css

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
html {
2+
scroll-behavior: smooth;
3+
scroll-padding-top: 90px;
4+
}
5+
16
:root {
27
/* Light Mode (Default) - Professional & Soft */
38
--primary: #2563eb;
@@ -117,6 +122,98 @@ nav {
117122
opacity: 0.8;
118123
}
119124

125+
.nav-actions {
126+
display: flex;
127+
align-items: center;
128+
gap: 1rem;
129+
}
130+
131+
.nav-menu {
132+
display: flex;
133+
list-style: none;
134+
gap: 2.5rem;
135+
}
136+
137+
.nav-menu a {
138+
text-decoration: none;
139+
color: var(--text-main);
140+
font-weight: 500;
141+
font-size: 0.95rem;
142+
transition: color 0.3s ease;
143+
position: relative;
144+
}
145+
146+
.nav-menu a:hover {
147+
color: var(--primary);
148+
}
149+
150+
.nav-menu a::after {
151+
content: '';
152+
position: absolute;
153+
bottom: -5px;
154+
left: 0;
155+
width: 0;
156+
height: 2px;
157+
background: var(--primary);
158+
transition: width 0.3s ease;
159+
}
160+
161+
.nav-menu a:hover::after {
162+
width: 100%;
163+
}
164+
165+
.hamburger {
166+
display: none;
167+
background: none;
168+
border: none;
169+
color: var(--text-main);
170+
font-size: 1.5rem;
171+
cursor: pointer;
172+
padding: 0.5rem;
173+
z-index: 1001;
174+
}
175+
176+
@media (max-width: 768px) {
177+
.hamburger {
178+
display: block;
179+
}
180+
181+
.nav-menu {
182+
position: absolute;
183+
top: 100%;
184+
left: 0;
185+
width: 100%;
186+
background: var(--bg-main);
187+
flex-direction: column;
188+
align-items: center;
189+
padding: 2rem 0;
190+
gap: 1.5rem;
191+
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
192+
border-bottom: 1px solid var(--glass-border);
193+
194+
/* Reveal animation */
195+
pointer-events: none;
196+
opacity: 0;
197+
transform: translateY(-15px);
198+
transition: all 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);
199+
}
200+
201+
.nav-menu.active {
202+
pointer-events: all;
203+
opacity: 1;
204+
transform: translateY(0);
205+
}
206+
207+
.nav-menu li {
208+
margin: 0;
209+
}
210+
211+
.nav-menu a {
212+
font-size: 1.1rem;
213+
font-weight: 600;
214+
}
215+
}
216+
120217
.theme-toggle {
121218
background: var(--primary);
122219
color: #fff;

0 commit comments

Comments
 (0)