sommeguyy
sommeguyy

Reputation: 87

Dropdown menu not functioning properly

I am trying to create a dropdown menu with CSS. When I hover on menu item, it doesn't work as expected. It does not show any categories below that item, I don't know why.

I do not want to use JavaScript, I want to use only pure css.

https://jsfiddle.net/3dovsL0g/

*{
  margin:0px;
  padding:0px;
}
#container ul{
  list-style:none;	
}
#container ul li{
  background-color:#3c3e94;
  width:150px;
  border:1px solid white;
  height:50px;
  line-height: 50px;
  text-align:center;
  float:left;
  color:white;
  font-size:18px;
  position:relative;
}
#container ul ul{
  display:none;	
}
#container ul li:hover{
  background-color:#388222;
}
#container ul li:hover > ul{
  display:block;	
}
#container ul ul ul{
  transform:translateX(100%);
  top:0px;
  position:absolute;
}
h4{
  position:absolute;
  top:50%;
  left:50%;
  transform:translate(-50%,-50%);
}
<div id="container">
  <ul>
    <li><h4>Home</h4></li>
    <li><h4>About</h4></li>
    <li><h4>Entertainment</h4></li>
      <ul>
        <li><h4>Hollywood</h4></li>
        <li><h4>Jollywood</h4></li>
          <ul>
            <li><h4>steve</h4></li>
            <li><h4>jobs</h4></li>
            <li><h4>john</h4></li>
          </ul>
        <li><h4>Bollywood</h4></li>
      </ul>
    <li><h4>Contact</h4></li>
  </ul>	
</div>

Upvotes: 0

Views: 57

Answers (3)

doppler
doppler

Reputation: 883

You need to nest your <ul> tags within each <li> element. Semantically, sub items should be children to their parents.

.nav { /* style nav bar */
  display: flex;
  color: #fff;
  list-style: none;
  padding: 0;
}
.nav li { /* style ALL li tags */
  position: relative;
  padding: 12px;
  background-color: #333;
}
.nav li > ul { /* hide all ul tags at first */
  display: none;
  list-style: none;
  padding: 0;
  position: absolute;
  z-index: 1;
}
.nav li:hover > ul { /* show ul tags when parent li is hovering */
  display: block;
}
.nav li > ul > li > ul { /* move 3rd layer ul to the right */
  left: 100%;
  top: 0;
}
<ul class="nav">
  <li>Home</li>
  <li>About</li>
  <li>Entertainment
    <ul>
      <li>Hollywood</li>
      <li>Jollywood
        <ul>
          <li>steve</li>
          <li>jobs</li>
          <li>john</li>
        </ul>
      </li>
      <li>Bollywood</li>
    </ul>
  </li>
  <li>Contact</li>
</ul>

Upvotes: 0

Aditya Thakur
Aditya Thakur

Reputation: 2610

You'll need to place sub-menus inside the hovering elements, so that they are their child elements and then simply use class to target them. Here try this.

 .hasSub:hover .sub-menu{
    display: block !important;
  }
  .hasSub1:hover .sub-menu1{
    display: block !important;
  }

*{
		margin:0px;
		padding:0px;
	}
	#container ul{
		list-style:none;	
	}
	#container ul li{
		background-color:#3c3e94;
		width:150px;
		border:1px solid white;
		height:50px;
		line-height: :50px;
		text-align:center;
		float:left;
		color:white;
		font-size:18px;
		position:relative;
	}
	#container ul ul{
		display:none;	
	}
	#container ul li:hover{
		background-color:#388222;
	}
	
	#container ul ul ul{
		transform:translateX(100%);
		top:0px;
		position:absolute;
	}
	h4{
		position:absolute;
		top:50%;
		left:50%;
		transform:translate(-50%,-50%);
	}
  
  .hasSub:hover .sub-menu{
    display: block !important;
  }
  .hasSub1:hover .sub-menu1{
    display: block !important;
  }
<div id="container">
	<ul>
		<li><h4>Home</h4></li>
		<li><h4>About</h4></li>
		<li class="hasSub"><h4>Entertainment</h4>
			<ul class="sub-menu">
				<li><h4>Hollywood</h4></li>
				<li class="hasSub1"><h4>Jollywood</h4>
					<ul class="sub-menu1">
						<li><h4>steve</h4></li>
						<li><h4>jobs</h4></li>
						<li><h4>john</h4></li>
					</ul>
                </li>
				<li><h4>Bollywood</h4></li>
			</ul>
       </li>
		<li><h4>Contact</h4></li>
	</ul>	
</div>

and the fiddle: https://jsfiddle.net/kpdwf9th/1/

Upvotes: 1

Ahmed Mansour
Ahmed Mansour

Reputation: 83

Use this code , and change it menu with dropDown

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #333;
}

li {
  float: left;
}

li a, .dropbtn {
  display: inline-block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

li a:hover, .dropdown:hover .dropbtn {
  background-color: red;
}

li.dropdown {
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
}

.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {background-color: #f1f1f1;}

.dropdown:hover .dropdown-content {
  display: block;
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>

<ul>
  <li><a href="#home">Home</a></li>
  <li><a href="#news">News</a></li>
  <li class="dropdown">
    <a href="javascript:void(0)" class="dropbtn">Dropdown</a>
    <div class="dropdown-content">
      <a href="#">Link 1</a>
      <a href="#">Link 2</a>
      <a href="#">Link 3</a>
    </div>
  </li>
</ul>

<h3>Dropdown Menu inside a Navigation Bar</h3>
<p>Hover over the "Dropdown" link to see the dropdown menu.</p>

</body>
</html>

Upvotes: 1

Related Questions