【问题标题】:Dropdown menus breaking when parent width undefined父宽度未定义时下拉菜单中断
【发布时间】:2019-05-16 05:58:08
【问题描述】:

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

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

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

我也试过设置 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;
}

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

【问题讨论】:

    标签: html css format dropdown responsive


    【解决方案1】:

    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;
    }
    

    【讨论】:

    • 感谢您的回答!这解决了我的问题,尽管我仍然不清楚为什么。你能解释一下吗?
    • 这就是问题所在:ul li {float:left}。它影响第一级 li 和子菜单级 li,当您将浮动设置为子级时,它不适合父级的宽度。
    【解决方案2】:

    这是代码

    #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; 做了真实的事情

    【讨论】:

    • sn-p 因为你的宽度分为两排:100vw;进入导航的CSS
    • 我试过这个,但它在导航栏上平均间隔了我的每个列表项。加上下拉菜单出现偏离中心。感谢您的回答!
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多