使用 Flexbox 以相同的高度均匀分布导航项

2024-03-05

我有一个导航,其中有许多菜单项。每个菜单项中的文本长度各不相同。

它的外观如下:

nav ul {
  display: flex;
  justify-content: space-between;
  align-items: center;
  text-align: center;
  margin: 0;
  padding: 0;
}

nav ul li {
  background: darkblue;
  list-style: none;
  padding: 24px;
}

a {
  color: #fff;
  text-decoration: none;
}
<nav>
  <ul>
    <li><a href="#">Menu Item</a></li>
    <li><a href="#">A Longer Menu Item</a></li>
    <li><a href="#">A Very Very Long Menu Item</a></li>
    <li><a href="#">Menu Item</a></li>
  </ul>
</nav>

这里的问题是,当视口很宽时,它会在每个项目之间留下很大的间隙。为了解决这个问题,我添加了width: 100%; to the <li>,像这样:

nav ul {
  display: flex;
  justify-content: space-between;
  align-items: center;
  text-align: center;
  margin: 0;
  padding: 0;
}

nav ul li {
  width: 100%;
  border-right: 3px solid #fff;
  background: darkblue;
  list-style: none;
  padding: 24px;
}

a {
  color: #fff;
  text-decoration: none;
}
<nav>
  <ul>
    <li><a href="#">Menu Item</a></li>
    <li><a href="#">A Longer Menu Item</a></li>
    <li><a href="#">A Very Very Long Menu Item</a></li>
    <li><a href="#">Menu Item</a></li>
  </ul>
</nav>

这样就解决了问题,但是现在高度不相等了。 Flexbox 中有办法解决这个问题吗?


您正在将 Flex 对齐属性应用到弹性项目(容器的子级),而不是弹性项目内的内容(容器的孙子)。这就是为什么您会看到项目垂直居中(即失去相等的高度)。

本质上,HTML 结构分为三个级别。因此,将物品放入柔性容器中。现在,flex 属性应用于内容。 这是更完整的解释:CSS 网格居中 https://stackoverflow.com/q/45536537/3597276

另外,由于您使用的是 HTML5,因此语义上有意义<nav>元素,实际上没有必要也使用无序列表(<ul> / <li>)。这是不必要的且在语义上毫无意义的代码。

nav {
  display: flex;
}

a {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 24px;
  background: darkblue;
  color: #fff;
  text-decoration: none;
}

a + a {
  border-left: 2px solid gray;
}

@media ( max-width: 600px ) {
  nav {
    flex-wrap: wrap;
  }
  a {
    flex-basis: 100%;
  }
  a + a {
    border-left: none;
    border-top: 2px solid gray;
  }
}
<nav>
  <a href="#">Menu Item</a>
  <a href="#">A Longer Menu Item</a>
  <a href="#">A Very Very Long Menu Item</a>
  <a href="#">Menu Item</a>
</nav>

jsFiddle 演示 https://jsfiddle.net/6e84tk0s/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Flexbox 以相同的高度均匀分布导航项 的相关文章

随机推荐