diff --git a/app/javascript/controllers/navigation_controller.js b/app/javascript/controllers/navigation_controller.js index 12fd2585be7bcb8a7c8c2dc9466b7133216beb8e..7a1fc4144497f21c2273a7dffdbfa99e128ce9a1 100644 --- a/app/javascript/controllers/navigation_controller.js +++ b/app/javascript/controllers/navigation_controller.js @@ -4,7 +4,17 @@ export default class extends Controller { static targets = [ "mobileMenu" ]; toggleMenu() { - this.mobileMenuTarget.classList.toggle("hidden"); + const menu = this.mobileMenuTarget; + if (menu.classList.contains('hidden')) { + menu.classList.remove('hidden'); + menu.classList.remove('motion-safe:animate-slideOut'); + menu.classList.add('motion-safe:animate-slideIn'); + } else { + menu.classList.remove('motion-safe:animate-slideIn'); + menu.classList.add('motion-safe:animate-slideOut'); + setTimeout(() => { menu.classList.add('hidden'); }, + window.matchMedia("(prefers-reduced-motion: reduce)").matches ? + 0 : 300); // Should match the duration in tailwind.config.js + } } } - diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 703f96f23ddfecae187de363d64eccc22a98cda8..b7f7313333b658b6a5630ba045dee402a8706de3 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -12,8 +12,8 @@ </head> <body <%= tag.attributes(body_data_attributes) %>> - <nav class="bg-slate-100 text-gray-700 shadow" data-controller="navigation"> - <div class="container mx-auto px-4 py-4 flex justify-between items-center"> + <nav class="bg-slate-100 text-gray-700 shadow relative" data-controller="navigation"> + <div class="relative bg-slate-100 z-50 container mx-auto px-4 py-4 flex justify-between items-center"> <div class="flex items-center space-x-4"> <h1 class="text-xl font-bold text-black"><%= link_to 're:scheduled', '/', class: "!no-underline" %></h1> <div class="hidden md:flex space-x-4"> @@ -42,7 +42,7 @@ </button> </div> </div> - <div id="mobile-menu" class="container mx-auto hidden md:hidden space-y-4 px-8 pb-4" data-navigation-target="mobileMenu"> + <div id="mobile-menu" class="absolute top-18 bg-slate-100 z-20 container mx-auto hidden md:hidden space-y-4 px-8 pb-4 shadow" data-navigation-target="mobileMenu"> <%= link_to 'Conferences', conferences_path, class: 'block hover:text-gray-900' %> <%= link_to 'Assignments', assignments_path, class: 'block hover:text-gray-900' %> <hr> diff --git a/config/tailwind.config.js b/config/tailwind.config.js index d6ad82c0d8d69152977d698a30db66d15fed4a77..06dd449652a9224fd86e90e08ccd7448d3bb7fde 100644 --- a/config/tailwind.config.js +++ b/config/tailwind.config.js @@ -9,6 +9,20 @@ module.exports = { ], theme: { extend: { + keyframes: { + slideIn: { + '0%': { transform: 'translateY(-105%)' }, + '100%': { transform: 'translateY(0)' }, + }, + slideOut: { + '0%': { transform: 'translateY(0)' }, + '100%': { transform: 'translateY(-105%)' }, + }, + }, + animation: { + slideIn: 'slideIn 0.3s ease-in forwards', + slideOut: 'slideOut 0.3s ease-in forwards', + }, fontFamily: { sans: ['Inter var', ...defaultTheme.fontFamily.sans], },