【问题标题】:how to add dropdown to navigation menu如何将下拉菜单添加到导航菜单
【发布时间】:2020-09-06 05:13:08
【问题描述】:

我想以下拉菜单的形式将子菜单添加到我现有的导航菜单中。下面是我现有的 html 和 css 导航菜单代码。当用户将鼠标悬停在它上面时,我希望它下拉。这是当用户将鼠标移到元素上时出现的下拉菜单。请我不希望您向我提供链接,我只希望您修改我的代码。欧比

.menu {
	border-bottom: 5px solid #00cc99;
}
.toggleMenu {
    display:  none;
    background: #666;
    padding: 10px 15px;
    width: 100%;
    color: #fff;
}
.top-nav{
	 background: #339933;
}
.nav {
    list-style: none;
     *zoom: 1;
    width:79%;
     float:left;
}
.nav:before,
.nav:after {
    content: " "; 
    display: table; 
}
.nav:after {
    clear: both;
}
.nav ul {
    list-style: none;
    width: 9em;
}
.nav a {
    color: #FFF;
	font-size: 17px;	
}
.nav li.active> a, .nav li> a:hover {
	color:#FA6210; 
}
.nav li {
    position: relative;
   padding: 10px 70.5px;
   	font-family: 'Open Sans', sans-serif;
}
.nav > li {
    float: left;
}
.nav > li > a {
    display: block;
}
.nav li  ul {
    position: absolute;
    left: -9999px;
}
.nav > li.hover > ul {
    left: 0;
}
.nav li li.hover ul {
    left: 100%;
    top: 0;
    -webkit-transition: background .2s linear;
	-moz-transition: background .2s linear;
	-ms-transition: background .2s linear;
	-o-transition:  background .2s linear;
	transition: background .2s linear;
}
<div class="menu">
		<div class="wrap">
			<div class="top-nav">
			      <ul class="nav">
		            <li class="active"><a href="index.html">Home</a></li>
					<li><a href="about.html">About</a></li>
					<li><a href="gallery.html">Gallery</a></li>
					<li><a href="blog.html">Blog</a></li>
					<li><a href="contact.html">Contact</a></li>
					<div class="clear"></div>
				 </ul>
				  
			</div>
	     </div>
	</div>

【问题讨论】:

  • .nav &gt; li.hover &gt; ul 更改为.nav &gt; li:hover &gt; ul。还要在每个父
  • 中添加额外的&lt;ul&gt;&lt;li&gt;..&lt;/li&gt;&lt;/ul&gt;,因为您的 CSS 已经涵盖了子元素在悬停时可见的代码。
  • 检查这个小提琴:jsfiddle.net/pz8oqeb5
  • 标签: html css


    【解决方案1】:

    根据您的原始 CSS,您正在尝试打开父级 li:hover 上的下拉菜单,但是有一个错字(li.hover)表示当父级 &lt;li&gt; 具有类 .hover 时下拉菜单将打开。

    我修改了 HTML 以引入子菜单,下面是 HTML 和 CSS 的导航部分。

    注意:一旦为导航设置了基本 HTML,您就可以继续为链接设置任何样式和格式。

    小提琴:https://jsfiddle.net/2co53ts8/

    .nav {
      display: flex;
      padding: 0;
    }
    
    .submenu {
      position: absolute;
      left: 0;
      display: none;
    }
    
    .nav>li {
      list-style: none;
      position: relative;
      padding: 10px;
    }
    
    .nav>li:hover ul {
      display: block;
      position: absolute;
      left: 0;
      padding-left: 0;
      width: 300px;
      /*define dropdown width*/
    }
    
    .nav>li:hover ul li {
      list-style: none;
    }
    <ul class="nav">
      <li class="active"><a href="#">Home</a>
        <ul class="submenu">
          <li><a href="#">Sub Menu 1</a></li>
          <li><a href="#">Sub Menu 2</a></li>
        </ul>
      </li>
      <li><a href="about.html">About</a>
        <ul class="submenu">
          <li><a href="#">Sub Menu</a></li>
        </ul>
      </li>
      <li><a href="about.html">About</a>
        <ul class="submenu">
          <li><a href="#">Sub Menu</a></li>
        </ul>
      </li>
      <li><a href="gallery.html">Gallery</a>
        <ul class="submenu">
          <li><a href="#">Sub Menu</a></li>
        </ul>
      </li>
      <li><a href="blog.html">Blog</a>
        <ul class="submenu">
          <li><a href="#">Sub Menu</a></li>
        </ul>
      </li>
      <li><a href="contact.html">Contact</a>
        <ul class="submenu">
          <li><a href="#">Sub Menu</a></li>
        </ul>
      </li>
    </ul>

    【讨论】:

      【解决方案2】:

      看看这个。我注意到您试图通过来回移动菜单来显示这一点。 您可以使用“显示:无;”实现你正在做的事情,并将其设置为“显示:块;”当父 li 元素悬停时。

      这是您的代码 - 我只注释掉了一些内容,并添加了一些其他内容。

      .menu {
        border-bottom: 5px solid #00cc99;
      }
      
      .toggleMenu {
        display: none;
        background: #666;
        padding: 10px 15px;
        width: 100%;
        color: #fff;
      }
      
      .top-nav {
        background: #339933;
      }
      
      .nav {
        list-style: none;
        *zoom: 1;
        width: 79%;
        float: left;
      }
      
      .nav:before,
      .nav:after {
        content: " ";
        display: table;
      }
      
      .nav:after {
        clear: both;
      }
      
      .nav ul {
        list-style: none;
        width: 9em;
      }
      
      .nav a {
        color: #FFF;
        font-size: 17px;
      }
      
      .nav li.active>a,
      .nav li>a:hover {
        color: #FA6210;
      }
      
      .nav li {
        position: relative;
        /* padding: 10px 70.5px; */
        font-family: 'Open Sans', sans-serif;
      }
      
      .nav>li {
        float: left;
      }
      
      .nav>li>a {
        display: block;
      }
      
      .nav li ul {
        position: absolute;
        /* left: -9999px; */
      }
      
      .nav>li.hover>ul {
        left: 0;
      }
      
      .nav li li.hover ul {
        left: 100%;
        top: 0;
        -webkit-transition: background .2s linear;
        -moz-transition: background .2s linear;
        -ms-transition: background .2s linear;
        -o-transition: background .2s linear;
        transition: background .2s linear;
      }
      
      .hidden {
        display: none;
      }
      
      ul.nav li:hover .hidden {
        display: block;
      }
      <div class="menu">
        <div class="wrap">
          <div class="top-nav">
            <ul class="nav">
              <li class="active"><a href="index.html">Home</a>
                <div class="hidden">
                  <ul>
                    <li>Sample item #1</li>
                    <li>Sample item #2</li>
                    <li>Sample item #3</li>
                  </ul>
                </div>
              </li>
              <li><a href="about.html">About</a></li>
              <li><a href="gallery.html">Gallery</a></li>
              <li><a href="blog.html">Blog</a></li>
              <li><a href="contact.html">Contact</a></li>
              <div class="clear"></div>
            </ul>
      
          </div>
        </div>
      </div>
      </div>

      【讨论】:

        【解决方案3】:

        像这样?

        .menu {
        	border-bottom: 5px solid #00cc99;
        }
        .toggleMenu {
            display:  none;
            background: #666;
            padding: 10px 15px;
            width: 100%;
            color: #fff;
        }
        .top-nav{
        	 background: #339933;
        }
        .nav {
            list-style: none;
             *zoom: 1;
            width:79%;
             float:left;
        }
        .nav:before,
        .nav:after {
            content: " "; 
            display: table; 
        }
        .nav:after {
            clear: both;
        }
        .nav ul {
            list-style: none;
            width: 9em;
        }
        .nav a {
            color: #FFF;
        	font-size: 17px;	
        }
        .nav li.active> a, .nav li> a:hover {
        	color:#FA6210; 
        }
        .nav li {
            position: relative;
           padding: 10px 70.5px;
           	font-family: 'Open Sans', sans-serif;
        }
        .nav > li {
            float: left;
        }
        .nav > li > a {
            display: block;
        }
        .nav li  ul {
            position: absolute;
            left: -9999px;
        }
        .nav > li.hover > ul {
            left: 0;
        }
        .nav li li.hover ul {
            left: 100%;
            top: 0;
            -webkit-transition: background .2s linear;
        	-moz-transition: background .2s linear;
        	-ms-transition: background .2s linear;
        	-o-transition:  background .2s linear;
        	transition: background .2s linear;
        }
        
        
        .dropdown-content {
          display: none;
          position: absolute;
          background-color: #f9f9f9;
          min-width: 160px;
          box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
          padding: 12px 16px;
          z-index: 1;
        }
        
        .active:hover .dropdown-content {
          display: block;
        }
        <div class="menu">
        		<div class="wrap">
        			<div class="top-nav">
        			      <ul class="nav">
        		      <li class="active"><a href="index.html">Home</a>
                    <div class="dropdown-content">
                    <p>Hello World!</p>
                     </div>
                  </li>
        					<li><a href="about.html">About</a></li>
        					<li><a href="gallery.html">Gallery</a></li>
        					<li><a href="blog.html">Blog</a></li>
        					<li><a href="contact.html">Contact</a></li>
        					<div class="clear"></div>
        				 </ul>
        				  
        			</div>
        	     </div>
        	</div>

        【讨论】:

        • OP 的现有 CSS 表明,用户将鼠标悬停在 &lt;li&gt; 元素上,将出现以下 &lt;ul&gt;.nav &gt; li.hover &gt; ul.
        猜你喜欢
        相关资源
        最近更新 更多
        热门标签