首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导航下拉菜单重叠无法获得正确的z索引

导航下拉菜单重叠无法获得正确的z索引
EN

Stack Overflow用户
提问于 2017-03-16 01:15:53
回答 2查看 56关注 0票数 0

我正在使用Bootstrap,并且我遇到了dropdowns的问题。我有一些JS,如果下拉框要命中窗口边缘,它会改变下拉框的位置。它会将其移动到parent下拉列表的另一侧。问题是下拉列表与根下拉列表重叠,并且z索引处于关闭状态。

我试着在我能想到的所有东西上调整z-index,但都没有成功。有什么想法吗?

HTML:

代码语言:javascript
复制
<header>
    <div class="container-fluid container-nav">
            <div class="container container-wo-pad">
                <div class="header-home">                       
                    <div class="site-title">                                 
                        <a href="/"><img class="logo" src="">
                        <h1>Site</h1></a>                                
                    </div>                         
                </div>
                <!-- navigation object : U Navigation Items -->
                <div class="nav">
                    <div class="navControl">
                        <a class="nav-btn" href="#"><i class="fa fa-bars" aria-hidden="true"></i> Navigation</a>
                    </div>

                    <ul class="nav-root">
                        <li class="has-sub nav-root-item">
                            <a href="">LinkLinkLinkLink <span class="show-carrot">&#9662;</span> </a>
                            <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                            <ul class="dropdown sub-drop">
                                <li><a href="">Link</a></li>
                                <li class="has-sub">
                                    <a href="">Link <span class="show-carrot">&#9662;</span> </a>
                                    <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                                    <ul class="dropdown sub-drop">
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                    </ul>
                                </li>
                                <li class="has-sub">
                                    <a href="">Link <span class="show-carrot">&#9662;</span> </a>
                                    <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                                    <ul class="dropdown sub-drop">
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                    </ul>
                                </li>
                                <li><a href="">Link</a></li>   
                                <li><a href="">Link</a></li> 
                                <li class="has-sub">
                                    <a href="">Link <span class="show-carrot">&#9662;</span> </a>
                                    <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                                    <ul class="dropdown sub-drop">
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                    </ul>
                                </li>
                                <li class="has-sub">
                                    <a href="">Link <span class="show-carrot">&#9662;</span> </a>
                                    <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                                    <ul class="dropdown sub-drop">
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                    </ul>
                                </li>
                                <li class="has-sub">
                                  <a href="">Link <span class="show-carrot">&#9662;</span> </a>
                                  <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                                  <ul class="dropdown sub-drop">
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                    </ul>
                                </li>  
                                <li><a href="">Link</a></li>
                                <li><a href="" target="_blank">Link</a></li>                        
                            </ul>
                        </li>                    
                        <li class="has-sub nav-root-item">
                            <a href="">This one <span class="show-carrot">&#9662;</span> </a>
                            <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                            <ul class="dropdown sub-drop">
                                <li class="has-sub">
                                  <a href="">Then this one <span class="show-carrot">&#9662;</span> </a>
                                  <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                                  <ul class="dropdown sub-drop">
                                        <li><a href="">Link</a></li>
                                        <li class="has-sub">
                                          <a href="">Link <span class="show-carrot">&#9662;</span> </a>
                                          <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                                          <ul class="dropdown sub-drop">
                                            <li><a href="">Link </a></li>
                                            <li><a href="">Link</a></li>
                                            <li><a href="" target="_blank">Link</a></li>
                                          </ul>  
                                        </li>
                                        <li class="has-sub">
                                          <a href="">Last One <span class="show-carrot">&#9662;</span> </a>
                                          <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                                          <ul class="dropdown sub-drop">
                                            <li><a href="">LinkLinkLinkLinkLink</a></li>
                                            <li><a href="">Link</a></li>
                                          </ul>  
                                        </li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                        <li><a href="">Link</a></li>
                                    </ul>
                                  </li>
                                <li><a href="">Link Link Link Link</a></li>
                                <li><a href="">Link</a></li>
                                <li><a href="">Link</a></li>
                            </ul>
                        </li>                    
                        <li class="nav-root-item"><a href="">Link</a></li>
                        <li class="nav-root-item"><a href="">Link</a></li>                            
                        <li class="has-sub nav-root-item">
                            <a href="">Link <span class="show-carrot">&#9662;</span> </a>
                            <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                            <ul class="dropdown sub-drop">
                                <li><a href="">Sub link 1</a></li>
                                <li><a href="">Sub link 2</a></li>
                                <li><a href="">Sub link 3</a></li>
                                <li class="has-sub">
                                    <a href="">dropdown <span class="show-carrot">&#9662;</span> </a>
                                    <span class="open-icon"><i class="fa fa-plus open-close" aria-hidden="true"></i></span>
                                    <ul class="dropdown sub-drop">
                                        <li><a href="">Sub link 1</a></li>
                                        <li><a href="">Sub link 2</a></li>
                                        <li><a href="">Sub link 3</a></li>
                                        <li><a href="">Sub link 4</a></li>
                                    </ul>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </div>
            </div>
        </div>        
    </header>

CSS:

代码语言:javascript
复制
.container-nav {
      background-color: #00bcd4;
      margin-top: -1px; /* compensate for when alert isn't there */
      padding-bottom: 10px;
    }

    .nav .navControl {
      display: none;    
      cursor: pointer;
      font-size: 16px;
      border: 1px solid rgba(0, 0, 0, 0.1);
      margin: 10px 0;
    }

    .open-icon {
      float: right;
      padding: 15px 20px;
    }

    .nav ul {
      list-style: none;
      margin-top: 0;
      margin-bottom: 0;
      padding: 0;
      border-top: 1px solid rgba(0, 0, 0, 0.1);
    }

    .nav li {
      /* margin-left: -4px; */
      display: block;    
      position: relative;    
      z-index: 1;
      font-size: 16px;
      border-bottom: 1px solid rgba(0, 0, 0, 0.1);
    }

    .nav a {
      padding: 15px 20px;
      display: inline-block;    
      color: #fff;
      text-decoration: none;
      text-align: left;
    }

    .nav a:hover {
      color: #fff;
    }

    .nav-root li a {
      text-decoration: underline;
    }

    .nav .dropdown {
      text-align: left;
      width: 100%;
    }

    .nav .dropdown li {
      margin: 0;
      display: block;
    }

    .nav .dropdown a {
      padding: 15px 20px;
      border-right: 0;
      margin-right: 10px;
      text-shadow: 0px 1px 1px #b9afaf;
    }

    .nav .dropdown li:last-child a {
      margin-right: 0;
    }

    .has-sub .open-icon {
      border-left: 1px solid rgba(0, 0, 0, 0.1);
    }

    .sub-drop {
      display: none;
      background-color: #0097A7;
    }



    /* Custom, iPhone Retina */ 
    @media only screen and (min-width : 320px) {
      .site-title {
        width: 100%;
      }
      .site-title h1{
        font-size: 33px;
      }        
      .search {
        width: 100%
      }
    }

    /* Extra Small Devices, Phones */ 
    @media only screen and (min-width : 480px) {

    }
    @media all and (max-width: 600px) {
      .site-title {
        width: 100%;
        text-align: center;
      }
      .search {
        width: 100%
      }
      .nav .navControl {
        display: block;
      }

      .nav-root {
        display: none;
      }

      .show-carrot {
        display: none;
      }
    }

    @media all and (min-width: 600px) {
      .site-title {
        display: table-cell;
        width: 50%;
        vertical-align: middle;
      }
      .search {
        display: table-cell;
        width: 50%;
        vertical-align: middle;
      }
      .search-field {
        width: 50%;
      }
      .logo {
        width: 50px;
      }
      .home-container {
        margin-top: -34px;
      }

      .container-no-pad {
        width: 100%;
        margin: 0 auto;
      }
      .container-nav {
        height: 189px;
      }

      .nav {
        position: relative;
        z-index: 5;
        max-width: 1170px;
        margin: 0 auto;
      }
      .nav-root {
        padding-left: 0;
        display: block;
      }

      .nav-root li a {
        text-decoration: none;
        text-align: left;
      }

      .nav ul {
        border: 0;
        white-space: nowrap;
      }

      .nav li {
        /* margin-right: -4px; */
        display: inline-block;
        border: 0;
      }

      .nav a {
        width: 100%;
      }

      .nav a:hover {

      }

      .nav .dropdown {
        display: none;        
        background: #80DEEA;         
        position: absolute;
        top: 100%;
        left: 0;
        width: auto;
      }

      .nav .dropdown li {
          display: block;
      }

      .nav .dropdown a {
          margin-right: 0;        
          white-space: nowrap;
      }
      .nav .dropdown a:hover {
          background: #00bcd4;
      }

      .nav span {
        display: inline;        
        position: relative;
        left: 5px;
      }

      .nav a:hover + .dropdown,
      .nav .dropdown:hover {
        display: block;
      }

      /* desktop hover sub dropdown show */
      .nav a:hover + span + .dropdown {
        display: block;
      }

      .dropdown .dropdown {
        left: 100%;
        top: 0;
      }

      .sub-drop {
        display: block;
        box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
      }

      .open-icon {
        display: none !important;
      }
      .show-carrot {
        display: block;
      }
    }

    /*----------------------------------------------------------------------------------------------------------------*\
        NAV dropdown z-index
    \*----------------------------------------------------------------------------------------------------------------*/
    .dropdown {
      z-index: 1000;
    }

    .dropdown .dropdown {
      z-index: 2000;
    }

    .dropdown .dropdown .dropdown {
      z-index: 3000;
    }

    .dropdown li {
      z-index: 1001;
    }

    .dropdown .dropdown li {
      z-index: 2002;
    }

    .dropdown .dropdown .dropdown li {
      z-index: 3003;
    }

jQuery:

代码语言:javascript
复制
$(document).ready(function() {

    $('.dropdown').parent().hover(function() {
    var menu = $(this).find("ul");
    var menupos = $(menu).offset();

    if (menupos.left + menu.width() > $(window).width()) {
        var newpos = -$(menu).width();
        menu.css({ left: newpos });    
    }
    });
});

Link to Fiddle

该问题的图像:

EN

回答 2

Stack Overflow用户

发布于 2017-03-16 02:20:38

我觉得你有很多不必要的css样式,但主要是你在最后一个ul上遗漏了一个z索引(我用newStyle类更新了它)。

https://jsfiddle.net/ctxp4f3u/4/

代码语言:javascript
复制
.newStyle {
   position: absolute;
   z-index: 3000;
}
票数 0
EN

Stack Overflow用户

发布于 2017-03-16 03:12:57

我在你的样式中发现了一些变化,但是jsfiddle也有其他的修改。

代码语言:javascript
复制
.container-nav {
      background-color: #00bcd4;
      margin-top: -1px; /* compensate for when alert isn't there */
      padding-bottom: 10px;
    }

    .nav .navControl {
      display: none;    
      cursor: pointer;
      font-size: 16px;
      border: 1px solid rgba(0, 0, 0, 0.1);
      margin: 10px 0;
    }

    .open-icon {
      float: right;
      padding: 15px 20px;
    }

    .nav ul {
      list-style: none;
      margin-top: 0;
      margin-bottom: 0;
      padding: 0;
      border-top: 1px solid rgba(0, 0, 0, 0.1);
    }

    .nav li {
      /* margin-left: -4px; */
      display: block;    
      position: relative;    
      font-size: 16px;
      border-bottom: 1px solid rgba(0, 0, 0, 0.1);
    }

    .nav a {
      padding: 15px 20px;
      display: inline-block;    
      color: #fff;
      text-decoration: none;
      text-align: left;
    }

    .nav a:hover {
      color: #fff;
    }

    .nav-root li a {
      text-decoration: underline;
    }

    .nav .dropdown {
      text-align: left;
      width: 100%;
    }

    .nav .dropdown .dropdown .dropdown li {
      margin: 0;
      z-index:8888
      display: block;
      background-color:#00bcd3
    }
    .nav .dropdown a {
      padding: 15px 20px;
      border-right: 0;
      margin-right: 10px;
      width:80%;
      text-shadow: 0px 1px 1px #b9afaf;
    }

    .nav .dropdown li:last-child a {
      margin-right: 0;
    }

    .has-sub .open-icon {
      border-left: 1px solid rgba(0, 0, 0, 0.1);
    }

    .sub-drop {
      display: none;
      background-color: #0097A7;
    }



    /* Custom, iPhone Retina */ 
    @media only screen and (min-width : 320px) {
      .site-title {
        width: 100%;
      }
      .site-title h1{
        font-size: 33px;
      }        
      .search {
        width: 100%
      }
    }

    /* Extra Small Devices, Phones */ 
    @media only screen and (min-width : 480px) {

    }
    @media all and (max-width: 600px) {
      .site-title {
        width: 100%;
        text-align: center;
      }
      .search {
        width: 100%
      }
      .nav .navControl {
        display: block;
      }

      .nav-root {
        display: none;
      }

      .show-carrot {
        display: none;
      }
    }

    @media all and (min-width: 600px) {
      .site-title {
        display: table-cell;
        width: 50%;
        vertical-align: middle;
      }
      .search {
        display: table-cell;
        width: 50%;
        vertical-align: middle;
      }
      .search-field {
        width: 50%;
      }
      .logo {
        width: 50px;
      }
      .home-container {
        margin-top: -34px;
      }

      .container-no-pad {
        width: 100%;
        margin: 0 auto;
      }
      .container-nav {
        height: 189px;
      }

      .nav {
        position: relative;
        z-index: 5;
        max-width: 1170px;
        margin: 0 auto;
      }
      .nav-root {
        padding-left: 0;
        display: block;
      }

      .nav-root li a {
        text-decoration: none;
        text-align: left;
      }

      .nav ul {
        border: 0;
        white-space: nowrap;
      }

      .nav li {
        /* margin-right: -4px; */
        display: inline-block;
        border: 0;
      }

      .nav a {
        width: 100%;
      }

      .nav a:hover {

      }

      .nav .dropdown {
        display: none;        
        background: #80DEEA;         
        position: absolute;
        top: 100%;
        left: 0;
        width: auto;
      }

      .nav .dropdown li {
          display: block;
          width:200px;
      }

      .nav .dropdown a {
          margin-right: 0;        
          white-space: nowrap;
      }
      .nav .dropdown a:hover {
          background: #00bcd4;
      }

      .nav span {
        display: inline;        
        position: relative;
        left: 5px;
      }

      .nav a:hover + .dropdown,
      .nav .dropdown:hover {
        display: block;
      }
      .nav .dropdown .dropdown:hover
      {
        display:block
      }

      /* desktop hover sub dropdown show */
      .nav a:hover + span + .dropdown {
        display: block;
      }

      .dropdown .dropdown {
        left: 100%;
        top: 0;
      }

      .sub-drop {
        display: block;
        box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
      }

      .open-icon {
        display: none !important;
      }
      .show-carrot {
        display: block;
      }
    }

    /*----------------------------------------------------------------------------------------------------------------*\
        NAV dropdown z-index
    \*----------------------------------------------------------------------------------------------------------------*/
    .dropdown {
      z-index: 1000;
    }

    .dropdown .dropdown {
      z-index: 2000;
    }
/*
    .dropdown .dropdown .dropdown {
      z-index: 9999;

    }

    .dropdown li {
      z-index: 1001;
    }

    .dropdown .dropdown li {
      z-index: 2002;
    }

    .dropdown .dropdown .dropdown li a {
      z-index: 9999;
    }
     .dropdown .dropdown .dropdown li {
      z-index: 9998;
      display:block
    }*/

请查看下面的jsfiddle示例链接,希望对您有所帮助。

Example On jsfiddle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42816506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档