【问题标题】:How to get horizontal multi-line navigation menu items to left align?如何使水平多行导航菜单项左对齐?
【发布时间】:2017-12-30 17:32:18
【问题描述】:

我正在尝试在水平导航菜单中使用 flexbox 以使菜单项与管道分隔符均匀分布。

我可以让项目换行到下一行,但顶行的第一个项目是缩进的,所以下一行的第一个项目从左边距开始。

如何让菜单从左边距开始?

我有两个菜单,在第一个菜单中,管道的间距不均匀。在第二个菜单中,管道看起来是均匀分布的。这就是我得到的。

两个不规则环绕的导航菜单示例:

如何使用等距管道使包装对齐顶行中第一个项目的下方?谢谢。

这是我试过的。

ul.container {
  display: flex;
  justify-content: space-between;
  flex-flow: row wrap;
}

ul.container li {
  list-style: none;
  list-style-position: inside;
  display: inline;
  text-align: left;
  margin: 0 0 0 -1em;
  padding: 0.7em 0 0 0;
  white-space: normal;
}

ul.container li.vertical-divider:before {
  font-weight: normal;
  content: " | ";
  padding-right: 0.2em;
  background-color: transparent;
}
<div id="inthissection">
  <p class="inthissection">In This Section:</p>
  <ul class="container">
    <li class="vertical-divider"><a href="http://events.stcwdc.org/about-wdcb-events/">About WDCB Events</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/events">Events Calendar</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/speakers-handouts-and-presentations/">Speakers&#39; Handouts and Presentations</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/first-timers-coupon/">First Timer&#39;s Coupon</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/submit-event-form/">Submit an Event</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/submit-an-article/">Submit an Article</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/submit-event-form/">Event Announcement Form</a></li>
    <li class="vertical-divider"><a href="http://www.stcwdc.org/events_past_archives.shtml">Archives of Past Events</a></li>
  </ul>
</div>

更新: 使用@Abinthaha 的建议,我想出了一个接近的解决方案;但是,它仍然没有像 codepen 示例中那样垂直左对齐。我仍然想解决这个问题。这是现在对我有用的东西:

/* ----Flexible Horizontal NAVIGATION LISTS  */ 
ul.container {
  list-style: none;
  padding: 0;
  max-width: 400px;
  display: flex;
    flex-flow: row wrap;
}

ul.container li.vertical-divider:first-child:before {
    content: none;
    margin: 0 0 0 -0.7em; 
    padding: 0;
    flex-grow: 1
}

li.vertical-divider:not(:last-child) {
    font-weight: normal;
    content: " | ";
    margin: auto;
}

ul.container li.vertical-divider:last-child {
  flex: 0;
}

/* In this section --------------------------------- */
#inthissection {
    background-color: transparent;
    margin: -1em 0 0 0;
    padding: 0 0 0.9em 0;
    font-weight: bold;
    width: auto;
}

p.inthissection {
    margin: 0.9em 0 0 0;
    padding: 0.9em 0 0 0;
    font-size: 0.9em;
    font-weight: bold;
}

#inthissection ul {
    display: inline;
    list-style-type: none;
    font-size: 0.9em;
    margin: 0;
    padding: 0;
}

#inthissection li {
    display: inline;
    margin: -0.4em auto -1.2em -0.5em; 
    padding: 0.7em 0.8em 0.4em 0.8em;
}

#inthissection ul li:first-child:before {
    content: none; 
    margin-left: -28px;
    padding: 0;
}

#inthissection li:before {
    font-weight: normal;
    content: " | ";
    background-color: transparent;
    margin: 0 0 0 -0.7em; 
    padding: 0.7em 0.8em 0.4em 0.8em;
}



<div id="inthissection">
  <p class="inthissection">In This Section:</p>
  <ul class="container">
    <li class="vertical-divider"><a href="http://events.stcwdc.org/about-wdcb-events/">About WDCB Events</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/events">Events Calendar</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/speakers-handouts-and-presentations/">Speakers&#39; Handouts and Presentations</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/first-timers-coupon/">First Timer&#39;s Coupon</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/submit-event-form/">Submit an Event</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/submit-an-article/">Submit an Article</a></li>
    <li class="vertical-divider"><a href="http://events.stcwdc.org/submit-event-form/">Event Announcement Form</a></li>
    <li class="vertical-divider"><a href="http://www.stcwdc.org/events_past_archives.shtml">Archives of Past Events</a></li>
  </ul>
</div>

【问题讨论】:

    标签: html css flexbox list-separator leftalign


    【解决方案1】:

    Flexbox 是一种简单的技术。我想这就是你要找的。 codepen。检查。元素左对齐,左侧的任何行中都没有空格。如果你想均匀地对齐项目。然后你可以使用flex-grow: 1li。这样每行中的li 将占据该行的整个空间,并在它们之间平均分配。

    ul {
      display: flex;
      flex-wrap: wrap;
    }
    
    li {
      padding: 2px 15px;
    }
    
    li:not(:last-child) {
      border-right: 1px solid #000;
    }
    

    【讨论】:

    • 你在codepen中指出的例子确实是我要找的。但由于某种原因,该代码在我的文件中的工作方式不同。请参阅我的解决方案以获得完美契合。
    【解决方案2】:

    将以下内容放在 CSS 的底部以从左边距开始:

    #first-divider:before {
      content: "";
      margin-left: -28px;
    }
    

    并找到下面的链接 - 它很好地解释了您应该如何使用 flexbox 使用分隔符。

    https://stackoverflow.com/a/41632218/7032438

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2019-01-02
      • 2016-01-18
      • 1970-01-01
      相关资源
      最近更新 更多