父级宽度未定义时下拉菜单中断

Dropdown menus breaking when parent width undefined

我有一个导航栏,其中每个列表项的字符长度差别很大。我更喜欢将宽度保留为自动并添加填充来为每个项目定义相同宽度的视觉效果。

我希望我的下拉菜单继承其父列表元素的宽度。相反,它们和它们自己的内容一样广泛。

手动定义每个下拉菜单的宽度似乎是一个非常不雅的解决方案,尽管我已经尝试过了。它也不是特别敏感。

我也试过设置 ul li ul width 继承,没用。

HTML:

  <div id="nav"> <!--nestled in div to provide full view-width bar-->
    <ul>
      <li>Item 1 is medium
        <ul>
          <li><a>Section 1</a></li>
          <li><a>Section 2</a></li>
          <li><a>Section 3</a></li>
        </ul>
      </li>
      <li>Item 2 is medium
        <ul>
          <li><a>Section 1</a></li>
          <li><a>Section 2</a></li>
          <li><a>Section 3</a></li>
        </ul>
      </li>
      <li>Item 3 is very long
        <ul>
          <li><a>Section 1</a></li>
          <li><a>Section 2</a></li>
          <li><a>Section 3</a></li>
        </ul>
      </li>
      <li>Item 4 is short
        <ul>
          <li><a>Section 1</a></li>
          <li><a>Section 2</a></li>
          <li><a>Section 3</a></li>
        </ul>
      </li>
    </ul>
  </div>

CSS:

#nav {
  background-color: #181818;
  width: 100vw;
}

ul {
  height: 60px;
  margin-left: 7em;
  margin-top: 0;
  padding: 0;
  list-style: none;
  font-family: 'Open Sans', sans-serif;
}

ul li {
  float: left;
  line-height: 60px;
  text-align: center;
  color: #dcdcdc;
  padding-left: 1em;
  padding-right: 1em;
}

ul li a {
  text-decoration: none;
}

ul li ul {
  width: inherit;
}

ul li ul li {
  background-color: #181818;
  margin-left: -7em;
  display: none;
}

ul li:hover ul li {
  display: block;
}

是否有比手动定义每个下拉菜单的宽度更好的解决方案来将下拉菜单设置为其父列表项的宽度?

这是代码

#nav {
  background-color: #181818;
  width: 100vw;
}

ul {
  height: 60px;
  margin-left: 7em;
  margin-top: 0;
  padding: 0;
  list-style: none;
  font-family: 'Open Sans', sans-serif;
}

ul li {
  float: left;
  line-height: 60px;
  text-align: center;
  color: #dcdcdc;
  padding-left: 1em;
  padding-right: 1em;
}

ul li a {
  text-decoration: none;
}

ul li ul {
  width: 100%;
  display: inline-table;
}

ul li ul li {
  background-color: #181818;
  margin-left: -7em;
  display: none;
  width: 100%;
}

ul li:hover ul li {
  display: block;
}
<div id="nav"> <!--nestled in div to provide full view-width bar-->
    <ul>
      <li>Item 1 is medium
        <ul>
          <li><a>Section 1</a></li>
          <li><a>Section 2</a></li>
          <li><a>Section 3</a></li>
        </ul>
      </li>
      <li>Item 2 is medium
        <ul>
          <li><a>Section 1</a></li>
          <li><a>Section 2</a></li>
          <li><a>Section 3</a></li>
        </ul>
      </li>
      <li>Item 3 is very long
        <ul>
          <li><a>Section 1</a></li>
          <li><a>Section 2</a></li>
          <li><a>Section 3</a></li>
        </ul>
      </li>
      <li>Item 4 is short
        <ul>
          <li><a>Section 1</a></li>
          <li><a>Section 2</a></li>
          <li><a>Section 3</a></li>
        </ul>
      </li>
    </ul>
  </div>

width: 100%;display: inline-table; 做出了真实的事情

CSS:

#nav {
  background-color: #181818;
  width: 100vw;
}

#nav ul {
    padding: 0;
    list-style: none;
}

#nav > ul {
  height: 60px;
  margin-left: 7em;
  font-family: 'Open Sans', sans-serif;
}

#nav > ul > li {
  float: left;
  line-height: 60px;
  text-align: center;
  color: #dcdcdc;
  padding-left: 1em;
  padding-right: 1em;
}


#nav > ul li a {
  text-decoration: none;
}

#nav > ul > li > ul {
    margin-left: -1em;
    margin-right: -1em;
     display: none;
}

#nav > ul > li > ul > li {
  background-color: #181818;
}

#nav > ul > li:hover > ul {
  display: block;
}