html - 如何将嵌套 <ul> 正确定位在水平滚动 <ul> 上方作为 "pop-up"菜单? Chrome 和 IE 的问题

标签 html css

我正在尝试创建一个水平滚动菜单,该菜单也有弹出式子菜单项,但我正在努力解决一些问题。

我找到了一个类似的话题here ,但是当我尝试利用设置位置的建议答案时:相对;在绝对定位元素(在本例中为“弹出式”菜单)的父级上,然后我遇到了溢出问题。

Here is a fiddle这样您就可以看到我遇到的问题并可能提供一些反馈。 Firefox 按原样运行良好,但 IE 和 Chrome 都存在“四”弹出菜单的位置问题以及向右滚动时的问题。

请注意,将鼠标悬停在黄色框上会在该元素正上方显示一个弹出菜单,但是当您向右滚动并开始将鼠标悬停在元素上时,弹出菜单不再正确对齐。我试图设置主要的位置 <ul>到“相对”,但那是当我遇到弹出窗口没有显示的问题时(即使在将“底部”调整为 100px 以外的其他内容之后)。

HTML

<div class="modal">
<div class="modal-container">
  <div class="modal-outer">
    <div class="modal-inner">
      <div class="project_navigation">
         <ul>
           <li><a href="#">One</a>
             <ul>
               <li><a href="#">One A</a></li>
               <li><a href="#">One B</a></li>
               <li><a href="#">One C</a></li>
               <li><a href="#">One D</a></li>
             </ul>
           </li>
           <li><a href="#">Two</a>
             <ul>
               <li><a href="#">Two A</a></li>
               <li><a href="#">Two B</a></li>
               <li><a href="#">Two C</a></li>
               <li><a href="#">Two D</a></li>
             </ul>
           </li>
           <li><a href="#">Three</a>
             <ul>
               <li><a href="#">Three A</a></li>
               <li><a href="#">Three B</a></li>
               <li><a href="#">Three C</a></li>
               <li><a href="#">Three D</a></li>
             </ul>
           </li>
           <li><a href="#">Four</a>
             <ul>
               <li><a href="#">Four A</a></li>
               <li><a href="#">Four B</a></li>
               <li><a href="#">Four C</a></li>
               <li><a href="#">Four D</a></li>
             </ul>
           </li>
           <li><a href="#">Five</a>
             <ul>
               <li><a href="#">Five A</a></li>
               <li><a href="#">Five B</a></li>
               <li><a href="#">Five C</a></li>
               <li><a href="#">Five D</a></li>
             </ul>
           </li>
           <li><a href="#">Six</a>
             <ul>
               <li><a href="#">Six A</a></li>
               <li><a href="#">Six B</a></li>
               <li><a href="#">Six C</a></li>
               <li><a href="#">Six D</a></li>
             </ul>
           </li>
           <li><a href="#">Seven</a>
             <ul>
               <li><a href="#">Seven A</a></li>
               <li><a href="#">Seven B</a></li>
               <li><a href="#">Seven C</a></li>
               <li><a href="#">Seven D</a></li>
             </ul>
           </li>
           <li><a href="#">Eight</a>
             <ul>
               <li><a href="#">Eight A</a></li>
               <li><a href="#">Eight B</a></li>
               <li><a href="#">Eight C</a></li>
               <li><a href="#">Eight D</a></li>
             </ul>
           </li>
           <li><a href="#">Nine</a>
             <ul>
               <li><a href="#">Nine A</a></li>
               <li><a href="#">Nine B</a></li>
               <li><a href="#">Nine C</a></li>
               <li><a href="#">Nine D</a></li>
             </ul>
           </li>
           <li><a href="#">Ten</a>
             <ul>
               <li><a href="#">Ten A</a></li>
               <li><a href="#">Ten B</a></li>
               <li><a href="#">Ten C</a></li>
               <li><a href="#">Ten D</a></li>
             </ul>
           </li>
         </ul>
      </div>
    </div>
  </div>
</div>
</div>

CSS

.modal {
    width: 100%;
    height: 100%;
    background-position: 50% 50%;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    left: 0;
    top: 0;
    position: absolute;
    margin-left: 0px;
    background-repeat: no-repeat;
    color: #fff;
    background: #4c3416;
    background: rgba(76, 52, 22, 0.65);
    text-align: left;
    opacity: 1;
    z-index: 1050;
}
.modal-container {
  margin-left: 0;
    left: auto;
    height: 125px;
    position: fixed;
    top: auto;
    bottom: 0;
    width: 100%;
    background: #4c3416;
    border-radius: 0;
    right: auto;
    color: #4c3416;
    min-height: initial;
}
.modal-outer {
  padding: 5px;
  min-height: initial;
  background-color: blue;
}

.modal-inner {
  width: 300px;
  margin: 0 auto;
  background-color: lightblue;
}

.project_navigation {
  overflow-x: auto;
  white-space: nowrap;
  background-color: white
  list-style: none;
}

.project_navigation > ul > li {
  display: inline-block;
  vertical-align: top;
  height: 50px;
  width: 50px;
  padding: 5px;
  margin: 5px;
  background-color: yellow;
}

.project_navigation > ul > li > ul {
  display: none;
  list-style: none;
}

.project_navigation > ul > li:hover > ul {
  display: block;
  position: absolute;
  bottom: 100px;
  left: auto;
  width: 125px;
  height: auto;
  background-color: #00ff99;
}

最佳答案

前一段时间我遇到了类似的问题,this link帮我整理了一下。要点是将您的子菜单包装在一个包装器类中,该包装器类将用作它们的定位祖先(因为现在看来您的整个内联 block 正在执行此操作,这是您不想要的)。

关于html - 如何将嵌套 <ul> 正确定位在水平滚动 <ul> 上方作为 "pop-up"菜单? Chrome 和 IE 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35711401/

相关文章:

javascript - jQuery 跨度类选择器

css - 我怎样才能加入一个更小和更大的圆 Angular div?

html - 是否可以使用 css 比较两个数据属性

html - 效率和实用性之间的界限在哪里

jquery - 在调整 div 大小时平滑地移动子元素

javascript - 元素(背景图像)不透明度,但没有边框不透明度

html - 嵌套的 div - child 的大小

html - 将超链接应用于 CSS 创建的 DIV

html - 深度嵌套元素的高度 100%

php - 我的 div 在 Firefox 中不对齐(适用于 Chrome 和 Safari)