1
0
forked from HPR/hpr_generator

Added hamburger menu for narrow devices

This commit is contained in:
Lee Hanken
2025-08-08 16:06:08 +01:00
parent 3991c95533
commit a29585dd82
5 changed files with 105 additions and 1 deletions

View File

@@ -91,7 +91,7 @@ body > nav ul {
margin: 0; margin: 0;
padding: 0.25rem; padding: 0.25rem;
} }
body > nav ul li { body > nav ul li {
display: inline-block; display: inline-block;
background-color: inherit; background-color: inherit;
color: inherit; color: inherit;
@@ -513,3 +513,73 @@ fieldset > input {
flex: 1; flex: 1;
} }
} }
@media (max-width: 480px) {
#main_menu {
display: none;
position: absolute;
top: 100%;
left: 0;
width: 100%;
z-index: 1000;
}
.hamburger {
display: block ! important;
}
#main_menu.is_open {
display: block;
position: relative;
left: 0;
width: 100%;
}
#main_menu.is_open ul {
width: fit-content;
margin: 0 auto;
}
#main_menu.is_open ul li {
display: block;
margin-bottom: 0.5rem;
}
}
.hamburger {
float: right;
background-color: var(--background-secondary);
border: none;
display: none;
}
.icon {
display: block;
mask-size: contain;
background-color: var(--link-secondary);
height: var(--font-size-default);
padding: 0.25rem;
border: solid 1px var(--link-secondary);
transition: background-color 0.2s ease;
}
.icon:hover {
background-color: var(--link-secondary-hover);
}
.hamburger_icon {
display: block;
}
.hamburger_icon.is_open {
display: none ! important;
}
.close_icon {
display: none;
}
.close_icon.is_open {
display: block ! important;
}

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z"/></svg>

After

Width:  |  Height:  |  Size: 307 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 4H21V6H3V4ZM3 11H21V13H3V11ZM3 18H21V20H3V18Z"/></svg>

After

Width:  |  Height:  |  Size: 146 B

27
public_html/js/menu.js Normal file
View File

@@ -0,0 +1,27 @@
const hamburger = document.querySelector('.hamburger');
const mainNav = document.querySelector('#main_menu');
const hamburgerIcon = document.querySelector('.hamburger_icon');
const closeIcon = document.querySelector('.close_icon');
hamburger.addEventListener('click', function() {
const isOpen = this.getAttribute('aria-expanded') === 'true';
this.setAttribute('aria-expanded', !isOpen);
mainNav.classList.toggle('is_open');
hamburgerIcon.classList.toggle('is_open');
closeIcon.classList.toggle('is_open');
if (!isOpen) {
const firstLink = mainNav.querySelector('a');
if (firstLink) firstLink.focus();
}
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape' && mainNav.classList.contains('is_open')) {
mainNav.classList.remove('is_open');
hamburger.setAttribute('aria-expanded', 'false');
hamburger.focus();
}
});

View File

@@ -40,6 +40,10 @@
<a href="<!--% absolute_path(baseurl) %-->sitemap.html#main_content">Site Map</a> <a href="<!--% absolute_path(baseurl) %-->sitemap.html#main_content">Site Map</a>
- <a href="#main_content">skip to main content</a> - <a href="#main_content">skip to main content</a>
</nav> </nav>
<button type="button" id="hamburger-menu" class="hamburger" aria-controls="main-navigation" aria-expanded="false" aria-label="Toggle navigation menu">
<i aria-hidden="true" class="icon hamburger_icon" style="mask: url('<!--% absolute_path(baseurl) %-->images/icons/menu-line.svg') no-repeat center;"></i>
<i aria-hidden="true" class="icon close_icon" style="mask: url('<!--% absolute_path(baseurl) %-->images/icons/close-line.svg') no-repeat center;"></i>
</button>
<nav id="main_menu" class="menu" role="navigation"> <nav id="main_menu" class="menu" role="navigation">
<!--% INCLUDE "navigation-main.tpl.html" %--> <!--% INCLUDE "navigation-main.tpl.html" %-->
</nav> </nav>
@@ -77,5 +81,6 @@
<div id="generated_by">This page was <a href="https://repo.anhonesthost.net/HPR/hpr_generator">generated</a> by <a href="mailto:<!--% generator_email %-->"><!--% generator_name %--></a> at <time dateTime="<!--% format_iso8601_date(date.now) %-->"><!--% format_feed_date(date.now) %--></time></em> <div id="generated_by">This page was <a href="https://repo.anhonesthost.net/HPR/hpr_generator">generated</a> by <a href="mailto:<!--% generator_email %-->"><!--% generator_name %--></a> at <time dateTime="<!--% format_iso8601_date(date.now) %-->"><!--% format_feed_date(date.now) %--></time></em>
</div> </div>
</footer> </footer>
<script src="/js/menu.js"></script>
</body> </body>
</html> </html>