html - 双普通和大型菜单

标签 html css flexbox megamenu

我正在尝试制作一个带有大型菜单和普通菜单的导航栏 但问题出在我的大型菜单中,我希望 li 和所有 ul 元素一起显示,但在普通菜单中,我希望 ul > 仅当 li 悬停时才显示元素。

而且我无法避免第一个的 css 干扰第二个:

html,body,nav, ul, li, a, span{
  margin:0; padding:0;
}
body{
  font-family:helvetica;
  font-size:16px;
}
nav ul {
  background-color:#444;
  display:flex;
  flex-direction:column;
}
nav ul li{
  list-style-type: none;
}
nav ul li a{
  padding:.8rem 1rem;
  display:block;
  text-decoration: none;
  color:#f9f9f9;
}
nav ul li:hover{
  background:rgba(0,0,0, .25);
}


nav ul li:hover div.sf-mega {
  top: 100%;
}


nav div.sf-mega ul {
  width: 25%;
  margin-bottom: 40px;
  color: #000;
  box-shadow: none;
}

nav div.sf-mega h4 {
  margin-bottom: 15px;
  text-transform: uppercase;
}

nav div.sf-mega ul li {
  display: block;
}

nav div.sf-mega ul li a {
  margin-top: 10px;
  transition: 0.5s;
  color: #000;
}

nav div.sf-mega ul li a:hover {
  color: #4096ee;
}

@media only screen and (max-width:480px){
  .has_children ul li a{
    padding-left:2rem;
  }
  
  .has_children ul .has_children ul a{
    padding-left:3rem;
  }
  .arrow-down::after{
    content:"\f107";
  }
}

@media only screen and (min-width:480px){
  nav ul{
    flex-direction:row;

  }
  nav ul li{
    position:relative;
    flex:1 0 auto;
    text-align:left;
  }
  .has_children ul, .has_children ul .has_children ul{
    display:none;
    width:100%;
    position:absolute;
  }
  .has_children ul .has_children ul{
    left:100%;
    top:0;
  }
  nav ul li:hover ul,  .has_children ul .has_children:hover ul{
     display:flex;
    flex-direction:column;
  }
  
}
<nav id="site-navigation" class="main-navigation" role="navigation" aria-label="Menu supérieur">
<ul id="top-menu" class="menu"><li a="" id="nav-menu-item-2105" class="main-menu-item  menu-first menu-item-depth-0 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children mega2"><a href="http://localhost/wordpress/commande/" class="menu-link  main-menu-link"><span>Commande</span></a><div class="sf-mega"><div class="sf-mega-inner clearfix">
<ul class="navi first  menu-depth-1">
	<li a="" id="nav-menu-item-2106" class="   menu-item-depth-1 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children normal_menu_item"><a href="http://localhost/wordpress/panier/" class="menu-link  sub-menu-link"><span>Panier</span></a>
	<ul class="navi  navi menu-depth-2">
		<li a="" id="nav-menu-item-2107" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/boutique/" class="menu-link  sub-menu-link"><span>Boutique</span></a></li>
		<li a="" id="nav-menu-item-2108" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/blog/" class="menu-link  sub-menu-link"><span>Blog</span></a></li>
		<li a="" id="nav-menu-item-2109" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/about/page-markup-and-formatting/" class="menu-link  sub-menu-link"><span>Page Markup And Formatting</span></a></li>
	</ul>
</li>
	<li a="" id="nav-menu-item-2113" class="   menu-item-depth-1 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children normal_menu_item"><a href="http://localhost/wordpress/panier/" class="menu-link  sub-menu-link"><span>Panier</span></a>
	<ul class="navi  navi menu-depth-2">
		<li a="" id="nav-menu-item-2112" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/level-1/level-2/level-3a/" class="menu-link  sub-menu-link"><span>Level 3a</span></a></li>
		<li a="" id="nav-menu-item-2111" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/level-1/level-2/level-3b/" class="menu-link  sub-menu-link"><span>Level 3b</span></a></li>
		<li a="" id="nav-menu-item-2110" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/about/page-image-alignment/" class="menu-link  sub-menu-link"><span>Page Image Alignment</span></a></li>
	</ul>
</li>
</ul>
</div></div></li>
<li a="" id="nav-menu-item-2114" class="main-menu-item   menu-item-depth-0 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children normal_menu_item"><a href="http://localhost/wordpress/boutique/" class="menu-link  main-menu-link"><span>Boutique</span></a>
<ul class="navi first  menu-depth-1">
	<li a="" id="nav-menu-item-2115" class="   menu-item-depth-1 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children normal_menu_item"><a href="http://localhost/wordpress/page-d-exemple/" class="menu-link  sub-menu-link"><span>Page d’exemple</span></a>
	<ul class="navi  navi menu-depth-2">
		<li a="" id="nav-menu-item-2116" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/page-b/" class="menu-link  sub-menu-link"><span>Page B</span></a></li>
	</ul>
</li>
</ul>
</li>
</ul>
</nav>

需要说明的是,我尝试为 commande 使用大型菜单,为 Boutique 使用普通菜单。

enter image description here

最佳答案

也许您可能想重写样式以将大型菜单普通菜单 样式分开,但我已经进行了一些调试并将以下内容添加到min-width:480px 在悬停时在桌面 View 中显示大型菜单的媒体查询:

  .has_children:hover .sf-mega ul {
    display: flex;
    width: 100%;
    flex-direction: row;
  }
  .has_children:hover .sf-mega ul .has_children ul {
    display: flex;
    flex-direction: column;
    top: initial;
    left: 0;
  }

请看下面的演示:

html,
body,
nav,
ul,
li,
a,
span {
  margin: 0;
  padding: 0;
}

body {
  font-family: helvetica;
  font-size: 16px;
}

nav ul {
  background-color: #444;
  display: flex;
  flex-direction: column;
}

nav ul li {
  list-style-type: none;
}

nav ul li a {
  padding: .8rem 1rem;
  display: block;
  text-decoration: none;
  color: #f9f9f9;
}

nav ul li:hover {
  background: rgba(0, 0, 0, .25);
}

nav ul li:hover div.sf-mega {
  top: 100%;
}

nav div.sf-mega ul {
  width: 25%;
  margin-bottom: 40px;
  color: #000;
  box-shadow: none;
}

nav div.sf-mega h4 {
  margin-bottom: 15px;
  text-transform: uppercase;
}

nav div.sf-mega ul li {
  display: block;
}

nav div.sf-mega ul li a {
  margin-top: 10px;
  transition: 0.5s;
  color: #000;
}

nav div.sf-mega ul li a:hover {
  color: #4096ee;
}

@media only screen and (max-width:480px) {
  .has_children ul li a {
    padding-left: 2rem;
  }
  .has_children ul .has_children ul a {
    padding-left: 3rem;
  }
  .arrow-down::after {
    content: "\f107";
  }
}

@media only screen and (min-width:480px) {
  nav ul {
    flex-direction: row;
  }
  nav ul li {
    position: relative;
    flex: 1 0 auto;
    text-align: left;
  }
  .has_children ul,
  .has_children ul .has_children ul {
    display: none;
    width: 100%;
    position: absolute;
  }
  .has_children ul .has_children ul {
    left: 100%;
    top: 0;
  }
  nav ul li:hover ul,
  .has_children ul .has_children:hover ul {
    display: flex;
    flex-direction: column;
  }
  
  /* ADDED */
  .has_children:hover .sf-mega ul {
    display: flex;
    width: 100%;
    flex-direction: row;
  }
  .has_children:hover .sf-mega ul .has_children ul {
    display: flex;
    flex-direction: column;
    top: initial;
    left: 0;
  }
  .sf-mega ul li a {
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
}
}
<nav id="site-navigation" class="main-navigation" role="navigation" aria-label="Menu supérieur">
  <ul id="top-menu" class="menu">
    <li a="" id="nav-menu-item-2105" class="main-menu-item  menu-first menu-item-depth-0 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children mega2"><a href="http://localhost/wordpress/commande/" class="menu-link  main-menu-link"><span>Commande</span></a>
      <div class="sf-mega">
        <div class="sf-mega-inner clearfix">
          <ul class="navi first  menu-depth-1">
            <li a="" id="nav-menu-item-2106" class="   menu-item-depth-1 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children normal_menu_item"><a href="http://localhost/wordpress/panier/" class="menu-link  sub-menu-link"><span>Panier</span></a>
              <ul class="navi  navi menu-depth-2">
                <li a="" id="nav-menu-item-2107" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/boutique/" class="menu-link  sub-menu-link"><span>Boutique</span></a></li>
                <li a="" id="nav-menu-item-2108" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/blog/" class="menu-link  sub-menu-link"><span>Blog</span></a></li>
                <li a="" id="nav-menu-item-2109" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/about/page-markup-and-formatting/" class="menu-link  sub-menu-link"><span>Page Markup And Formatting</span></a></li>
              </ul>
            </li>
            <li a="" id="nav-menu-item-2113" class="   menu-item-depth-1 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children normal_menu_item"><a href="http://localhost/wordpress/panier/" class="menu-link  sub-menu-link"><span>Panier</span></a>
              <ul class="navi  navi menu-depth-2">
                <li a="" id="nav-menu-item-2112" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/level-1/level-2/level-3a/" class="menu-link  sub-menu-link"><span>Level 3a</span></a></li>
                <li a="" id="nav-menu-item-2111" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/level-1/level-2/level-3b/" class="menu-link  sub-menu-link"><span>Level 3b</span></a></li>
                <li a="" id="nav-menu-item-2110" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/about/page-image-alignment/" class="menu-link  sub-menu-link"><span>Page Image Alignment</span></a></li>
              </ul>
            </li>
          </ul>
        </div>
      </div>
    </li>
    <li a="" id="nav-menu-item-2114" class="main-menu-item   menu-item-depth-0 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children normal_menu_item"><a href="http://localhost/wordpress/boutique/" class="menu-link  main-menu-link"><span>Boutique</span></a>
      <ul class="navi first  menu-depth-1">
        <li a="" id="nav-menu-item-2115" class="   menu-item-depth-1 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children has_children normal_menu_item"><a href="http://localhost/wordpress/page-d-exemple/" class="menu-link  sub-menu-link"><span>Page d’exemple</span></a>
          <ul class="navi  navi menu-depth-2">
            <li a="" id="nav-menu-item-2116" class=" navi  menu-item-depth-2 menu-item menu-item-type-post_type menu-item-object-page normal_menu_item"><a href="http://localhost/wordpress/page-b/" class="menu-link  sub-menu-link"><span>Page B</span></a></li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</nav>

关于html - 双普通和大型菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46251537/

相关文章:

html - DIV 内容超出父级的宽度

javascript - React Native flexbox - 检测行中的最后一个元素

css - IE10 有 flex-grow 吗?

html - 将 div rgba 悬停在背景图像上而不改变文本颜色的不透明度

javascript - 通过 JavaScript 编辑 css(使用 calc)

javascript - 表单字段中的切换图标

html - flexbox 按钮元素未获得宽度的 50%

jquery - 动态添加按钮到数据表行

javascript - 如果我点击外部,让下拉菜单消失

html - 如何从左对齐标题菜单?我在左边看到一个意想不到的边距。请帮助