This technique helps reduce code and limit the use of JavaScript. Today browsers can block painstakingly written JavaScript without warning. Using CSS Transition, I have tried to create a little animation for the dropdown menus. I am also using a simple fading effect using CSS transition on the menus.
Browser Support:
Chrome 39.0 - Yes | Firefox 34.0 - Yes | Internet Explorer 10 - No | Safari - Yes

<html>
<head>
<title>CSS Animated Dropdown Menu Example</title>
<style>
body {
background-color:#FFF;
font:13px Sans-Serif;
}
ul {
position:relative;
margin:0;
padding:0;
}
#menu {
width:auto;
float:left;
font-weight:bold;
cursor:pointer;
background:#5C7C99;
border-radius:2px;
-moz-border-radius:2px;
-webkit-border-radius:2px;
}
#menu ul {
display:table;
line-height:10px;
}
#menu ul li {
position:relative;
display:inline;
}
#menu ul li a {
float:left;
position:relative;
padding:20px;
color:#FFF;
text-decoration:none;
}
#menu ul li a:hover {
background:#000;
}
#menu ul ul {
position:absolute;
width:210px;
top:50px;
left:-370px; /* CHROME, SAFARI */
-webkit-transform:translateX(232px); /* CHROME SAFARI */
-moz-transform:translateX(135px); /* FIREFOX */
/* BACKGROUND COLOR AND BORDER. */
background:#5C7C99;
border-radius:2px;
-moz-border-radius:2px;
-webkit-border-radius:2px;
/* ADD BORDER SHADOW. */
box-shadow:0 0 10px #444;
-moz-box-shadow:0 0 10px #444;
-webkit-box-shadow:0 0 10px #444;
}
/* SUB MENU LIST */
#menu ul ul li {
text-align:left;
margin:0;
}
/* SET HEIGHT AS '0', SO THE SUBMENUS REMAINS HIDDEN IN THE BEGINNING. */
#menu ul ul li a {
height:0;
line-height:0;
width:200px;
color:#FFF;
padding:0 20px;
-moz-opacity: 0;
opacity:0;
filter: alpha(opacity=0);
}
#menu ul ul ul {
visibility:hidden;
position:absolute;
top:175px;
}
#categories a {
transition:all 0.3s linear;
-o-transition:all 0.3s linear;
-moz-transition:all 0.3s linear;
-webkit-transition:all 0.3s linear;
}
#categories:hover ul li a {
height:40px;
line-height:40px;
-moz-opacity: 1;
opacity:1;
filter: alpha(opacity=100);
}
#menu #categories #da > ul {
transition:opacity 0.2s 0.01s ease-in-out, left 0.2s 0.1s ease-out, visibility 0.1s 0.1s linear;
-o-transition:opacity 0.2s 0.01s ease-in-out, left 0.2s 0.1s ease-out, visibility 0.1s 0.1s linear;
-moz-transition:opacity 0.2s 0.01s ease-in-out, left 0.2s 0.1s ease-out, visibility 0.1s 0.1s linear;
-webkit-transition:opacity 0.2s 0.01s ease-in-out, left 0.2s 0.1s ease-out, visibility 0.1s 0.1s linear;
}
#menu #categories #da:hover > ul {
visibility:visible;
position:absolute;
left:-232px; /* CHROME, SAFARI */
-moz-transform:translateX(232px); /* FIREFOX */
}
</style>
</head>
<body>
<p>Roll the mouse over menu headers!</p>
<div id="menu">
<ul>
<li><a href="#">HOME</a></li>
<li id="categories"><a href="#">CATEGORIES +</a>
<ul>
<li><a href="#">HTML5</a></li>
<li><a href="#">ASP.NET WEB API</a></li>
<li><a href="#">ORACLE</a></li>
<li><a href="#">SQL SERVER</a></li>
<li id="da">
<a href="#">DESKTOP APPLICATIONS +</a>
<ul>
<li><a href="#">DATAGRIDVIEW (C#)</a></li>
<li><a href="#">CALCULATOR APP</a></li>
</ul>
</li>
<li><a href="#">SUBSCRIBE</a></li>
</ul>
</li>
<li><a href="#">CONTACT</a></li>
</ul>
</div>
</body>
</html>To design the Dropdown menu, I've used HTML Unordered List or simply the (<ul></ul>) tag, which I have placed inside the <div></div> tag. The styling is taken care of by the CSS block inside the <head></head> tag.
The transitions allows the menu and its sub menus to animate.
-webkit-transition:all 0.3s linear;
Browser Support:
Chrome 39.0 - Yes | Edge - Yes | Firefox 34.0 - Yes | Internet Explorer 10 - No | Safari - Yes
