如何防止垂直堆叠的导航下拉菜单覆盖移动​​设备中的其他导航链接

How to prevent vertically stacked navigation drop downs from covering other nav links in mobile

我正在制作响应式顶部导航栏,当在较小的屏幕上查看时,它会垂直堆叠。我的问题是,在移动视图中,当您将鼠标悬停在导航项上以展开下拉菜单时,下拉菜单会覆盖其他导航 links。

我试图让下方的导航元素向下移动,以便在导航 link 悬停时为下拉菜单腾出空间。我想避免使用 jQuery 或 Bootstrap 并且尽可能只使用 HTML 和 CSS。

JSFiddle link(一定要调整大小 window 或在手机上查看): https://jsfiddle.net/adilworth/fzrnvukm/3/

我尝试过的: 我已经广泛尝试更改 CSS 位置元素,但我似乎无法让它按照我想要的方式运行。

HTML:

<ul id="navigation">
<li><a href="#">Product 1</a>
<ul>
<li><a href="#">rx.com </a></li>
<li><a href="#">Resources</a></li>
<li><a href="#">Copay Cards</a></li>
</ul>
</li>
<li><a href="#">Product 2</a>
<ul>
<li><a href="#">e.com </a></li>
<li><a href="#">Resources</a></li>
<li><a href="#">Copay Cards</a></li>
<li><a href="#">Informational Video</a></li>
</ul>
</li>
<li><a href="#">INSOMNIA EDUCATION</a>
<ul>
<li><a href="#">Complete Night Sleep Resources</a></li>
<li><a href="#">sleep.com </a></li>
</ul>
</li>
<li><a href="#">PAIN MGMT EDUCATION</a>
<ul>
<li><a href="#">Safer Pain Management Resources</a></li>
<li><a href="#">painmanagement.com </a></li>
</ul>
</li>
<li><a href="#">MEDICAL AFFAIRS</a>
<ul>
<li><a href="#">Request Clinical Reprints</a></li>
<li><a href="#">Schedule a Scientific Session </a></li>
</ul>
</li>
</ul>

CSS:

/* Main Navigation */
#nav {
    position:relative;
    width:620px;
    margin:0 auto;
    margin-top:50px;
    padding:10px;
}

ul#navigation {
    margin:0px auto;
    position:relative;
    float:left;
}

ul#navigation li {
    display:inline;
    font-size:12px;
    font-weight:bold;
    margin:0;
    padding:0;
    float:left;
    position:relative;
}

ul#navigation li a {
    width: 234px;
    padding:10px 25px;
    color: black;
    text-decoration:none;
    display:inline-block;
    background: #ebebeb;
}

ul#navigation li a:hover {
    background:#ebebeb;
    color:black;
}

ul#navigation li a.first {
    border-left: 0 none;
}

ul#navigation li a.last {
    border-right: 0 none;
}

ul#navigation li:hover > a {
    background:#ebebeb;
}

/* Drop-Down Navigation */
ul#navigation li:hover > ul
{
/*these 2 styles are very important,
being the ones which make the drop-down to appear on hover */
    visibility:visible;
    opacity:1;
}

ul#navigation ul, ul#navigation ul li ul {
    list-style: none;
    margin: 0;
    padding: 0;
/*the next 2 styles are very important,
being the ones which make the drop-down to stay hidden */
    visibility:hidden;
    opacity:0;
    position: absolute;
    z-index: 99999;
    width:234px;
    background:#ebebeb;
}

ul#navigation ul {
    top: 43px;
    left: 1px;
}

ul#navigation ul li ul {
    top: 0;
    left: 181px; /* strong related to width:180px; from above */
}

ul#navigation ul li {
    clear:both;
    width:55px;

}

ul#navigation ul li a {
    background:none;
    padding:7px 15px;
    color:#black;
    text-decoration:none;
    display:inline-block;
    border:0 none;
    float:left;
    clear:both;
    width:150px;
}

问题在于使用 position: absolute;。然后你发现使用 visibility: hidden/visible 也不好:-)

/* Main Navigation */
#nav {
    position:relative;
    width:620px;
    margin:0 auto;
    margin-top:50px;
    padding:10px;
}

ul#navigation {
    margin:0px auto;
    position:relative;
    float:left;
}

ul#navigation li {
    display:inline;
    font-size:12px;
    font-weight:bold;
    margin:0;
    padding:0;
    float:left;
    position:relative;
}

ul#navigation li a {
    width: 234px;
    padding:10px 25px;
    color: black;
    text-decoration:none;
    display:inline-block;
    background: #ebebeb;
}

ul#navigation li a:hover {
    background:#ebebeb;
    color:black;
}

ul#navigation li a.first {
    border-left: 0 none;
}

ul#navigation li a.last {
    border-right: 0 none;
}

ul#navigation li:hover > a {
    background:#ebebeb;
}

/* Drop-Down Navigation */
ul#navigation li:hover > ul
{
/*these 2 styles are very important,
being the ones which make the drop-down to appear on hover */
    display: block; /* here change visiblity > display */
    opacity:1;
}

ul#navigation ul, ul#navigation ul li ul {
    list-style: none;
    margin: 0;
    padding: 0;
/*the next 2 styles are very important,
being the ones which make the drop-down to stay hidden */
    /*visibility:hidden;*/
    opacity:0;
    /*position: absolute; */
    display: none; /* change visibility > display */
    z-index: 99999;
    width:234px;
    background:#ebebeb;
}

ul#navigation ul {
    top: 43px;
    left: 1px;
}

ul#navigation ul li ul {
    top: 0;
    left: 181px; /* strong related to width:180px; from above */
}

ul#navigation ul li {
    clear:both;
    width:55px;

}

ul#navigation ul li a {
    background:none;
    padding:7px 15px;
    color:black;
    text-decoration:none;
    display:inline-block;
    border:0 none;
    float:left;
    clear:both;
    width:150px;
}
<ul id="navigation">
<li><a href="#">Product 1</a>
<ul>
<li><a href="#">rx.com </a></li>
<li><a href="#">Resources</a></li>
<li><a href="#">Copay Cards</a></li>
</ul>
</li>
<li><a href="#">Product 2</a>
<ul>
<li><a href="#">e.com </a></li>
<li><a href="#">Resources</a></li>
<li><a href="#">Copay Cards</a></li>
<li><a href="#">Informational Video</a></li>
</ul>
</li>
<li><a href="#">INSOMNIA EDUCATION</a>
<ul>
<li><a href="#">Complete Night Sleep Resources</a></li>
<li><a href="#">sleep.com </a></li>
</ul>
</li>
<li><a href="#">PAIN MGMT EDUCATION</a>
<ul>
<li><a href="#">Safer Pain Management Resources</a></li>
<li><a href="#">painmanagement.com </a></li>
</ul>
</li>
<li><a href="#">MEDICAL AFFAIRS</a>
<ul>
<li><a href="#">Request Clinical Reprints</a></li>
<li><a href="#">Schedule a Scientific Session </a></li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<div id="doral_resources">
<h4>Resources</h4>
</div>
<p><br /><br /><br /><br /><br /><br /> <br /><br /></p>
<div id="doral_copaycards">
<h4>Copay Cards</h4>
</div>