justify-content:space-between与flex-grow协调内容

时间:2014-10-08 11:24:42

标签: html css css3 flexbox

我有一个顶部水平导航,我使用css flexbox规则来控制间距。

enter image description here

我希望菜单中的第一项与左侧对齐,最后一项与右侧对齐,其余项之间的间距相等。

这可能吗?我认为justify-content: space-between;会实现这一点,但我无法让它发挥作用。

我举了一个我在jsfiddle尝试做的事情的例子。我也把这段代码放在下面。

我能想到的另一种方法是给每个text-align: center元素li,但是对于第一个和最后一个,我可以给text-align: lefttext-align: right但这会在第二个和第二个元素之间留出太多的间距。



.container{
  background-color: yellow;
  width: 1100px;
}
.container ul#nav {
  padding: 0;
  display: block;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  justify-content: space-between;
}
.container ul#nav li {
  list-style: none;
  -webkit-flex: 2 1 auto;
  -ms-flex: 2 1 auto;
  flex: 2 1 auto;
  justify-content: space-between;
}
.container ul#nav li {
  justify-content: space-between;
}

<div class="container">
  <ul id="nav">
    <li><a href="#">Apples</a></li>
    <li><a href="#">Oranges</a></li>
    <li><a href="#">Pears</a></li>
    <li><a href="#">Kiwis</a></li>
  </ul>
</div>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:5)

您可以通过flex: 2 1 auto;移除.container ul#nav li来实现此目的:

.container{
  background-color: yellow;
  width: 1100px;
}
.container ul#nav {
  padding: 0;
  display: block;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  justify-content: space-between;
}
.container ul#nav li {
  list-style: none;
  -webkit-flex: 2 1 auto;
  -ms-flex: 2 1 auto;
  justify-content: space-between;
}
.container ul#nav li {
  justify-content: space-between;
}
<div class="container">
  <ul id="nav">
    <li><a href="#">Apples</a></li>
    <li><a href="#">Oranges</a></li>
    <li><a href="#">Pears</a></li>
    <li><a href="#">Kiwis</a></li>
  </ul>
</div>

答案 1 :(得分:0)

试试这个:

&#13;
&#13;
.flex-container {
  padding: 0;
  margin: 0;
  list-style: none;

  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;

  -webkit-flex-flow: row wrap;
  justify-content: space-around;
}

.flex-item {
  background: tomato;
  padding: 5px;
  width: 200px;
  height: 150px;
  margin-top: 10px;

  line-height: 150px;
  color: white;
  font-weight: bold;
  font-size: 3em;
  text-align: center;
}
&#13;
<ul class="flex-container">
  <li class="flex-item">1</li>
  <li class="flex-item">2</li>
  <li class="flex-item">3</li>
  <li class="flex-item">4</li>
  <li class="flex-item">5</li>
  <li class="flex-item">6</li>
</ul>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

问题在于,即使一个元素具有 flex-grow> 0 justify-content 的任何值也会自动失效,并且正的多余空间将在具有 flex-grow 的项目之间分配。

结论:“所有 flex-items 必须具有 flex-grow:0; 以便调整内容上班:。

在您的特定情况下,问题出在以下行:flex: 2 1 auto;会自动设置flex-grow: 2;

要修复此问题,只需使用代码行flex: 0 1 auto;

flex-grow 更改为 0