【问题标题】:How to expand an absolutely positioned list如何扩展绝对定位列表
【发布时间】:2021-04-23 22:36:36
【问题描述】:

是否可以告诉绝对定位的列表项将下一个列表项向下推? https://jsfiddle.net/230cfs4g/ 在此示例中,子菜单下的列表项与其下的链接重叠。

我的目标是让它下推其他链接,类似于移动版本(包含)的功能,同时仍然保持悬停在您期望从桌面菜单中获得的内容方面..

<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Raleway&display=swap" rel="stylesheet">
<nav>
   <div class="nav-menu">
      <div class="menu-navmenu-container">
         <ul id="menu-navmenu" class="menu">
            <li id="menu-item-3499" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3499"><a href="=">Home</a></li>
            <li id="menu-item-3855" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-3855 menu-item-with-children">
               <a>Services</a>
               <ul class="sub-menu">
                  <li id="menu-item-4498" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-4498 menu-item-with-children">
                     <a href="">SubMenu</a>
                     <ul class="sub-menu">
                        <li id="menu-item-3664" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3664"><a href="=">Link</a></li>
                        <li id="menu-item-4339" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-4339 menu-item-with-children">
                           <a href="=">Link</a>
                           <ul class="sub-menu">
                              <li id="menu-item-3497" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3497"><a href="=">Link</a></li>
                           </ul>
                        </li>
                     </ul>
                  </li>
                  <li id="menu-item-3529" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3529"><a href="=">Link</a></li>
                  <li id="menu-item-4219" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4219"><a href="=">Link</a></li>
                  <li id="menu-item-3585" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3585"><a href="=">Link</a></li>
               </ul>
            </li>
         </ul>
      </div>
   </div>
</nav>

body {
  background-color: #191919;}
a {
  font-family: 'Raleway', sans-serif;
}
p {color: #fff;}
.menu-item-with-children > a::after {
    font-family: "Font Awesome 5 Free";
    font-size: 15px;
    line-height: 16px;
    font-weight: 900;
    content: "\f078";
    padding-left: 5px;
}

.sub-menu  {
  display: none;
}
.active {display: block;}


.menu {
  background-color: white;
  white-space:nowrap;
 margin: auto;
  width: 100%;
  
}
.menu-item {

}
.menu-item a {
  color: #666;
  padding: 5px;
  font-size: 24px;
  font-weight: 500;
  text-decoration: none;
  
}

.menu li {
  list-style-type: none;
}

.menu-item a:hover {
  color: #007bff;
  background-color: #cfe6ff;
}

.sub-menu {
  
padding-left: 20px;
}

.menu li a {
  display: block;
}
.sub-menu li a {
  font-size: 20px;
  padding: 5px;
 }
.menu-item-with-children .active {
font-weight: bold;

}
.menu {background-color: #fff;}

.sub-menu.active {
  background-color: #fff;

}

.menu-item-with-children .active  li {
    border-left: 2px solid #c9c9c9;

  padding-left: 20px;
}

/*Desktop */

@media all and (min-width: 960px) {
  .menu {
  display: flex;
    margin-top: 6px;
  }
  
  .menu-item {
  width: auto;
  }
  .menu-item a {
    font-size: 24px ;
    padding: 5px 25px 0 25px;
  }
 
  .sub-menu {
    position: fixed;
   padding: 0;
    min-width: 200px;

  }
  
 /*Trying to figure out how to get the list items to push the content down*/```

【问题讨论】:

    标签: css navigation absolute


    【解决方案1】:

    我认为在这种情况下不应该绝对定位。请参阅此请求。

    jQuery('.menu-item').each(function() {
      let _this = jQuery(this);
      if (_this.children('ul').length) {
        _this.addClass('menu-item-with-children');
      }
    
    });
    jQuery('.menu').on('click', '.menu-item > a', function(e) {
      e.preventDefault();
      if (!jQuery(this).hasClass("active")) {
        jQuery(this).addClass('active')
        jQuery(this).next('ul').addClass('active')
        jQuery(this).children().addClass('active')
        jQuery(this).parent().addClass('active').siblings().find('.active').removeClass('active')
          .parent().removeClass('active');
      }
    
      //Not sure why this works but what the hell.
      else if (jQuery(this).removeClass('active')) {
        jQuery(this).next('ul').removeClass('active')
    
        jQuery(this).children().removeClass('active')
        jQuery(this).parent().removeClass('active').children().find('.active').removeClass('active').siblings().find('.active').removeClass('active')
          .parent().removeClass('active');
      } else {
    
    
        jQuery(this).parent().removeClass('active').siblings().find('.active').removeClass('active').children().find('.active').removeClass('active')
          .parent().removeClass('active');
      }
    
    
      //Unused atm, may need lader
      //else if (jQuery(this).removeClass('active')){
      //jQuery(this).next('ul').removeClass('active')
    
      //      jQuery(this).children().removeClass('active')
      //jQuery(this).parent().removeClass('active').siblings().find('.active').removeClass('active')
      //.parent().removeClass('active');
      //     }
    
    
    });
    body {
      background-color: #191919;
    }
    
    a {
      font-family: 'Raleway', sans-serif;
    }
    
    p {
      color: #fff;
    }
    
    .menu-item-with-children>a::after {
      font-family: "Font Awesome 5 Free";
      font-size: 15px;
      line-height: 16px;
      font-weight: 900;
      content: "\f078";
      padding-left: 5px;
    }
    
    .sub-menu {
      display: none;
    }
    
    .active {
      display: block;
    }
    
    .menu {
      background-color: white;
      white-space: nowrap;
      margin: auto;
      width: 100%;
    }
    
    .menu-item {}
    
    .menu-item a {
      color: #666;
      padding: 5px;
      font-size: 24px;
      font-weight: 500;
      text-decoration: none;
    }
    
    .menu li {
      list-style-type: none;
    }
    
    .menu-item a:hover {
      color: #007bff;
      background-color: #cfe6ff;
    }
    
    .sub-menu {
      padding-left: 20px;
    }
    
    .menu li a {
      display: block;
    }
    
    .sub-menu li a {
      font-size: 20px;
      padding: 5px;
    }
    
    .menu-item-with-children .active {
      font-weight: bold;
    }
    
    .menu {
      background-color: #fff;
    }
    
    .sub-menu.active {
      background-color: #fff;
    }
    
    .menu-item-with-children .active li {
      border-left: 2px solid #c9c9c9;
      padding-left: 20px;
    }
    
    
    /*Desktop */
    
    @media all and (min-width: 960px) {
      .menu {
        display: flex;
        margin-top: 6px;
      }
      .menu-item {
        width: auto;
      }
      .menu-item a {
        font-size: 24px;
        padding: 5px 25px 0 25px;
      }
      .sub-menu {
        position: fixed;
        padding: 0;
        min-width: 200px;
      }
      /* Added this*/
      .sub-menu.nested {
        position: relative;
      }
    }
    
    
    /*Trying to figure out how to get the list items to push the content down*/
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <link rel="preconnect" href="https://fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css2?family=Raleway&display=swap" rel="stylesheet">
    <nav>
      <div class="nav-menu">
        <div class="menu-navmenu-container">
          <ul id="menu-navmenu" class="menu">
            <li id="menu-item-3499" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3499"><a href="=">Home</a></li>
            <li id="menu-item-3855" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-3855 menu-item-with-children">
              <a>Services</a>
              <ul class="sub-menu">
                <li id="menu-item-4498" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-4498 menu-item-with-children">
                  <a href="">SubMenu</a>
                  
                  <ul class="sub-menu nested">
                    <li id="menu-item-3664" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3664"><a href="=">Link</a></li>
                    <li id="menu-item-4339" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-4339 menu-item-with-children">
                      <a href="=">Link</a>
                      <ul class="sub-menu">
                        <li id="menu-item-3497" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3497"><a href="=">Link</a></li>
                      </ul>
                    </li>
                  </ul>
                </li>
                <li id="menu-item-3529" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3529"><a href="=">Link</a></li>
                <li id="menu-item-4219" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4219"><a href="=">Link</a></li>
                <li id="menu-item-3585" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3585"><a href="=">Link</a></li>
              </ul>
            </li>
          </ul>
        </div>
      </div>
    </nav>
    <p>test</p>

    【讨论】:

    • 所以那个不起作用的原因是它弹出在子菜单的顶部。我试图弄清楚如何让它把子菜单的其余部分向下推。
    【解决方案2】:

    .sub-menu * {position: static;} 显然是我所有问题的答案。

    【讨论】:

      猜你喜欢
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      相关资源
      最近更新 更多