gpt4 book ai didi

javascript - 在可滚动容器中定位绝对下拉列表

转载 作者:太空狗 更新时间:2023-10-29 14:17:11 25 4
gpt4 key购买 nike

是否可以让position absolute dropdown停留在可滚动容器的顶部,并在滚动时随着position relative parent一起移动?现在,下拉菜单出现在可滚动区域内。

下面的截图是我想要实现的。如果需要,我也愿意接受 javascript 解决方案。

enter image description here

jsFiddle

.navbar {
padding-left: 0;
white-space: nowrap;
overflow: auto;
}

.navbar-item {
position: relative;
margin-left: 0;
list-style: none;
display: inline-block;
width: 200px;
text-align: center;
border: 1px solid;
}

.dropdown {
position: absolute;
padding-left: 0;
width: 200px;
box-shadow: 0 1px 0 1px black;
display: none;
}

.dropdown-item {
margin-left: 0;
list-style: none;
}

.navbar-item:hover .dropdown {
display: block;
}
<ul class="navbar">
<li class="navbar-item">
<a>Item A</a>
<ul class="dropdown">
<li class="dropdown-item">Sub Item A</li>
<li class="dropdown-item">Sub Item B</li>
<li class="dropdown-item">Sub Item C</li>
</ul>
</li>
<li class="navbar-item"><a>Item B</a></li>
<li class="navbar-item"><a>Item C</a></li>
<li class="navbar-item"><a>Item D</a></li>
<li class="navbar-item"><a>Item E</a></li>
</ul>

最佳答案

一个简单的方法是使下拉菜单的位置固定,但要确保相应地应用左值和上值。另一种方法是将下拉菜单附加到 ul 元素之外,这样当它出现时就不会被包裹在其中。

.dropdown {
position: fixed;
}

.navbar {
padding-left: 0;
white-space: nowrap;
overflow: auto;
}

.navbar-item {
position: relative;
margin-left: 0;
list-style: none;
display: inline-block;
width: 200px;
text-align: center;
border: 1px solid;
}

.dropdown {
position: fixed;
background-color: #fff;
padding-left: 0;
width: 200px;
box-shadow: 0 1px 0 1px black;
display: none;
}

.navbar-item {
margin-left: 0;
list-style: none;
}

.navbar-item:hover .dropdown {
display: block;
}
<ul class="navbar">
<li class="navbar-item">
<a>Item A</a>
<ul class="dropdown">
<li class="dropdown-item">Sub Item A</li>
<li class="dropdown-item">Sub Item B</li>
<li class="dropdown-item">Sub Item C</li>
</ul>
</li>
<li class="navbar-item"><a>Item B</a></li>
<li class="navbar-item"><a>Item C</a></li>
<li class="navbar-item"><a>Item D</a></li>
<li class="navbar-item"><a>Item E</a></li>
</ul>

编辑

我又添加了一个不使用固定位置的片段。它在打开时根据父偏移量更改其坐标。

$('#menu1, #submenu1').mouseover(function(event) {
$('#submenu1').addClass("show").css($('#menu1').offset());
});

$('#menu1, #submenu1').mouseleave(function(event) {
$('#submenu1').removeClass("show");
});
.navbar {
padding-left: 0;
white-space: nowrap;
overflow: auto;
}

.navbar-item {
position: relative;
margin-left: 0;
list-style: none;
display: inline-block;
width: 200px;
text-align: center;
border: 1px solid;
}

.dropdown {
position: absolute;
padding-left: 0;
width: 200px;
box-shadow: 0 1px 0 1px black;
display: none;
}

.dropdown.show {
display: block;
margin-left: 1px;
background-color: #fff;
}

.dropdown-item {
margin-left: 0;
list-style: none;
}

.navbar-item:hover .dropdown {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="navbar">
<li id="menu1" class="navbar-item">
<a>Item A</a>
</li>
<li class="navbar-item"><a>Item B</a></li>
<li class="navbar-item"><a>Item C</a></li>
<li class="navbar-item"><a>Item D</a></li>
<li class="navbar-item"><a>Item E</a></li>
</ul>

<ul id="submenu1" class="dropdown">
<li class="dropdown-item">Sub Item A</li>
<li class="dropdown-item">Sub Item B</li>
<li class="dropdown-item">Sub Item C</li>
</ul>

关于javascript - 在可滚动容器中定位绝对下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48172042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com