简体   繁体   English

在已溢出的父列表前面显示子列表:隐藏的 DIV

[英]Show A Sub-List In Front Of Parent List That Have overflow:hidden DIV

I am creating a side menu that will have a sub-list that will be visible on hover.我正在创建一个侧面菜单,其中包含一个子列表,该子列表将在 hover 上可见。 For that purpose, I have the below code.为此,我有以下代码。

 #sidebar { width: 160px; position: relative; }.parent { width: 160px; height: 400px; position: relative; overflow-y: scroll; overflow-x: hidden; }.child { height: 0px; overflow:hidden; position: absolute; left: 120px; }.sub_menu:hover.child { height: 100px; width: 300px; background: #DDD; }.sub_menu { position: relative; }
 <div id="sidebar"> <ul class="parent"> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li class="sub_menu">YYYYYYYYYYY <ul class="child"> <li>Need To Show This In Full Width</li> <li>XXXXXXXXXX</li> <li>XXXXXXXXXX</li> <li>XXXXXXXXXX</li> </ul> </li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> <li>XXXXXXXXXXXX</li> </ul> </div>

Problem is that my sub-list is hiding behind the parent DIV because of overflow-y: scroll; overflow-x: hidden;问题是我的子列表隐藏在父 DIV 后面,因为overflow-y: scroll; overflow-x: hidden; overflow-y: scroll; overflow-x: hidden; that I need also because I am making a fixed height menu so if contain more item then it will show scroll bar in y-axis only.我也需要,因为我正在制作一个固定高度的菜单,所以如果包含更多项目,那么它将仅在 y 轴上显示滚动条。

So is this possible in my upper code?那么这可能在我的上层代码中吗?

You can set position: relative to the most external <div> ( #sidebar ) and position the submenu using JavaScript.您可以使用 JavaScript 设置position: relative对于最外部的<div> ( #sidebar ) 和 position 子菜单。

 document.querySelectorAll("li.sub_menu").forEach(function(item) { item.addEventListener("mouseover", function() { submenuWrapper = item.querySelector(".child"), menuItemPosTop = (item.offsetTop - document.querySelector("#sidebar > ul").scrollTop) + 20 + "px", menuItemPosLeft = Math.round(item.offsetWidth * 0.75) + "px" submenuWrapper.style.cssText = "top:" + menuItemPosTop + "; left:" + menuItemPosLeft; }) })
 #sidebar { position: relative; } ul { width: 160px; max-height: 400px; overflow-x: hidden; overflow-y: auto; list-style: none; } li { position: static; } li.child { position: absolute; z-index: 10; display: none; } li:hover >.child { display: block; } ul { margin: 1em; color: white; font-family: sans-serif; font-size: 16px; } li { padding: 1em; } li ul { margin: 0; } li.child { cursor: auto; } li.child li { padding: 12px 20px; } li:nth-child(2n) { background: #949494; } li:nth-child(2n+1) { background: #bbbbbb; } li.sub_menu { background: #505050; cursor: pointer; }
 <div id="sidebar"> <ul> <li>XXX XXX XXX XXX</li> <li>XXX XXX XXX</li> <li>XXX XXX</li> <li>XXX</li> <li class="sub_menu">YYYYYYYYYYY <div class="child"> <ul> <li>XXX XXX XXX</li> <li>XXX XXX</li> <li>XXX</li> </ul> </div> </li> <li>XXX XXX XXX XXX</li> <li>XXX XXX XXX</li> <li>XXX XXX</li> <li>XXX</li> <li>XXX XXX XXX XXX</li> <li>XXX XXX XXX</li> <li>XXX XXX</li> <li>XXX</li> </ul> </div>

For the top position, you need to get the position of the item and substract the current scroll position.对于最上面的position,需要得到物品的position,减去当前卷轴position。 Then you can add an offset if you wish (20px in this case).然后,您可以根据需要添加偏移量(在本例中为 20px)。

For the left position, you get the width and can use a percentage to determine where it will be shown (like 75% from the left in this case).对于左侧position,您可以获得宽度并可以使用百分比来确定显示位置(如本例中左侧的 75%)。

Reference: CSS-tricks .参考: CSS 技巧

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM