How To Build An Animated Hamburger Menu With Only CSS

Поделиться
HTML-код
  • Опубликовано: 16 май 2024
  • Free CSS Selector Cheat Sheet: webdevsimplified.com/specific...
    Hamburger menus are incredibly popular in sites, but building one that is animated, responsive, and uses no JavaScript is quite difficult. In this video I will show you how to build a hamburger menu with only CSS that is fully responsive and animated.
    📚 Materials/References:
    GitHub Code: github.com/WebDevSimplified/c...
    Emmet Video: • Learn Emmet In 15 Minu...
    Box Model Video: • Learn CSS Box Model In...
    Box Model Article: blog.webdevsimplified.com/202...
    CSS Variables Video: • CSS Variables Tutorial
    CSS Variables Article: blog.webdevsimplified.com/202...
    :has Selector Video: • This Is So Much More T...
    :has Selector Article: blog.webdevsimplified.com/202...
    🌎 Find Me Here:
    My Blog: blog.webdevsimplified.com
    My Courses: courses.webdevsimplified.com
    Patreon: / webdevsimplified
    Twitter: / devsimplified
    Discord: / discord
    GitHub: github.com/WebDevSimplified
    CodePen: codepen.io/WebDevSimplified
    ⏱️ Timestamps:
    00:00 - Introduction
    00:30 - Demo
    01:20 - HTML
    03:22 - CSS Setup/Variables
    04:52 - Hamburger Menu Styles
    10:30 - Hamburger Menu Animation
    18:00 - Sidebar Animation
    21:52 - Accessibility Styles
    #HamburgerMenu #WDS #CSS

Комментарии • 139

  • @codedjango
    @codedjango Год назад +45

    That's some serious CSS skills...

  • @beinyourguard
    @beinyourguard Год назад +35

    the thing I like about kyle is that he just doesn't go for like something ordinary. he takes something that is somewhat easy to do to a whole new level, bringing scalability to the code itself

  • @mariejoannaantoniadi227
    @mariejoannaantoniadi227 Год назад +1

    I love you for ever. The calc for the animation didn't work quite as expected when I changed the --bar-width but I worked around it. Perfect, Perfect, Perfect. Many thanks for that.

  • @felix-ve8jk
    @felix-ve8jk Год назад +10

    Great video, man! Still at the beginning of my coding, but I really liked this one using trigonometry. I'm coming from a machinist and machine programming background, and this was a really fun one for me.

  • @noahr1545
    @noahr1545 Год назад +3

    This is great as always! Love your videos and your courses!!

  • @anabeond
    @anabeond Год назад +1

    Great video! And the way you explained everything was so easy to follow, thanks a lot! You've got a new subscriber :)

  • @robmartin6159
    @robmartin6159 Год назад +3

    Awesome video.
    When the colors had to flip with focus-visible, the colors were hardcoded. If the colors in root were changed, the .hamburger-menu:has(input:checked) would use the old colors.
    I played around and discovered that in :root, a var defined can be used in another var. So I created a --light-color and --dark-color and used those for foreground and background. So changing those 2 vars will keep colors consistent.
    :root {
    --light-color: white;
    --dark-color: #333;
    --bar-width: 60px;
    --bar-height: 8px;
    --hamburger-gap: 6px;
    --foreground: var(--dark-color);
    --background: var(--light-color);
    --hamburger-margin: 8px;
    --animation-timing: 200ms;
    --hamburger-height: calc((var(--bar-height) * 3) + (var(--hamburger-gap) * 2));
    }
    .hamburger-menu:has(input:checked) {
    --foreground: var(--light-color);
    --background: var(--dark-color);
    }

  • @joao-lucky
    @joao-lucky 7 месяцев назад

    great video, very simple and taught

  • @Caariin88
    @Caariin88 4 месяца назад

    Great tutorial, i love how you also explain so anyone can understand what you are doing!

  • @axelandru9346
    @axelandru9346 6 месяцев назад +1

    He is the CSS guy of the internet. Bless up Sir !

  • @ELMlKO
    @ELMlKO Год назад +5

    in this video Web Dev Simplified became Web Dev

  • @PeterPan3713
    @PeterPan3713 Год назад

    This is awesome! Thank you very much for sharing!

  • @MohamadOmar-oi3ur
    @MohamadOmar-oi3ur Год назад

    That's really awesome man!

  • @Zeero3846
    @Zeero3846 Год назад

    Glad to know how the transform actually works finally. I implemented a CSS only button a while back, but I had to go through a lot of guessing to figure how it worked because CSS devs didn't believe in variables for the longest time, so most of the examples used pre-calculated numbers with no explanation, which was exacerbated by the fact that the animation wasn't symmetric either.
    Also, the has() selector (and I think also the transform style) wasn't around when I implemented my button, so I'll probably take a second look at that and see if my company is already using capable browsers.

  • @ozordiprince9405
    @ozordiprince9405 Год назад +1

    Funny you uploaded this. I was literally about to just implemennt something like this but had no idea how

  • @vincentdoerk3552
    @vincentdoerk3552 10 месяцев назад

    I can only say thank you! I learned so much by watching this video... superb content! god bless you and your fam!

  • @theisoj
    @theisoj Год назад

    Very great tutorial! Thanks Kyle!

  • @mariumbegum7325
    @mariumbegum7325 Год назад

    Very interesting tutorial - great work!

  • @KennehGebra-cf9ds
    @KennehGebra-cf9ds 3 месяца назад +1

    Thanks for making easy thing complicated

  • @yevseldev
    @yevseldev Год назад +1

    Thank you so much. You saved me my job.

  • @satisfymycuriosity
    @satisfymycuriosity Год назад +1

    Mad skills, respect

  • @cbennder3877
    @cbennder3877 11 месяцев назад

    Top, works very well, Thank you Kyle

  • @ivn9119
    @ivn9119 9 месяцев назад

    you are the God of CSS .... great job 🙂

  • @davidallred991
    @davidallred991 Год назад +7

    I recently had to do one of these for a front end mentor project. For me the actual hamburger menu was not very difficult, what was more complicated was working on the accessibility. Would love to see a video where this is done properly. Although you made a focus highlight on it, it is far from accessible for screen readers and needs a lot more work with aria-labels, changing aria-expanded status on open/close. etc. Would be great to see a video step by step with explanations on this because I found lots of videos on how to make the menu, but couldn't find many on making it properly accessible, so I am sure I didn't do it 100% correct.

    • @keylanoslokj1806
      @keylanoslokj1806 Год назад +2

      Accessibility>>> than just looks

    • @Fooney1
      @Fooney1 Год назад

      What % of users use a screen reader?

    • @nbbhaskar3294
      @nbbhaskar3294 Год назад

      ​​@@Fooney1 in the USA, all public websites should comply with Americans with Disabilities Act, other wise you are exposing your business to potential law suites. So, you see it's not just about % of people using screen readers and other assistive technologies. I am not sure about other parts of the world though.

    • @Fooney1
      @Fooney1 Год назад +1

      @@nbbhaskar3294 I really doubt a US company has ever suffered a penalty under that act lol. In business it is about what % will use the thing you just paid for.

    • @Fooney1
      @Fooney1 Год назад

      @@nbbhaskar3294 I just looked into and surprising enough a law made in 1990 doesn't mention websites at all. That being said you could get sued in civil court but you cat get sued in civil court for anything. Laws and rights don't matter in civil court anyway so why bother?

  • @redaelgountari
    @redaelgountari Год назад

    thank you so much for this great video

  • @brunosuperman
    @brunosuperman 8 месяцев назад

    Thank you!

  • @Fooney1
    @Fooney1 Год назад

    Prefect timing.

  • @deankinyua2365
    @deankinyua2365 2 месяца назад

    This is genius bro

  • @Ossielmx
    @Ossielmx Год назад

    Thank's Kyle!
    ⛽ Creative code☕

  • @medvedevleandro
    @medvedevleandro Год назад

    Thank you very much, Kyle.

  • @NOTHING-en2ue
    @NOTHING-en2ue Год назад

    you're great Kyle

  • @vuongal1658
    @vuongal1658 Год назад

    Thank you so much🤩🤩

  • @dheerajy2202
    @dheerajy2202 Год назад

    Thanks Kyle

  • @olipaype
    @olipaype 10 месяцев назад +2

    I learn a lot with this master class, but I tried to run on Chrome, Firefox, Edge, and Brave... in all works but firefox. Is there any compatibility with css selectors?

  • @AndyMorrisArt
    @AndyMorrisArt 6 месяцев назад

    Genius!

  • @khalilbenmeziane8836
    @khalilbenmeziane8836 Год назад

    thank you kyle

  • @harshalmali856
    @harshalmali856 7 месяцев назад

    this is cool video bro thanks for it highly recomended to all to go through some modern web development

  • @SkyFly19853
    @SkyFly19853 Год назад

    Could you also make a tutorial on dark mode them with a responsive nav bar?
    Thank you in advance!

  • @jawad_youtube
    @jawad_youtube Год назад

    I needed this 1year ago

  • @TheMetalMag
    @TheMetalMag Год назад

    you rock! thx

  • @ramsundararaman6615
    @ramsundararaman6615 Год назад

    This is a cool lesson Kyle! Thank you very much.
    Any reason why whatever that's added to the html gets rendered below the fold? Maybe the sidebar should have a style that allows for the main content to display within the fold?

    • @ramsundararaman6615
      @ramsundararaman6615 Год назад

      Also, it doesn't seem to work in Firefox!

    • @kenthhagstrom
      @kenthhagstrom 9 месяцев назад

      @@ramsundararaman6615 the :has selector is currently not supported by Firefox

  • @TRIC4pitator
    @TRIC4pitator Год назад

    omg , using a check box as an on off switch is so smart

  • @Greediium
    @Greediium Год назад +2

    Broski's Your a vscode Demon, would it be possible for you to make a video or a cheatsheet on all the key combinations you use to code? Great tutorial! Hope you're having a nice day!

  • @valleeth
    @valleeth Год назад

    Issue on Firefox 110, but great work.

  • @c1zztm450
    @c1zztm450 Год назад

    awesome! ty

  • @KX36
    @KX36 Год назад

    Brilliant.

  • @danieldragan9220
    @danieldragan9220 8 месяцев назад

    @wedbevsimplified Help! How do I stop scrolling in the background when the burger menu is open on mobile??

  • @astacey84
    @astacey84 8 месяцев назад +1

    This
    Is
    The
    Sidebar
    very subtle, good job

  • @Zeero3846
    @Zeero3846 Год назад +1

    So one thing I'm curious about is if the hamburger menu weren't up in the corner. What if it was below a header that could also change in size? Personally, I don't think it's ideal, but I may be stuck with it for the time being.

  • @mjshubham21
    @mjshubham21 Год назад

    It was awesome!! How can we implement the same in react?

  • @jp_vids9631
    @jp_vids9631 Год назад

    Can you make a video that covers object relational mapping (ORM )

  • @patcollins1779
    @patcollins1779 9 месяцев назад

    Thanks Kyle. I'm a novice web designer and trying to learn. I've spent a few hours trying to adapt this to be a header or "top bar" rather than a side-bar and I am struggling. Can anyone suggest a straightforward way to put this hamburger menu at the top right in a header? Thank you so much!

    • @meganlove5681
      @meganlove5681 7 месяцев назад +1

      I need help with the same thing. I managed to get the hamburger icon over to the right but can’t figure out how to get the sideabr over to the right. I put my logo, navigation, and the hamburger checkbox in the header. my logo is postioned to the left and that is ok.

  • @chriscentproductions6905
    @chriscentproductions6905 3 месяца назад +1

    YESSS!!! I can finally remove some javascript lines with this 😆😆😆

  • @Dj7wiLLY
    @Dj7wiLLY 5 месяцев назад +2

    doesn't work, after I added the --x-width to .hamburger-menu::before and after, when I click on hamburger "icon", all the lines vanishes aside

  • @SLC2010Charleston
    @SLC2010Charleston 3 месяца назад

    Works great. I would also like to turn on a transparent overlay across the page to prohibit a user from clicking on anything other than the menu. It is defined display "none" but the "has" selector doesn't seem to want to set the display property to block. Is there a limitation to "has"?
    .hamburger-menu:has(input:checked) + .overlaypage{
    display:block;
    }

  • @CodingW3
    @CodingW3 7 месяцев назад +1

    👏🏻👏🏻👏🏻👏🏻

  • @matthewharting3390
    @matthewharting3390 Год назад

    What do you do for those using Firefox as it does not use :has yet, without explicitly telling Firefox to allow it.

  • @MarkConstable
    @MarkConstable Год назад +4

    I got all excited about this, but it doesn't work with Firefox, probably because of "Pseudo-elements are also not valid selectors within :has() and pseudo-elements are not valid anchors for :has()." from MDN. Any workarounds... aside from don't use Firefox?

    • @ahmedbennani5401
      @ahmedbennani5401 Год назад +2

      You have to put the (input) element outside and before the (label) element, and try (input:checked + .hamburger-menu::after) and (input:checked + .hamburger-menu::after) selectors instead, but you will have to add a div for the middle line of the hamburger since the input element won't play that role anymore.

  • @ashwinsuryawanshi
    @ashwinsuryawanshi Год назад

    Waiting for your video on React Fiber.

  • @mohammedkaka5558
    @mohammedkaka5558 8 месяцев назад

    cool but the :has property does not work on firefox so it does not cross (X) the hamburger

  • @vickrammark2082
    @vickrammark2082 Год назад +1

    Hey Kyle this was an awesome viedo. I have a doubt how to make a div expand from right to left. I have been seeing different solutions for it but nothing satisifies me. Please do a shorts on it.

    • @tomparker6934
      @tomparker6934 Месяц назад

      Did you work this out? Trying to do the same.

  • @alilatoon
    @alilatoon 4 месяца назад

    I am wondering how would I be able to select multiple classes after the "+ .sidebar" I realize now it only works on one class but I need it for multiple classes.

  • @panka33
    @panka33 3 месяца назад

    what is that '*,' (asterisk+comma) at the very beginning of the CSS file? Cheers

  • @rishiraj2548
    @rishiraj2548 Год назад

    Great!

  • @arcanelore168
    @arcanelore168 2 месяца назад

    It's like a lot to know!

  • @SoulSovereignty
    @SoulSovereignty 10 месяцев назад +1

    I think you forgot something. When someone selects a menu option, how do you make the menu disappear? If you are navigating to an entirely new page, then perhaps that "reset" is implicit. However, if you are simply scrolling downward to a section of the page...there needs to be a way to make the menu auto-disappear.

  • @edwardkenway6822
    @edwardkenway6822 Год назад

    It's So Good

  • @chinmayghule8272
    @chinmayghule8272 Год назад

    Another thing we can do is to make this a web component. That way we can use it in any project.

  • @sonbui7063
    @sonbui7063 12 дней назад

    does the hamburger menu button and the menu list has to be in the same div class ? Cuz in my code the menu list and button are in different div class (the button is in the header class while the list is in the main class). And when i try the animation the list does not slide in as expected :)

  • @kodomo5490
    @kodomo5490 Год назад

    is it possible to do this if the sidebar is not located near the checkbox?

  • @nikhilgupta6415
    @nikhilgupta6415 21 день назад

    I'm a fan now

  • @loverboy069
    @loverboy069 Год назад

    Clicking on the hamburgur menu class or in my case, mobile-nav class doesn't check the box and setting pointer events to none stops me from toggling.

  • @rafaelvarela619
    @rafaelvarela619 Год назад

    My before and after pseudo elements are somehow with a line around then in bigger screens and it changes the color os the lines, can someone help me with that?

  • @erice.3892
    @erice.3892 Год назад

    the CSS wizard

  • @ezramammo3056
    @ezramammo3056 Год назад

    Can you please make a full course on node js please

  • @najmantube
    @najmantube 4 месяца назад

    I used keyboard tabbing to focus the hamburger icon then pressed 'Enter': nothing happened. I then found out that in order to check a checkbox you have to press the spacebar instead. For screen readers you could put a message inside the label (e.g. Press the spacebar to open the menu) but keyboard users 1) don't necessarily use a screen reader, 2) aren't necessarily badly-sighted so how, other than having the same text printed on the screen, do we inform them of this unusual behaviour? I'm assuming that most people would think they're dealing with a button (which is toggleable using the 'Enter' key), not a checkbox.

  • @gurvirbaraich2028
    @gurvirbaraich2028 Год назад

    Seeing after 5 seconds of upload

  • @matthewjura3377
    @matthewjura3377 Год назад +1

    It doesn't work on Firefox and Android chrome?

  • @salmajahan5834
    @salmajahan5834 Месяц назад

    How can I make it appear from the top? Thanks

  • @JnoobGodMode
    @JnoobGodMode Год назад

    bro i have an issue, the problem is that i can still scroll and since the size is fized i can see the bottom, idk how to stop it from scrolling, can someone help me pls...

  • @phoenix-kf3tr
    @phoenix-kf3tr Год назад

    Hello Kyle. I bought your course sometime ago. And now I decided to look at it again, but forgot the password. The problem is when I try to reset the password nothing happens. Can you help me with this issue? Thank you in advance)

  • @mauro21523
    @mauro21523 Год назад

    Codegrid 🤪, but of course the best one to explain it

  • @martinkusy2560
    @martinkusy2560 6 месяцев назад

    I can't get it work in Firefox. Any idea why that could be.

  • @blaneandgame9
    @blaneandgame9 11 месяцев назад

    when focused the checkbox still has an outline

  • @delfinobenavidesii4487
    @delfinobenavidesii4487 3 месяца назад

    Challenge: Can you recreate this in a HTA application (css3 compatibility)?
    Might have to use additional coding.

  • @angrybadger6761
    @angrybadger6761 Год назад

    I am redesigning my website and this has appeared. Excuse me if you hear the sound of java script being ripped out and given a through beating into the rice fields. You are the css Ninja my friend and I'm off to play this game as my java script skills are lacking so I have to depend on others, which I don't like to do. Many thanks for this.

  • @DJ66SXX
    @DJ66SXX 3 месяца назад

    .hamburger:has(input:checked) + .sidebar does not work, maybe there has been a CSS update from last year?

  • @devbyveritech
    @devbyveritech 7 месяцев назад

    I'm becoming a web designer tomorrow.
    They don't go through this stress

  • @suti1979
    @suti1979 Год назад

    Gread video, but it seems it's not working with firefox... probably, the bco the :has property.... :(

  • @Juppieboy
    @Juppieboy 2 месяца назад

    Hiii!!! newbie question here ( real noob no joke) i made this hamburger menu, but now i cant put stuff in middle of the page :( anyway to fix?

  • @ivanchiazzari7904
    @ivanchiazzari7904 4 месяца назад

    At school I thought we would never use the theorem, but now we see Pythagoras everywhere😃

  • @User-404
    @User-404 Год назад

    i need to review this a couple of time to understand at least the basics, im wayyy lost, 10 mins in

  • @kenthhagstrom
    @kenthhagstrom 9 месяцев назад

    I really love the simple use of the :has selector, however it seems to be widely unsupported. Is there a workaround for better browser compability (tried to google it but didn't find any good answers)?

  • @aarondz789
    @aarondz789 Год назад

    cool

  • @mmelimahlobo7656
    @mmelimahlobo7656 11 месяцев назад

    Geez thats a powerful but a bit complex hey

  • @geoffreyjohn2330
    @geoffreyjohn2330 3 месяца назад

    very nice video but my has tag is not working, which you're are using 12.30min

  • @ELMlKO
    @ELMlKO Год назад

    visual studio code at 13:21

  • @ANONYMOUS-qx4yx
    @ANONYMOUS-qx4yx Год назад

    damn I was just designing a navbar

  • @rawafkarim4469
    @rawafkarim4469 Месяц назад

    I think after this i need js for sure😂

  • @jonathangamble
    @jonathangamble Год назад

    now with tailwind