CSS3 menu. Various dropdown menus can be easily created with CSS3 with the help of selectors. Just connect your imagination – and you will create a truly new and unique design. In today’s lesson, we will create a new CSS3 drop-down menu with new effect: when you hover on the upper menu items, the submenu items appear whirling. Just follow this tutorial to see the step by step process of building this menu.
Step 1. HTML
First of all we will need to create the HTML structure for our CSS menu. Like most of other dropdown menus, this is UL-LI drop-down menu. Here is the HTML markup of this menu:
index.html
02 |
< li >< a href = "#" >Home</ a ></ li > |
03 |
< li >< a href = "#s1" >Menu 1</ a > |
05 |
< li >< a href = "#" >Submenu a</ a ></ li > |
06 |
< li >< a href = "#" >Submenu b</ a ></ li > |
07 |
< li >< a href = "#" >Submenu c</ a ></ li > |
08 |
< li >< a href = "#" >Submenu d</ a ></ li > |
09 |
< li >< a href = "#" >Submenu e</ a ></ li > |
10 |
< li >< a href = "#" >Submenu f</ a ></ li > |
11 |
< li >< a href = "#" >Submenu g</ a ></ li > |
12 |
< li >< a href = "#" >Submenu h</ a ></ li > |
15 |
< li class = "active" >< a href = "#s2" >Menu 2</ a > |
17 |
< li >< a href = "#" >Submenu a</ a ></ li > |
18 |
< li >< a href = "#" >Submenu b</ a ></ li > |
19 |
< li >< a href = "#" >Submenu c</ a ></ li > |
20 |
< li >< a href = "#" >Submenu d</ a ></ li > |
21 |
< li >< a href = "#" >Submenu e</ a ></ li > |
22 |
< li >< a href = "#" >Submenu f</ a ></ li > |
23 |
< li >< a href = "#" >Submenu g</ a ></ li > |
24 |
< li >< a href = "#" >Submenu h</ a ></ li > |
27 |
< li >< a href = "#" >Menu 3</ a > |
29 |
< li >< a href = "#" >Submenu a</ a ></ li > |
30 |
< li >< a href = "#" >Submenu b</ a ></ li > |
31 |
< li >< a href = "#" >Submenu c</ a ></ li > |
32 |
< li >< a href = "#" >Submenu d</ a ></ li > |
33 |
< li >< a href = "#" >Submenu e</ a ></ li > |
34 |
< li >< a href = "#" >Submenu f</ a ></ li > |
35 |
< li >< a href = "#" >Submenu g</ a ></ li > |
36 |
< li >< a href = "#" >Submenu h</ a ></ li > |
39 |
< li >< a href = "#" >Menu 4</ a ></ li > |
Step 2. CSS
Let’s start the CSS by preparing the basic rules:
css/main.css
10 |
background : -moz-linear-gradient( #292929 , #252525 ); |
11 |
background : -ms-linear-gradient( #292929 , #252525 ); |
12 |
background : -webkit-gradient(linear, left top , left bottom , color-stop( 0% , #292929 ), color-stop( 100% , #252525 )); |
13 |
background : -webkit-linear-gradient( #292929 , #252525 ); |
14 |
background : -o-linear-gradient( #292929 , #252525 ); |
15 |
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr= '#292929' , endColorstr= '#252525' ); |
16 |
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#252525')" ; |
17 |
background : linear-gradient( #292929 , #252525 ); |
18 |
border-bottom : 2px solid #181818 ; |
19 |
border-top : 2px solid #303030 ; |
27 |
.menu > li:first-child { |
28 |
border-radius: 5px 0 0 ; |
31 |
border-left : 3px solid rgba( 0 , 0 , 0 , 0 ); |
34 |
font-family : 'Lucida Console' ; |
38 |
text-decoration : none ; |
39 |
text-transform : uppercase ; |
When we hover on individual menu items, we will highlight them:
02 |
background-color : #1c1c1c ; |
03 |
background : -moz-linear-gradient( #1c1c1c , #1b1b1b ); |
04 |
background : -ms-linear-gradient( #1c1c1c , #1b1b1b ); |
05 |
background : -webkit-gradient(linear, left top , left bottom , color-stop( 0% , #1c1c1c ), color-stop( 100% , #1b1b1b )); |
06 |
background : -webkit-linear-gradient( #1c1c1c , #1b1b1b ); |
07 |
background : -o-linear-gradient( #1c1c1c , #1b1b1b ); |
08 |
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr= '#1c1c1c' , endColorstr= '#1b1b1b' ); |
09 |
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#1c1c1c', endColorstr='#1b1b1b')" ; |
10 |
background : linear-gradient( #1c1c1c , #1b1b1b ); |
11 |
border-bottom : 2px solid #222222 ; |
12 |
border-top : 2px solid #1B1B1B ; |
15 |
border-radius: 5px 0 0 0 ; |
16 |
border-left : 3px solid #C4302B ; |
The submenu is hidden by default, and it’s elements are rotated by 90 degrees. When we hover on the top-level menu items, the submenu appears with its children.
08 |
-webkit-perspective: 400px ; |
09 |
-moz-perspective: 400px ; |
10 |
-ms-perspective: 400px ; |
11 |
-o-perspective: 400px ; |
16 |
-webkit-transform: rotateY( 90 deg); |
17 |
-moz-transform: rotateY( 90 deg); |
18 |
-ms-transform: rotateY( 90 deg); |
19 |
-o-transform: rotateY( 90 deg); |
20 |
transform: rotateY( 90 deg); |
21 |
-webkit-transition: opacity . 4 s, -webkit-transform . 5 s; |
22 |
-moz-transition: opacity . 4 s, -moz-transform . 5 s; |
23 |
-ms-transition: opacity . 4 s, -ms-transform . 5 s; |
24 |
-o-transition: opacity . 4 s, -o-transform . 5 s; |
25 |
transition: opacity . 4 s, transform . 5 s; |
27 |
.menu .submenu li:hover a { |
28 |
border-left : 3px solid #454545 ; |
32 |
.menu > li:hover .submenu, .menu > li:focus .submenu { |
36 |
.menu > li:hover .submenu li, .menu > li:focus .submenu li { |
38 |
-webkit-transform: none ; |
Finally, to add uniqueness – let’s add a delay for each sub-menu item, thus they will appear at different times:
002 |
.menu li:hover .submenu li:nth-child( 1 ) { |
003 |
-webkit-transition-delay: 0 s; |
004 |
-moz-transition-delay: 0 s; |
005 |
-ms-transition-delay: 0 s; |
006 |
-o-transition-delay: 0 s; |
007 |
transition-delay: 0 s; |
009 |
.menu li:hover .submenu li:nth-child( 2 ) { |
010 |
-webkit-transition-delay: 50 ms; |
011 |
-moz-transition-delay: 50 ms; |
012 |
-ms-transition-delay: 50 ms; |
013 |
-o-transition-delay: 50 ms; |
014 |
transition-delay: 50 ms; |
016 |
.menu li:hover .submenu li:nth-child( 3 ) { |
017 |
-webkit-transition-delay: 100 ms; |
018 |
-moz-transition-delay: 100 ms; |
019 |
-ms-transition-delay: 100 ms; |
020 |
-o-transition-delay: 100 ms; |
021 |
transition-delay: 100 ms; |
023 |
.menu li:hover .submenu li:nth-child( 4 ) { |
024 |
-webkit-transition-delay: 150 ms; |
025 |
-moz-transition-delay: 150 ms; |
026 |
-ms-transition-delay: 150 ms; |
027 |
-o-transition-delay: 150 ms; |
028 |
transition-delay: 150 ms; |
030 |
.menu li:hover .submenu li:nth-child( 5 ) { |
031 |
-webkit-transition-delay: 200 ms; |
032 |
-moz-transition-delay: 200 ms; |
033 |
-ms-transition-delay: 200 ms; |
034 |
-o-transition-delay: 200 ms; |
035 |
transition-delay: 200 ms; |
037 |
.menu li:hover .submenu li:nth-child( 6 ) { |
038 |
-webkit-transition-delay: 250 ms; |
039 |
-moz-transition-delay: 250 ms; |
040 |
-ms-transition-delay: 250 ms; |
041 |
-o-transition-delay: 250 ms; |
042 |
transition-delay: 250 ms; |
044 |
.menu li:hover .submenu li:nth-child( 7 ) { |
045 |
-webkit-transition-delay: 300 ms; |
046 |
-moz-transition-delay: 300 ms; |
047 |
-ms-transition-delay: 300 ms; |
048 |
-o-transition-delay: 300 ms; |
049 |
transition-delay: 300 ms; |
051 |
.menu li:hover .submenu li:nth-child( 8 ) { |
052 |
-webkit-transition-delay: 350 ms; |
053 |
-moz-transition-delay: 350 ms; |
054 |
-ms-transition-delay: 350 ms; |
055 |
-o-transition-delay: 350 ms; |
056 |
transition-delay: 350 ms; |
058 |
.submenu li:nth-child( 1 ) { |
059 |
-webkit-transition-delay: 350 ms; |
060 |
-moz-transition-delay: 350 ms; |
061 |
-ms-transition-delay: 350 ms; |
062 |
-o-transition-delay: 350 ms; |
063 |
transition-delay: 350 ms; |
065 |
.submenu li:nth-child( 2 ) { |
066 |
-webkit-transition-delay: 300 ms; |
067 |
-moz-transition-delay: 300 ms; |
068 |
-ms-transition-delay: 300 ms; |
069 |
-o-transition-delay: 300 ms; |
070 |
transition-delay: 300 ms; |
072 |
.submenu li:nth-child( 3 ) { |
073 |
-webkit-transition-delay: 250 ms; |
074 |
-moz-transition-delay: 250 ms; |
075 |
-ms-transition-delay: 250 ms; |
076 |
-o-transition-delay: 250 ms; |
077 |
transition-delay: 250 ms; |
079 |
.submenu li:nth-child( 4 ) { |
080 |
-webkit-transition-delay: 200 ms; |
081 |
-moz-transition-delay: 200 ms; |
082 |
-ms-transition-delay: 200 ms; |
083 |
-o-transition-delay: 200 ms; |
084 |
transition-delay: 200 ms; |
086 |
.submenu li:nth-child( 5 ) { |
087 |
-webkit-transition-delay: 150 ms; |
088 |
-moz-transition-delay: 150 ms; |
089 |
-ms-transition-delay: 150 ms; |
090 |
-o-transition-delay: 150 ms; |
091 |
transition-delay: 150 ms; |
093 |
.submenu li:nth-child( 6 ) { |
094 |
-webkit-transition-delay: 100 ms; |
095 |
-moz-transition-delay: 100 ms; |
096 |
-ms-transition-delay: 100 ms; |
097 |
-o-transition-delay: 100 ms; |
098 |
transition-delay: 100 ms; |
100 |
.submenu li:nth-child( 7 ) { |
101 |
-webkit-transition-delay: 50 ms; |
102 |
-moz-transition-delay: 50 ms; |
103 |
-ms-transition-delay: 50 ms; |
104 |
-o-transition-delay: 50 ms; |
105 |
transition-delay: 50 ms; |
107 |
.submenu li:nth-child( 8 ) { |
108 |
-webkit-transition-delay: 0 s; |
109 |
-moz-transition-delay: 0 s; |
110 |
-ms-transition-delay: 0 s; |
111 |
-o-transition-delay: 0 s; |
112 |
transition-delay: 0 s; |
[sociallocker]
[/sociallocker]
Conclusion
We have just made another one CSS3 dropdown menu from scratch. Thanks for your patient attention, and if you really like what we done today – share it with all your friends in your social networks using the form below.