[英]CSS: how to contain absolute element inside window container
CSS 有办法在窗口容器中包含绝对 div 吗? (如果 div 位置 + div 宽度 > window.innerWidth,将 div 平移到左边)
我试图在 100% CSS ( https://codepen.io/team/css-tricks/pen/ZYoJda ) 中实现导航菜单,但是当我在屏幕右侧有菜单时,弹出菜单被屏幕分割。
这是一个重新设计的片段:
nav > ul > li { display: inline-block; } nav > ul > li ul { visibility: hidden; position: absolute; top: 105%; left: 0; transition: 0.2s 1s; } nav > ul > li ul li { width: 300px; } nav > ul > li:hover ul { visibility: visible; transition-delay: 0s; } nav ul { list-style: none; padding: 0; margin: 0; width: 100%; } nav li { width: 100px; background: #eee; margin: 2px; position: relative; padding: 10px; width: 15%; } nav a { display: block; } div { position: relative; width: 100%; overflow-x: hidden; min-height: 200px; } body { padding: 10px; }
<div> <nav> <ul> <li>No Menu 1</li> <li>No Menu 2</li> <li>Menu 3 <ul> <li><a href="#">Menu 3-1</a></li> <li><a href="#">Menu 3-2</a></li> <li><a href="#">Menu 3-3</a></li> </ul> </li> <li>Menu 4 <ul> <li><a href="#">Menu 4-1</a></li> <li><a href="#">Menu 4-2</a></li> <li><a href="#">Menu 4-3</a></li> </ul> </li> <li> Menu 5 <ul> <li><a href="#">Menu 5-1</a></li> <li><a href="#">Menu 5-2</a></li> <li><a href="#">Menu 5-3</a></li> </ul> </li> </ul> </nav> </div>
我找到了使用 JS 的解决方案(我更喜欢 CSS)。
我假设以下结构:
<ul>
<li>Menu 1
<ul class="dropdown">
<li>Menu 1-1</li>
<li>Menu 1-2</li>
</ul>
</li>
</ul>
我实现了以下JS:
const menus = document.querySelectorAll('.dropdown');
menus.forEach(menu => {
const info = menu.getBoundingClientRect();
const position = info.left + info.width;
if (position > window.innerWidth) {
// Function to update style
this.rdr.setStyle(menu, 'left', (window.innerWidth - position) + 'px');
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.