From 5a13a75b2fc067a1f0bd9a89dadfce7726d56269 Mon Sep 17 00:00:00 2001 From: Felix Eckhofer <felix@eckhofer.com> Date: Sun, 22 Dec 2024 00:18:09 +0100 Subject: [PATCH] Animate hamburger menu --- .../controllers/navigation_controller.js | 14 ++++++++++++-- app/views/layouts/application.html.erb | 6 +++--- config/tailwind.config.js | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/app/javascript/controllers/navigation_controller.js b/app/javascript/controllers/navigation_controller.js index 12fd258..7a1fc41 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 703f96f..b7f7313 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 d6ad82c..06dd449 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], }, -- GitLab