CSS:如何在 window 容器中包含绝对元素

CSS: how to contain absolute element inside window container

CSS 有办法在 window 容器中包含绝对值 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');
  }
});