How to Create a Drop-Down Menu with CSS
See CSS: Tips and Tricks for similar articles.In this how-to, you'll learn how to create a drop-down menu with CSS.
- Start with the following HTML document containing an unordered list:
With no CSS, it will display as follows:<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>Drop-Down Navigation Menu</title> </head> <body> <main> <header> <h1>Horizontal Navigation with Drop-Down Menu</h1> </header> <nav> <ul id="mainMenu"> <li><a href="home.html">Home</a></li> <li><a href="services.html">Services</a></li> <li><a href="products.html">Products</a></li> <li><a href="support.html">Support</a></li> <li><a href="blog.html">Blog</a></li> <li><a href="about.html">About</a></li> <li><a href="contact.html">Contact</a></li> </ul> </nav> </main> </body> </html>
- Create a file for an external styesheet and link to it from the HTML using the following tag:
<link href="menu.css" rel="stylesheet">
- Inside the stylesheet, use the following CSS to create a basic horizontal menu:
ol,ul { list-style: none; } #mainMenu { margin:10px; width:900px; font-family: sans-serif; } #mainMenu li { display:block; width:120px; float:left; margin-left:2px; border:1px solid #000; } #mainMenu a { display:block; padding:3px; text-decoration:none; background-color:#fff; color:#009; } #mainMenu a:hover { background-color:#009; color:#fff; }
- Open the HTML page in a browser. This code renders the following:
- In the HTML, add a nested list underneath the About list item.
<ul id="mainMenu"> <li><a href="home.html">Home</a></li> <li><a href="services.html">Services</a></li> <li><a href="products.html">Products</a></li> <li><a href="support.html">Support</a></li> <li><a href="blog.html">Blog</a></li> <li><a href="about.html">About</a> <ul> <li><a href="history.html">Company History</a></li> <li><a href="staff.html">Our Staff</a></li> <li><a href="press.html">Press Releases</a></li> <li><a href="investorInfo.html">Investor Information</a></li> </ul> </li> <li><a href="contact.html">Contact</a></li> </ul>
- In the CSS, set the position of the main menu items to relative. We will need to
position the submenus using absolute positioning, but absolutely positioned
elements are positioned within their nearest non-statically positioned containing
element. So, to prepare for that, we'll first make the main list items relatively
positioned:
#mainMenu li { position:relative; display:block; width:120px; float:left; margin-left:2px; border:1px solid #000; }
- Position the submenus absolutely. Submenus are contained in ul elements
within li elements. The following rule uses absolute positioning to position
them immediately below those li elements:
#mainMenu li ul { position:absolute; margin:0px; padding:0px; left:-3px; top:22px; }
- Hide the submenus. Add display:none; to the rule above to hide the
submenus.
#mainMenu li ul { display:none; position:absolute; margin:0px; padding:0px; left:-3px; top:22px; }
- Style the submenu options. The two rules below add borders around the submenu
options. We turn the top border off for all but the first option, which we identify
with the :first-child pseudo-class so that we don't get a double-thick
border resulting from top and bottom borders of adjacent options.
#mainMenu li ul { position:absolute; margin:0px; padding:0px; left:-3px; top:22px; display:none; } #mainMenu li ul li { width:150px; font-size:smaller; border-top:none; } #mainMenu li ul li:first-child { border-top:1px solid #000; }
-
Display the submenu when the user hovers over the main option. Modern
browsers allow the :hover pseudo-class for almost all elements, including
list items. The code below sets the display property of the submenu to
block when the user hovers over the parent list item:
#mainMenu li:hover ul { display:block; }
- The finished CSS should look like the following:
#mainMenu { margin:10px; width:900px; font-family: sans-serif; } #mainMenu li { position:relative;display:block; width:120px; float:left; margin-left:2px; border:1px solid #000; } #mainMenu a { display:block; padding:3px; text-decoration:none; background-color:#fff; color:#009; } #mainMenu a:hover { background-color:#009; color:#fff; } #mainMenu li ul { position:absolute; margin:0px; padding:0px; left:-3px; top:22px; display:none; } #mainMenu li ul li { width:150px; font-size:smaller; border-top:none; } #mainMenu li ul li:first-child { border-top:1px solid #000; } #mainMenu li:hover ul { display:block; }
- Open the HTML page in a browser. This code renders the following:
Related Articles
- Learn the Very Basics of CSS in One Minute
- How to Create a CSS External Style Sheet
- How to Align Text with CSS
- How to Create a Horizontal Navigation Menu with CSS
- How to Create a Fixed-Width Layout with CSS
- How to Remove Spacing Between Table Borders with CSS
- How to Set a Background Image with CSS
- How to Set Text Spacing and Placement in CSS
- How to Style a Table with CSS
- How to Create Boxes with Rounded Corners in CSS
- How to Create a Vertical Navigation Menu with CSS
- How to Use the CSS Opacity Property
- How to Use Multiple Background Images with CSS
- Absolute Positioning with CSS
- How to Use the CSS Border Shorthand Property
- How to Create CSS Button Links
- How to Create a Fluid-Width Layout with CSS
- How to Set Text and Background Color with CSS
- How to Create a CSS Embedded Style Sheet
- How to Add Inline Styles to CSS
- How to Create a Border with CSS
- How to Use the CSS Padding Shorthand Property
- How to Create a Fly-Out Menu with CSS
- How to Use CSS Media Queries in Responsive Design
- How to Adjust Margins with CSS
- How to Use the CSS Background Shorthand Property
- How to Create a Form without Tables Using CSS
- How to Modify Fonts in CSS
- How to Create a Drop-Down Menu with CSS (this article)
- How to Apply Padding with CSS
- Fixed Positioning with CSS
- How to Use CSS Transitions
- How to Use the CSS list-style Shorthand Property
- How to Change Text Style in CSS
- How to Create CSS Sprites
- How to Use CSS with Different Media Types
- How to Import Style Sheets with @import in CSS
- How to Use the CSS White-Space Property
- How to Use the CSS Z-index Property
- How to Create Drop Shadows with the box-shadow Property in CSS3