导航下拉菜单显示太左
Posted
技术标签:
【中文标题】导航下拉菜单显示太左【英文标题】:navigation drop down displays too far left 【发布时间】:2018-10-11 03:50:40 【问题描述】:我一直在努力解决这个问题,但无法弄清楚我缺少什么。我希望下拉列表显示在其父项的正下方。该列表显示,但全部都向左移动,并强制剩余的导航项目下拉到另一行。我已经包含了当前外观的 sn-p 和 what I want it to look like 的图像。另外,我一直在试图弄清楚如何使用下拉列表将 fa fa-caret 添加到导航项目中。请帮忙!
.navbar
background: linear-gradient(#9E0A0C, #EBEBEB);
padding: 10px;
border-top: solid 1px #000000;
overflow: hidden;
.navbar a
text-decoration: none;
color: #ffffff;
font-weight: bolder;
font-size: 20px;
text-transform: uppercase;
padding: 3px 5px;
margin: auto;
/*float: left; may need to be removed to show borders*/
display: inline;
.navbar ul
padding: 0;
margin-top: 0;
width: auto;
.navbar li
border-left: solid 2px #000000;
display: inline;
list-style-type: none;
width: 800px;
padding: 0;
.navbar a:active
background-color: #000000;
.navbar a:hover
background-color: #ddd;
color: black;
font-size: 20px;
li:first-child
border-left: none;
.dropdown
display: block;
overflow: hidden;
/*float: left;*/
.list
display: none;
min-width: 50px;
max-width: 150px;
z-index: 2;
box-shadow: 0 8px 16px 0 #e7e7e7;
background: #050243;
.list a
color: #000000;
float: none;
font-size: 14px;
text-decoration: none;
display: block;
text-align: left;
background: #B6B6B6;
columns: 2;
.list a:hover
background-color: #EEEEEE;
.dropdown:hover .list
display: block;
form
float: right;
padding: 0px;
margin: 0;
overflow: auto;
input
border: solid 1px #000000;
background-image: url(pics/search.png);
background-repeat: no-repeat;
background-position: center right;
background-size: 15px;
border-radius: 5px;
padding: 5px 2px;
width: 250px;
<div class="navbar">
<ul>
<li><a href="#">Home</a></li>
<li class="dropdown"><a href="#" class="dropbtn">Our Lodge</a>
<div class="list">
<a href="#">NEWS</a>
<a href="#">FACILITIES</a>
<a href="#">OFFICERS</a>
<a href="#">GUEST BOOK</a>
</div>
</li>
<li class="dropdown"><a href="#" class="dropbtn">Events</a>
<div class="list">
<a href="#">CALENDAR</a>
<a href="#">BINGO</a>
</div>
</li>
<li class="dropdown"><a href="#" class="dropbtn">Contact Us</a>
<div class="list">
<a href="#">BECOME AN ELK</a>
</div>
</li>
<form action="#">
<input type="text" placeholder="Search.." name="search">
</form>
</ul>
</div>
【问题讨论】:
【参考方案1】:您可以通过首先将 div.list 元素设置为绝对定位来实现此目的。 'display:block' 属性将所有其他内容推送到下一行,因为块元素占用了空间。
正如您现在看到的,列表不再向下推送内容,但现在它未与正确的导航项对齐。我们还将添加一个 left:0 以便 div.list 位于父属性的左侧。
现在父属性需要一个相对位置,以便子元素上的 left:0 相对于父元素定位。
.dropdown:hover .list
display: block;
position: absolute;
left: 0;
.navbar li
border-left: solid 2px #000000;
display: inline;
list-style-type: none;
width: 800px;
padding: 0;
position: relative;
【讨论】:
谢谢,这有效,但现在列表只显示第一个 li。我相信我必须调整 z-index。 li 中缺少什么?哪个项目? 我在 ul 中的其他 nav a 元素丢失了。这些是包含至少两个项目的下拉菜单。在这一点上,我完全糊涂了自己。我仍在学习 css,我已经尝试了所有给定的选项,现在我不知道要更改什么来修复它。我真的需要帮助。【参考方案2】:您的 CSS 代码的问题是,您错过了将 position: relative
和 position: absolute
添加到 .dropdown
和 .list
选择器,这是创建下拉菜单所必需的。试试这个代码。
.navbar
background: linear-gradient(#9E0A0C, #EBEBEB);
padding: 10px;
border-top: solid 1px #000000;
.navbar a
text-decoration: none;
color: #ffffff;
font-weight: bolder;
font-size: 20px;
text-transform: uppercase;
padding: 3px 5px;
margin: auto;
/*float: left; may need to be removed to show borders*/
display: inline;
.navbar ul
padding: 0;
margin-top: 0;
width: auto;
.navbar li
border-left: solid 2px #000000;
display: inline;
list-style-type: none;
width: 800px;
padding: 0;
.navbar a:active
background-color: #000000;
.navbar li:hover > a
background-color: #ddd;
color: black;
li:first-child
border-left: none;
.dropdown
display: block;
overflow: hidden;
position: relative;
/*float: left;*/
.list
display: none;
min-width: 50px;
max-width: 150px;
z-index: 2;
box-shadow: 0 8px 16px 0 #e7e7e7;
background: #050243;
position: absolute;
left: 0;
top: 100%;
.list a
color: #000000;
float: none;
font-size: 14px;
text-decoration: none;
display: block;
text-align: left;
background-color: #B6B6B6;
columns: 2;
.list a:hover
background-color: #EEEEEE;
.dropdown:hover .list
display: block;
form
float: right;
padding: 0px;
margin: 0;
overflow: auto;
input
border: solid 1px #000000;
background-image: url(pics/search.png);
background-repeat: no-repeat;
background-position: center right;
background-size: 15px;
border-radius: 5px;
padding: 5px 2px;
width: 250px;
【讨论】:
谢谢,这也可以,但我的完整列表没有显示。【参考方案3】:--> 请更新您现有文件中的以下代码
.navbar
background: linear-gradient(#9E0A0C, #EBEBEB);
padding: 10px;
border-top: solid 1px #000000;
.navbar a
text-decoration: none;
color: #ffffff;
font-weight: bolder;
font-size: 20px;
text-transform: uppercase;
padding: 3px 5px;
margin: auto;
display: inline;
.navbar ul
padding: 0;
margin-top: 0;
width: auto;
.navbar li
border-left: solid 2px #000000;
display: inline;
list-style-type: none;
width: 800px;
padding: 0;
position: relative;
.navbar a:active
background-color: #000000;
.navbar a:hover
background-color: #ddd;
color: black;
li:first-child
border-left: none;
.dropdown
display: block;
overflow: hidden;
.list
opacity: 0;
visibility: hidden;
min-width: 50px;
max-width: 150px;
z-index: 2;
box-shadow: 0 8px 16px 0 #e7e7e7;
background: #050243;
position: absolute;
top: 20px;
left: 0;
transition: 0.3s ease-in-out;
.list a
color: #000000;
float: none;
font-size: 14px;
text-decoration: none;
display: block;
text-align: left;
background: #dddddd;
columns: 2;
.list a:hover
background-color: #EEEEEE;
.dropdown:hover .list
opacity: 1;
visibility: visible;
form
float: right;
padding: 0px;
margin: 0;
overflow: auto;
input
border: solid 1px #000000;
background-image: url(pics/search.png);
background-repeat: no-repeat;
background-position: center right;
background-size: 15px;
border-radius: 5px;
padding: 5px 2px;
width: 250px;
<div class="navbar">
<ul>
<li><a href="#">Home</a></li>
<li class="dropdown"><a href="#" class="dropbtn">Our Lodge</a>
<div class="list">
<a href="#">NEWS</a>
<a href="#">FACILITIES</a>
<a href="#">OFFICERS</a>
<a href="#">GUEST BOOK</a>
</div>
</li>
<li class="dropdown"><a href="#" class="dropbtn">Events</a>
<div class="list">
<a href="#">CALENDAR</a>
<a href="#">BINGO</a>
</div>
</li>
<li class="dropdown"><a href="#" class="dropbtn">Contact Us</a>
<div class="list">
<a href="#">BECOME AN ELK</a>
</div>
</li>
<form action="#">
<input type="text" placeholder="Search.." name="search">
</form>
</ul>
</div>
【讨论】:
谢谢,这也可以,但我的完整列表没有显示。我已将以下部分更改为 z-index:-1 但它仍然没有显示,有什么建议吗?以上是关于导航下拉菜单显示太左的主要内容,如果未能解决你的问题,请参考以下文章