Reputation: 6909
I need help with my CSS. I have the following menu:
.h-menu .menu-item .dropdown-content a { display: none;}
.h-menu .menu-item:hover .dropdown-content a {
display: block;
}
.h-menu .menu-item a {
display:block;
float: left;
text-decoration: none;
margin: 1em;
}
<div class="h-menu">
<div class="menu-item">
<a href="">Menu Item 1</a>
</div>
<div class="menu-item">
<a href="">Menu Item 2</a>
<div class="dropdown-content">
<a href="">Sub-item 1</a>
<a href="">Sub-item 2</a>
<a href="">Sub-item 3</a>
</div>
</div>
<div class="menu-item">
<a href="">Menu item 3</a>
</div>
</div>
What happens is when I hover over the second menu item, the sub items are displayed to the right and not down. How can I fix it?
Also I want to use CSS to alight the menu to the right. Can someone please help?
Upvotes: 0
Views: 60
Reputation: 1645
Make the main menu inline block elements. Then remove the float on the "a" tag. See example below. or just remove the float attribute from the a tag and put it on the menu divs
.h-menu {
text-align: right;
}
.menu-item {
display: inline-block;
vertical-align: top;
border: 1px red solid;/**Remove for debbugging purposes**/
}
.h-menu .menu-item .dropdown-content a { display: none;}
.h-menu .menu-item:hover .dropdown-content a {
display: block;
}
.h-menu .menu-item a {
display:block;
/**float: left**/
text-decoration: none;
margin: 1em;
}
<div class="h-menu">
<div class="menu-item">
<a href="">Menu Item 1</a>
</div>
<div class="menu-item">
<a href="">Menu Item 2</a>
<div class="dropdown-content">
<a href="">Sub-item 1</a>
<a href="">Sub-item 2</a>
<a href="">Sub-item 3</a>
</div>
</div>
<div class="menu-item">
<a href="">Menu item 3</a>
</div>
</div>
Upvotes: 1
Reputation:
.h-menu .menu-item{
position: relative;
float: left;
}
.h-menu .menu-item .dropdown-content{
position: relative;
}
.h-menu .menu-item .dropdown-content a {
display: none;
}
.h-menu .menu-item:hover .dropdown-content a {
display: block;
}
.h-menu .menu-item a {
text-decoration: none;
margin: 1em;
}
<div class="h-menu">
<div class="menu-item">
<a href="">Menu Item 1</a>
</div>
<div class="menu-item">
<a href="">Menu Item 2</a>
<div class="dropdown-content">
<a href="">Sub-item 1</a>
<a href="">Sub-item 2</a>
<a href="">Sub-item 3</a>
</div>
</div>
<div class="menu-item">
<a href="">Menu item 3</a>
</div>
</div>
Upvotes: 0
Reputation:
Here's another option, using elements position.
.h-menu {
text-align: right;
}
.h-menu .menu-item {
display: inline-block;
position: relative;
}
.h-menu .menu-item .dropdown-content {
display: none;
position: absolute;
top:40px; left: 0;
}
.h-menu .menu-item .dropdown-content a {
display: block;
}
.h-menu .menu-item:hover .dropdown-content {
display: block;
}
.h-menu .menu-item a {
display:block;
float: left;
text-decoration: none;
margin: 1em;
}
<div class="h-menu">
<div class="menu-item">
<a href="">Menu Item 1</a>
</div>
<div class="menu-item">
<a href="">Menu Item 2</a>
<div class="dropdown-content">
<a href="">Sub-item 1</a>
<a href="">Sub-item 2</a>
<a href="">Sub-item 3</a>
</div>
</div>
<div class="menu-item">
<a href="">Menu item 3</a>
</div>
</div>
Upvotes: 0
Reputation: 9731
Use CSS Position. Add position: relative
to .h-menu
& position: absolute
to .dropdown-content
. And style the element using CSS Flexbox, like:
.h-menu {
display: flex;
position: relative;
}
.h-menu .menu-item .dropdown-content {
position: absolute;
top: 100%;
display: flex;
flex-direction: column;
}
Have a look at the snippet below:
.h-menu .menu-item .dropdown-content a { display: none;}
.h-menu .menu-item:hover .dropdown-content a {
display: block;
}
.h-menu {
display: flex;
position: relative;
}
.h-menu .menu-item .dropdown-content {
position: absolute;
top: 100%;
display: flex;
flex-direction: column;
}
.h-menu .menu-item a {
display:block;
float: left;
text-decoration: none;
margin: 1em;
}
<div class="h-menu">
<div class="menu-item">
<a href="">Menu Item 1</a>
</div>
<div class="menu-item">
<a href="">Menu Item 2</a>
<div class="dropdown-content">
<a href="">Sub-item 1</a>
<a href="">Sub-item 2</a>
<a href="">Sub-item 3</a>
</div>
</div>
<div class="menu-item">
<a href="">Menu item 3</a>
</div>
</div>
Hope this helps!
Upvotes: 1