Mobile-first pixel-perfect solution with GSAP animations and fixed bg

Solution retrospective
It was so fun doing this challenge!
Some things I want to say about this solution:
- I made it as close to the design as I could. There are some minor differences in typography between my solution and given design, even tho I used properties directly from Figma. So it's almost pixel-perfect.
- The background in the header is fixed. I really like the effect. I wanted to achieve something like when you scroll on Spotify (artist page).
- Hamburger button has custom animation, when you open and close it.
- You can disable naviagtion menu by clicking outside of it. It's made in JavaScript -
app.js
file. This video helped me in implementing this feature. - This site has GSAP / Scroll Trigger animations. I hope y'all like it :) It only works for large screens tho. Animations on mobile devices may be annoying, so I disabled them.
- I wanted to make this solution as clean as possible, so I used 7-1 sass architecture, added extra line breaks to make properties more readable. Also I made sure to make my JavaScript clean as well (Animations could have been done better tho).
Let me know, if I can improve something. Any valuable feedback is welcome here! :)
Please log in to post a comment
Log in with GitHubCommunity feedback
- @CyrusKabir
Hello my dear friend ♥ You did awesome job on this challenge and everything it's clean and readable and I was looking at your navigation bar in mobile and I noticed I can close it even with touching nav body it self so I looked at your
isClickedOutside
logic and the problem was there actually you don't have #nav element here because of it's child ornav__list
position property soevent.target.matches("#nav")
it's always false then the second oneevent.target.closest("#hamburger")
it's always true why ? because everywhere even nav body it self doesn't have parent with #hamburger id (sorry if my writing it's very bad :( ( ); but here you can changeisClickedOutside
body to this :event.target.matches('*:not(.nav__list)') && !event.target.closest('#hamburger')
(I test it but you can test it too and have some discuss about it); edit : and yes of course if we click on the nav__link, again navigation get closed we can write anoter matches with && something like (event.target.matches("*:not(.nav__link)")) but it's a little messy and I am sure with right selector we can have cleaner codeMarked as helpful
Join our Discord community
Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!
Join our Discord