Refactor navbar css and use details instead of div for better semantics

This commit is contained in:
Antoine Bartuccio 2025-06-02 23:27:25 +02:00
parent 350a92bc44
commit f71fd40d54
Signed by: klmp200
GPG Key ID: E7245548C53F904B
3 changed files with 77 additions and 70 deletions

View File

@ -13,9 +13,18 @@ nav.navbar {
align-items: flex-start; align-items: flex-start;
gap: 0; gap: 0;
margin: .2em; margin: .2em;
>.content[mobile-display="hidden"] {
display: none;
}
>.content[mobile-display="revealed"] {
display: block;
}
} }
> .expand-button {
>.expand-button {
background-color: transparent; background-color: transparent;
display: none; display: none;
position: relative; position: relative;
@ -27,7 +36,7 @@ nav.navbar {
align-items: center; align-items: center;
margin: 0; margin: 0;
> i { >i {
font-size: 1.5em; font-size: 1.5em;
color: white; color: white;
} }
@ -37,17 +46,17 @@ nav.navbar {
} }
} }
> .content { >.content {
@media (min-width: 500px) {display: flex; @media (min-width: 500px) {
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
display: flex !important; display: flex;
} }
> .menu, >.menu,
> .link { >.link {
box-sizing: border-box; box-sizing: border-box;
width: 130px; width: 130px;
height: 52px; height: 52px;
@ -64,76 +73,64 @@ nav.navbar {
&:last-child { &:last-child {
border-radius: 0 0 .6em .6em; border-radius: 0 0 .6em .6em;
> .content { >.content {
box-shadow: 3px 3px 3px 0 #dfdfdf; box-shadow: 3px 3px 3px 0 #dfdfdf;
} }
} }
} }
} }
> .menu > .head, >.menu>.head,
> .link { >.link {
color: white; color: white;
padding: 10px 20px; }
box-sizing: border-box;
>.menu>summary,
>.link {
@media (max-width: 500px) { @media (max-width: 500px) {
padding: 10px; padding: 10px;
} }
} }
>.link {
padding: 10px 20px;
box-sizing: border-box;
}
.link:hover, .link:hover,
.menu:hover { .menu:hover {
background-color: rgba(0, 0, 0, .2); background-color: rgba(0, 0, 0, .2);
} }
> .menu > .head, details.menu {
> .link { cursor: pointer;
color: white; user-select: none;
padding: 10px 20px; z-index: 10;
box-sizing: border-box; align-items: center;
display: inline-block;
@media (max-width: 500px) { summary {
padding: 10px; list-style: none;
display: flex;
align-items: center;
height: 100%;
padding-left: 20px;
padding-right: 20px;
} }
}
.link:hover, summary::-webkit-details-marker {
.menu:hover {
background-color: rgba(0, 0, 0, .2);
}
> .menu:hover > .content,
> .menu > .head:hover + .content,
> .menu > .content:hover {
display: flex;
}
> .menu {
display: flex;
position: relative;
> .content {
z-index: 10;
display: none; display: none;
position: absolute; }
top: 100%;
background-color: white; ul.content {
margin: 0;
list-style-type: none; list-style-type: none;
width: 130px;
box-shadow: 3px 3px 3px 0 #dfdfdf; box-shadow: 3px 3px 3px 0 #dfdfdf;
flex-direction: column; background: white;
margin: 0;
@media (max-width: 500px) { >li>a {
position: absolute;
flex-direction: row;
flex-wrap: wrap;
width: 100%;
box-shadow: inset 3px 3px 3px 0 #dfdfdf;
}
> li > a {
display: flex; display: flex;
padding: 15px 20px; padding: 15px 20px;

View File

@ -122,10 +122,20 @@
{% block script %} {% block script %}
<script> <script>
const menuItems = document.querySelectorAll(".navbar details[name='navbar'].menu");
for (const item of menuItems){
item.addEventListener("mouseover", () => {
item.setAttribute("open", "");
})
item.addEventListener("mouseout", () => {
item.removeAttribute("open");
})
}
function showMenu() { function showMenu() {
let navbar = document.getElementById("navbar-content"); let navbar = document.getElementById("navbar-content");
const current = navbar.style.getPropertyValue("display"); const current = navbar.getAttribute("mobile-display");
navbar.style.setProperty("display", current === "none" ? "block" : "none"); navbar.setAttribute("mobile-display", current === "hidden" ? "revealed" : "hidden")
} }
document.addEventListener("keydown", (e) => { document.addEventListener("keydown", (e) => {

View File

@ -1,47 +1,47 @@
<nav class="navbar"> <nav class="navbar">
<button class="expand-button" onclick="showMenu()"><i class="fa fa-bars"></i></button> <button class="expand-button" onclick="showMenu()"><i class="fa fa-bars"></i></button>
<div id="navbar-content" class="content" style="display: none;"> <div id="navbar-content" class="content" mobile-display="hidden">
<a class="link" href="{{ url('core:index') }}">{% trans %}Main{% endtrans %}</a> <a class="link" href="{{ url('core:index') }}">{% trans %}Main{% endtrans %}</a>
<div class="menu"> <details name="navbar" class="menu">
<span class="head">{% trans %}Associations & Clubs{% endtrans %}</span> <summary class="head">{% trans %}Associations & Clubs{% endtrans %}</summary>
<ul class="content"> <ul class="content">
<li><a href="{{ url('core:page', page_name='ae') }}">{% trans %}AE{% endtrans %}</a></li> <li><a href="{{ url('core:page', page_name='ae') }}">{% trans %}AE{% endtrans %}</a></li>
<li><a href="{{ url('core:page', page_name='clubs') }}">{% trans %}AE's clubs{% endtrans %}</a></li> <li><a href="{{ url('core:page', page_name='clubs') }}">{% trans %}AE's clubs{% endtrans %}</a></li>
<li><a href="{{ url('core:page', page_name='utbm-associations') }}">{% trans %}Others UTBM's Associations{% endtrans %}</a></li> <li><a href="{{ url('core:page', page_name='utbm-associations') }}">{% trans %}Others UTBM's Associations{% endtrans %}</a></li>
</ul> </ul>
</div> </details>
<div class="menu"> <details name="navbar" class="menu">
<span class="head">{% trans %}Events{% endtrans %}</span> <summary class="head">{% trans %}Events{% endtrans %}</summary>
<ul class="content"> <ul class="content">
<li><a href="{{ url('election:list') }}">{% trans %}Elections{% endtrans %}</a></li> <li><a href="{{ url('election:list') }}">{% trans %}Elections{% endtrans %}</a></li>
<li><a href="{{ url('core:page', page_name='ga') }}">{% trans %}Big event{% endtrans %}</a></li> <li><a href="{{ url('core:page', page_name='ga') }}">{% trans %}Big event{% endtrans %}</a></li>
</ul> </ul>
</div> </details>
<a class="link" href="{{ url('forum:main') }}">{% trans %}Forum{% endtrans %}</a> <a class="link" href="{{ url('forum:main') }}">{% trans %}Forum{% endtrans %}</a>
<a class="link" href="{{ url('sas:main') }}">{% trans %}Gallery{% endtrans %}</a> <a class="link" href="{{ url('sas:main') }}">{% trans %}Gallery{% endtrans %}</a>
<a class="link" href="{{ url('eboutic:main') }}">{% trans %}Eboutic{% endtrans %}</a> <a class="link" href="{{ url('eboutic:main') }}">{% trans %}Eboutic{% endtrans %}</a>
<div class="menu"> <details name="navbar" class="menu">
<span class="head">{% trans %}Services{% endtrans %}</span> <summary class="head">{% trans %}Services{% endtrans %}</summary>
<ul class="content"> <ul class="content">
<li><a href="{{ url('matmat:search_clear') }}">{% trans %}Matmatronch{% endtrans %}</a></li> <li><a href="{{ url('matmat:search_clear') }}">{% trans %}Matmatronch{% endtrans %}</a></li>
<li><a href="{{ url('core:file_list') }}">{% trans %}Files{% endtrans %}</a></li> <li><a href="{{ url('core:file_list') }}">{% trans %}Files{% endtrans %}</a></li>
<li><a href="{{ url('pedagogy:guide') }}">{% trans %}Pedagogy{% endtrans %}</a></li> <li><a href="{{ url('pedagogy:guide') }}">{% trans %}Pedagogy{% endtrans %}</a></li>
</ul> </ul>
</div> </details>
<div class="menu"> <details name="navbar" class="menu">
<span class="head">{% trans %}My Benefits{% endtrans %}</span> <summary class="head">{% trans %}My Benefits{% endtrans %}</summary>
<ul class="content"> <ul class="content">
<li><a href="{{ url('core:page', page_name='partenaires')}}">{% trans %}Sponsors{% endtrans %}</a></li> <li><a href="{{ url('core:page', page_name='partenaires')}}">{% trans %}Sponsors{% endtrans %}</a></li>
<li><a href="{{ url('core:page', page_name='avantages') }}">{% trans %}Subscriber benefits{% endtrans %}</a></li> <li><a href="{{ url('core:page', page_name='avantages') }}">{% trans %}Subscriber benefits{% endtrans %}</a></li>
</ul> </ul>
</div> </details>
<div class="menu"> <details name="navbar" class="menu">
<span class="head">{% trans %}Help{% endtrans %}</span> <summary class="head">{% trans %}Help{% endtrans %}</summary>
<ul class="content"> <ul class="content">
<li><a href="{{ url('core:page', page_name='FAQ') }}">{% trans %}FAQ{% endtrans %}</a></li> <li><a href="{{ url('core:page', page_name='FAQ') }}">{% trans %}FAQ{% endtrans %}</a></li>
<li><a href="{{ url('core:page', 'contacts') }}">{% trans %}Contacts{% endtrans %}</a></li> <li><a href="{{ url('core:page', 'contacts') }}">{% trans %}Contacts{% endtrans %}</a></li>
<li><a href="{{ url('core:page', page_name='Index') }}">{% trans %}Wiki{% endtrans %}</a></li> <li><a href="{{ url('core:page', page_name='Index') }}">{% trans %}Wiki{% endtrans %}</a></li>
</ul> </ul>
</div> </details>
</div> </div>
</nav> </nav>