Creating a cool CSS3 Dropdown Menu

Tutorials

During last several years, CSS-based menus are becoming more and more popular. Almost any website have own navigation menu, and quite often the menu plays a major role in mapping the site. Just because this is great solution to display lot of links and keep clean layout. Today I will show you how to create your own multilevel CSS3 dropdown menu (without extra JS files – pure CSS). Since this menu is made using CSS3 – it renders perfect on Firefox, Chrome and Safari browsers. This menu work also in IE8+, but the rounded corners and shadow will not be rendered.

 


Here are final result (what we will creating):

css3 menu1

Here are samples and downloadable package:

Live Demo

[sociallocker]

download in package

[/sociallocker]


Ok, download the example files and lets start coding !


Step 1. HTML

As usual, we start with the HTML.

Here are html with our menu. As you can see – this is multi-level menu. I hope that you can easy to understand it.

index.html

01 <link rel="stylesheet" href="css/style.css" type="text/css" media="screen">
02 <div class="example">
03     <ul id="nav">
04         <li class="current"><a href="https://www.script-tutorials.com/">Home</a></li>
05         <li><a href="https://www.script-tutorials.com/">Tutorials</a>
06             <ul>
07                 <li><a href="https://www.script-tutorials.com/category/html-css/">HTML / CSS</a></li>
08                 <li><a href="https://www.script-tutorials.com/category/jquery/">JS / jQuery</a>
09                     <ul>
10                         <li><a href="https://www.script-tutorials.com/category/jquery/">jQuery</a></li>
11                         <li><a href="https://www.script-tutorials.com/category/javascript/">JS</a></li>
12                     </ul>
13                 </li>
14                 <li><a href="https://www.script-tutorials.com/category/php/">PHP</a></li>
15                 <li><a href="https://www.script-tutorials.com/category/mysql/">MySQL</a></li>
16                 <li><a href="https://www.script-tutorials.com/category/xslt/">XSLT</a></li>
17                 <li><a href="https://www.script-tutorials.com/category/ajax/">Ajax</a></li>
18             </ul>
19         </li>
20         <li><a href="https://www.script-tutorials.com/category/resources/">Resources</a>
21             <ul>
22                 <li><a href="https://www.script-tutorials.com/category/resources/">By category</a>
23                     <ul>
24                         <li><a href="https://www.script-tutorials.com/category/php/">PHP</a></li>
25                         <li><a href="https://www.script-tutorials.com/category/mysql/">MySQL</a></li>
26                         <li><a href="https://www.script-tutorials.com/category/xslt/">XSLT</a></li>
27                         <li><a href="https://www.script-tutorials.com/category/ajax/">Ajax</a></li>
28                     </ul>
29                 </li>
30                 <li><a href="https://www.script-tutorials.com/category/resources/">By tag name</a>
31                     <ul>
32                         <li><a href="https://www.script-tutorials.com/tag/captcha/">captcha</a></li>
33                         <li><a href="https://www.script-tutorials.com/tag/gallery/">gallery</a></li>
34                         <li><a href="https://www.script-tutorials.com/tag/animation/">animation</a></li>
35                     </ul>
36                 </li>
37             </ul>
38         </li>
39         <li><a href="https://www.script-tutorials.com/about/">About</a></li>
40         <li><a href="https://www.script-tutorials.com/creating-css3-dropdown-menu/">Go Back To The Tutorial</a></li>
41     </ul>
42 </div>

Step 2. CSS

Here are used CSS styles. First two selectors (you can skip it) belong to our demo page. All rest – belong to menu.

css/style.css

001 /* demo page styles */
002 body {
003     background:#eee;
004     margin:0;
005     padding:0;
006 }
007 .example {
008     background:#fff url(../images/clouds-in-blue-sky.jpg);
009     width:770px;
010     height:570px;
011     border:1px #000 solid;
012     margin:20px auto;
013     padding:15px;
014     border-radius:3px;
015     -moz-border-radius:3px;
016     -webkit-border-radius:3px;
017 }
018 /* main menu styles */
019 #nav {
020     display:inline-block;
021     width:100%;
022     margin:0px auto;
023     padding:0;
024     background:#335599 url(../images/bg.png) repeat-x 0 -110px;
025     border-radius:10px/*some css3*/
026     -moz-border-radius:10px;
027     -webkit-border-radius:10px;
028     box-shadow:0 2px 2px rgba(0,0,0, .5);
029     -moz-box-shadow:0 2px 2px rgba(0,0,0, .5);
030     -webkit-box-shadow:0 2px 2px rgba(0,0,0, .5);
031 }
032 #nav li {
033     margin:10px;
034     float:left;
035     position:relative;
036     list-style:none;
037 }
038 #nav a {
039     font-weight:bold;
040     color:#e7e5e5;
041     text-decoration:none;
042     display:block;
043     padding:8px 20px;
044     border-radius:10px/*some css3*/
045     -moz-border-radius:10px;
046     -webkit-border-radius:10px;
047     text-shadow:0 2px 2px rgba(0,0,0, .7);
048 }
049 /* selected menu element */
050 #nav .current a, #nav li:hover > a {
051     background:#7788aa url(../images/bg.png) repeat-x 0 -20px;
052     color:#000;
053     border-top:1px solid #f8f8f8;
054     box-shadow:0 2px 2px rgba(0,0,0, .7); /*some css3*/
055     -moz-box-shadow:0 2px 2px rgba(0,0,0, .7);
056     -webkit-box-shadow:0 2px 2px rgba(0,0,0, .7);
057     text-shadow:0 2px 2px rgba(255,255,2550.7);
058 }
059 /* sublevels */
060 #nav ul li:hover a, #nav li:hover li a {
061     background:none;
062     border:none;
063     color:#000;
064 }
065 #nav ul li a:hover {
066     background:#335599 url(../images/bg.png) repeat-x 0 -100px;
067     color:#fff;
068     border-radius:10px/*some css3*/
069     -moz-border-radius:10px;
070     -webkit-border-radius:10px;
071     text-shadow:0 2px 2px rgba(0,0,00.7);
072 }
073 #nav ul li:first-child > a {
074     -moz-border-radius-topleft:10px/*some css3*/
075     -moz-border-radius-topright:10px;
076     -webkit-border-top-left-radius:10px;
077     -webkit-border-top-right-radius:10px;
078 }
079 #nav ul li:last-child > a {
080     -moz-border-radius-bottomleft:10px/*some css3*/
081     -moz-border-radius-bottomright:10px;
082     -webkit-border-bottom-left-radius:10px;
083     -webkit-border-bottom-right-radius:10px;
084 }
085 /* drop down */
086 #nav li:hover > ul {
087     opacity:1;
088     visibility:visible;
089 }
090 #nav ul {
091     opacity:0;
092     visibility:hidden;
093     padding:0;
094     width:175px;
095     position:absolute;
096     background:#aabbcc url(../images/bg.png) repeat-x 0 0;
097     border:1px solid #7788aa;
098     border-radius:10px/*some css3*/
099     -moz-border-radius:10px;
100     -webkit-border-radius:10px;
101     box-shadow:0 2px 2px rgba(0,0,0, .5);
102     -moz-box-shadow:0 2px 2px rgba(0,0,0, .5);
103     -webkit-box-shadow:0 2px 2px rgba(0,0,0, .5);
104     -moz-transition:opacity .25s linear, visibility .1s linear .1s;
105     -webkit-transition:opacity .25s linear, visibility .1s linear .1s;
106     -o-transition:opacity .25s linear, visibility .1s linear .1s;
107     transition:opacity .25s linear, visibility .1s linear .1s;
108 }
109 #nav ul li {
110     float:none;
111     margin:0;
112 }
113 #nav ul a {
114     font-weight:normal;
115     text-shadow:0 2px 2px rgba(255,255,2550.7);
116 }
117 #nav ul ul {
118     left:160px;
119     top:0px;
120 }

Quite all css code is belong to css menu. I don`t including this into article. It always available in download package

Step 3. Images

Our menu using only single image to reach custom gradient effect. This will white-transparent image (PNG) which we will apply to different elements to make gradient. And, using background position we will able to adjust it (make more lighter or darker). Second image – just background (clouds) for our demo page.

    white gradient
    white gradient

Live Demo

Conclusion

Hope you enjoyed with this tutorial, don’t forget to tell thanks and leave a comment 🙂 Good luck!

Rate article