How To Create Advanced CSS Dropdown Menus
Vložit
- čas přidán 14. 06. 2024
- FREE CSS Selector Cheat Sheet: webdevsimplified.com/specific...
Dropdown menus are one of the more common things you will create as a developer, but most developers create boring looking dropdowns. In this video I will show you have to create and advanced CSS dropdown that can include things such as forms or advanced navigation.
📚 Materials/References:
FREE CSS Selector Cheat Sheet: webdevsimplified.com/specific...
Starting GitHub Code: github.com/WebDevSimplified/a...
GitHub Code: github.com/WebDevSimplified/a...
Async Vs Defer Video: • What Is The Fastest Wa...
Async Vs Defer Article: blog.webdevsimplified.com/201...
JavaScript Data Attribute Article: blog.webdevsimplified.com/201...
🌎 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:20 - Demo/Starting Code
00:56 - Dropdown CSS
07:50 - JavaScript
11:25 - Advanced Menu HTML/CSS
#Dropdown #WDS #CSS
Imagine entering a website, seeing a regular dropdown, and close the browser with anger. :D
Turn customers away LOL
I really can't imagine that.
Yeah that was a pretty weird intro.
I'd love to see the evidence. Citation needed ;)
Haha. Nice
13:30 max-content does not mean that things will "be as wide as they possibly can be". Max-content will make it as large as it needs to contain the content without wrapping.
The best dropdown is a simple dropdown. You don't need anything more than that, if you care about user accessibility.
Also if javascript is disabled for any reason then this dropdown solution will not work
@@minglee5249 Ahh yes those damn IE6 users 😂
yeah doesnt support terminal based browsers. disliked...
totally agree
@@sicfxmusic why supporting such a old ass fucking browser is still a must is beyond me
who the fuck uses this shit
Great tutorial Kyle! I was doing something very similar with a "slide in" menu, but was using click events on the menu buttons. I love the use of data attributes and the event listener! I was doing something "creative" to call the correct menu to "slide" based on IDs etc... This is much cleaner and I will be moving my design to use data attributes and a simple event listener to production! Thanks Kyle!!!
What a good tutorial! Well done, Kyle!
The accessibility of this solution is horrendous.
I was losing track at around 4 minutes in with that many selector combinators lol
Gotta flex on them plebs ;)
This tutorial was super useful to me as I was trying to make these dropdowns close when clicked outside, the thing is every time I would click on the content of the dropdown it would close, so my workaround was getting the ID of every element inside the dropdown div and setting it to not close when clicked, of course I knew this wasn't ideal but couldn't make it work otherwise, thank you for this video!
I modified your code a bit and can place the content anywhere on the page to perform the desired animation (not just under the "dropdown"). In my case I am sliding a menu from the left to the right in a container located below my header/menu... very cool! Looks fantastic on mobile devices! Super user friendly! Thanks Kyle!
that’s actually exactly why I clicked on it lol
I'd Love to see ya code
You have some of the best front-end content I've seen yet, thank you!
Hey Kyle, thanks for your awesome video.
Here's my sole remark:
- Use semantically correct HTML tags wherever possible. E.g. use and instead of s everywhere.
And no css variables. Also using pixels.
My $0.02.. I like that he uses divs doesn't bother me at all and makes perfect sense since you can use this anywhere... say a slide in forms in a different container.
Or use code to generate your elements like a sane individual.
Im starting up Web dev, sorry if this sounds dumb, but why is this important?
@@fayth7199 Because properly formatted web pages are what search robots need to index the site. Look into the changes that Google have made recently in terms of web page structure and indexing eg. It's very much related to correct html structure and useage at the core. A podcast I recommend is 'HTML All The Things Podcast'.
You could remove js by using :focus-within selector.
That was really helpful, thank you for all your work! :)
Thank you for these tutorials. They are really helpful and you're doing a wonderful job.🙂
I can't express how thankful I am to you Kyle.
Thank you so much! I love your videos and I'm always checking my YT notifications to see if you uploaded a new vid!
Thanks, CZcams for recommending this video. This is exactly what I want now.
Thank you very much!!! Always learning something new from you!
You are amazing. AS usual. Very helpful, clear and in time..
Good work. Appreciate.
Switching this over to a react component has been fun.
Superb! Thank you very much. Beyond the big picture presented, there are so many cool little nuggets to glean here.
Great video! Nice voice and pace, pleasant to follow! Thank you very much!
Just the tut I was searching for thanks 🙏
absolutely awesome tutorial sir!
You are really a life saviour for many candid like me... You are really a pure soul....Thanks a lot ❤️... pls do more tasks like these...
Thank you so much for creating this video, through explanations which I appreciated and was able to customize it to my website!
I have a suggetion , You could added index-tab to the dropdown div (the div will have ability to focus and blur ) , then use somthing like this .dropdown:focus > dropdown-menu {...}.
You're awesome! Thank you for sharing your knowledge :)
Hey!! Thanks for this and for the Cheat Sheet it was Awesome!!! 😍
it’s nice .. welcome back 😍
I felt like I had a pretty good grip on CSS and rudimentary JS for DOM manipulation but man do I learn a ton from these videos. Using data selectors, target in JS, handling CSS -- you're very talented with this stuff, and I very much appreciate it because I'm here to learn and I definitely am doing just that.
u dont learn u get brainwash so u watch his videos more. at 3:10 no need to use calc but he will so people get curious. i give u one more example he will make videos and talk fast so people watch again and again.
in short he f**k smartly with your brain. i hate him now more than ever. unsubscribe. why he dont make videos with normal talking speed and eassy examples so we dont go to google and calculate rem to px and in multiply etc. In short smart business man bad or shall i say worst teacher. unsubscribe. hope u understand my point.
@@ayazaslam1362 I understand how you feel (if I read that correctly), but part of my self-teaching journey is not buying any products and not paying any tuition. I've been doing fine thus far and while I appreciate this guy, I am not spending money on courses. That doesn't exclude donating to a good creator (like WDS) though.
If concepts seem scattered and/or fast, that's fine for me. The trick to teaching myself is knowing how to piece myriad resources together. This channel is but one resource of many.
@@nate1988 I am also doing self study .
Covid = lost job lol. I get furistate by these things. I feel u self study is hard specially when u r doing practice and do silly mistake. Good luck if need self study partner I am available 24/7 now a days.
I know little bit html css Js and php.
@@ayazaslam1362 Early 30s here and in a similar situation to you. Its a tough time right now, I feel that. I just try to focus on the positive of things, like the videos here for free, because it's easy to get lost in negativity in this world.
Best of luck to you in your studies 👍
@@ayazaslam1362 lol, salty much. maybe you should try learn some more fundamentals, if you can't follow the code. Also, you can play the video at lower speeds. I really don't get why you are so mad about it, its free anyway and very decent code =/
Thank you! You are very talented!
Awesome content... Thank you for being my inspiration
Thank you for this tutorial!
Very good video. I will use this way t build navigation in the future.
Great lesson!
This is awesome thank you for sharing👍👍👍👍
Just read the article on using data attributes instead of classes and it's gold. It's my new method.
Love what you do on CZcams...nice videos.
Is it possible to make a video to show how make this dropdown menu responsive?
Yes, plese. Great videos and presentations. TY!!!
Thank you for helping me.
Awesome 🤩
thanks man! you are amazing
Btw you are awesome brother ❤️
Love your tutorials man😍😍😍
Can you please tell the name of the video editor and screen recorder you are using🙏🙏🙏
You're superhuman. Anyone who wants to make petty criticisms is jealous. Thanks for your videos.
You are always great...
Thanks, now I know a better way to dismiss dropdown properly.
thank you Kyle!
Thank you bro!
Well, the first example looks clearer to me.
How about a pure CSS solution: use nested s & s while leveraging pseudoclass :focus-within, :focus, and :hover. Focus Within should do the heavy lifting, but you may want the Hovers, and also .sibling:pseudo ~ .sibling-or-child, depending on how you want to put it together. If this doesn't makes sense to you, good. Go explore. It's 2021. You don't need JavaScript (which is great) to make amazing, solid, scalable dropdown menus, megamenus, popovers, etc.
Very sensible advice imo. I do think that if JS isn't needed, it shouldn't be used and there is a plethora of solutions waiting to be explored.
Avoid JS as much as you can.
When he said he needed JS to "unfocus" the buttons, I immediately thought of checkboxes, because they can be easily unchecked, so I gave it a try. I made the exact same menu and it worked. However when I hit the Tab key on my keyboard it goes through my sub-links even if the box is not checked. What did I do wrong?
Hey OnePieceWonPeace, I'd say if you figured out how to do it we'd love to see an example.
Maybe I'm lacking in my CSS kung fu but how do you handle toggling an attribute? You need aria-expanded to convey the state of the control to a screen reader to be accessible. So aria-expanded needs to be toggled between true / false and the only way I know how to do that is with JS.
Also, you have to be careful with pseudo elements because screen readers only read what's in the DOM.
I'd have to see an example but I'd be very concerned about the accessibility of it.
Love the video. If you have a transition on opacity but not on the pointer-events, will the non-transitioned properties change at the end of the transition or at the beginning? (I'm guessing effectively at the beginning, since it'll respond immediately to the new ':focus' status?)
The pointer events will enable as the animation begins when opening. They will disable when it animates out. So if you're quick, you can click something within it just before it opens, but you can't when it closes.
Thank you for all of your videos. I’m not sure if you’ll get this reference, but you’re the ChrisFix of making websites
Now that is a massive honor. I love ChrisFix
will have to try this
Dev you are good at Java- impressed- very
Boss, You are awesome
wow. that great. now please save me time i just download.with thanks.
Did you know that you can copy and paste the text directly from the video? It's built into Safari. Just pause the video, select the text you want with your mouse, and copy and paste. Other browsers might support it as well. If not, there are plug-ins available. I discovered this by accident.
Id love to see a version of this for react
wow, you taught me a way to toggle active class of a group of items
"click item 1 to toggle active class, and remove active class from other items in the group"
I gotta say the cheatsheet is very helpful.
I’m going back to web dev after a break and that cheatsheet is definitely speeding things up.
Very impressive. Good job!
Hi, what is the advantage of using javascript over building the dropdown with pure css?
None! Other than potentially using the CPU instead of the GPU, if that's actually what you want.
I would be happy being able do the boring dropdown
The method outlined here is visually appealing and the code (having finally figured it out with slight modification to my CSS) is a keeper.
However, using the tab key to navigate through the menu items one has to cycle through the contents of the drop down menus and this stems by toggling opacity as opposed to display.
Even though it looks great the downside is folks that are visually impaired shouldn't have to go through this mundane process.
It's one thing to disregard Internet Explorer when selecting your target audience but quite another not to take the visually handicapped into consideration. Please cater to them by using Wai-Aria.
Thankyou for this block of code.
Do u think there is away too make this type of menu accessible for all? Good analysis
@@williamlindsayiii824 To answer your question directly use aria-expanded when creating drop down menus. There's quite a bit to learn using Wai-Aria. But why stop there; if we are using accessibility in the navigation bar we should implement it throughout our HTML document.
Try and refrain from using div's and use schematic tags like nav, article, aside, section, figure, figcaption and obviously the h1 through h6 tags.
Use the 'Outline Algorithm' to reflect as how you intended your page to be displayed (Notice how I phrased this sentence). Use hgroup to hide tags so they don't show up in the Outliner Algorithm Tool. This is used by screen readers and web crawlers to interpret your content.
With respect to SEO, it's the content that gets ranked so take advantage of 'google search console'.
I hope this helps and sheds some light on where you need to focus on learning these technologies.
Add visibility: hidden; to actually hide the content (supports transitions), add aria-expanded for context and set .focus() when opening.
@@colindante5164 This is a video about dropdown menus, not accessibility. You people love shoving BUT THATS NOT ACCESSIBLE everywhere as if that makes you a better person than everyone else.
@@Dev-zr8si you have issues and fortunately I'm not a shrink so I don't have to deal with them.))
You are talented in delivering the information. May Allah guide to way of truth brother. You are a treasure.
🤡
Feel good to be in first 10 comments awesome video
Just when I think I have my css and html down I get taken to school Damm IT lol. Thank you bro you rock!!!
would love to see you making it responsive.
it basicly is responsive, you just need to copy paste the dropdown, change the absolute position and hide/show at certain viewports. That said, thanks for the video :)
Thx, interresting example instead of using standart ul li way
I totally love his videos!
You are rock :)
Hi there, thanks so much for the tutorial. I would like ask you about :focus selector cause, doesn't work actually on safari but only in chrome. I tried a couple of things but nothing. Hope you can help me cause actually like your method. Thanks
Amazing as always. Wish Kyle can do a crash course on the arcgis javascript api
I try to use focus-within to replace the javascript. But we must click on it to appear the pulldown/drop down. And using left, right, top, bottom; I try to control the direction of the dropdown. It's may be : drop down to left, drop down to right, drop up to left, drop up to right.
can you make it on hover as most of the cases there are more on hover than on click, i tried to modify your code but got some problems. the menu is bouncing up and down, what's the good way to modify it to on hover?
What do you think about focus-within? We can use that to achieve same via css only.
If you are still reading comments, is there any chance you could tell me why the html doesn't seem to work. All of the links come out in a vertical column when I run it in chrome? I am trying to learn something and not really at this level yet. Thanks, Joe
Why does my visual studio 2019 not recognise the data attributes (data-dropdown) it just treats it like a class
CSS is very powerful language 👍👍👍
I am brand new to this coding and learning. How do i get the webpage open so i can see my code making changes like he has on the right side of the screen.
Thanks
Kyle how do you remember so many tags attributes?
I try the same way you did, but when I put i with class which mean icon instead of the text. it Does'nt work.
Awesome
thnx for usefull video
how we can use it with reactjs i mean js code
thanx bro
About bringing in those customers in my life, Kyle, you've done incredibly so well. Much thanks.
Nice rundown! One little loose end though; if your screen width was any smaller that Login dropdown would overflow off the right side of the screen wouldn't it? How do you ensure the dropdown gets pushed in that case to the left to accommodate for that?
Hmmm... I think, "float" Left & Right is the better answer for this question, without using "max-width" 😅
Awsome.
Everything works except the end of the javascript chapter
everything seems to work and I followed every single instruction but it doesn't seem to work after inputting the new javascript and css
The first one was good and will collect people in website.
"How To Create Advanced CSS -Dropdown- Popover Menus"
Fixed the title
But isn't it dropping down?... 🤔
@@AmodeusR lol
😂
I call them flyout menus.
Some folks call it a Sling-blade, I call it a Kaiser Blade. Mmm hmm. :)
Dropdown was working but deleting menu items. When you change the css it will not even open. Looked great but appears to be broken
What about your guitar? Maybe some simplified Zappa riffs in a follow-up video? Even though it‘s no SG 🙂
For my dropdowns I've been using the 'details' and 'summary' tag with a z-index of 1000 on the 'on' state. You might look into that, save you a ton of JS code.
Wouldn't that be more suitable for information-revealing purposes than navigation menus?
Might work for you, but is likely very non-accessible.
not very accessibility friendly, since it's purpose is deferent. Better be wrapped in if you do this for some reason...
How do you stop the drop-down from going beyond the screen?
I want response menu using bootstrap 5.1.3
Please any one know video about this?
Could anyone explain what the JS code dose? Step by step.
if the navbar is responsive and turns into a dropdown for smaller screens, then what do we do for the secondary dropdown?
The easiest way is to hide this navbar for small screens and to display the hamburger menu instead.
Hello, can you do that example for ReactJS?