当前位置: 首页 > 知识库问答 >
问题:

Flexbox不给元素等宽

顾昌翰
2023-03-14

尝试一个flexbox导航,最多有5个项目,少则3个,但它没有在所有元素之间平均划分宽度。

我在此建模的教程是http://www.sitepoint.com/responsive-fluid-width-variable-item-navigation-css/

萨斯

null

* {
  font-size: 16px;
}

.tabs {
  max-width: 1010px;
  width: 100%;
  height: 5rem;
  border-bottom: solid 1px grey;
  margin: 0 0 0 6.5rem;
  display: table;
  table-layout: fixed;
}
.tabs ul {
  margin: 0;
  display: flex;
  flex-direction: row;
}
.tabs ul li {
  flex-grow: 1;
  list-style: none;
  text-align: center;
  font-size: 1.313rem;
  background: blue;
  color: white;
  height: inherit;
  left: auto;
  vertical-align: top;
  text-align: left;
  padding: 20px 20px 20px 70px;
  border-top-left-radius: 20px;
  border: solid 1px blue;
  cursor: pointer;
}
.tabs ul li.active {
  background: white;
  color: blue;
}
.tabs ul li:before {
  content: "";
}
<div class="tabs">
  <ul>
    <li class="active" data-tab="1">Pizza</li>
    <li data-tab="2">Chicken Noodle Soup</li>
    <li data-tab="3">Peanut Butter</li>
    <li data-tab="4">Fish</li>
  </ul>
</div>

null

共有2个答案

郭星文
2023-03-14

要使用flex创建宽度相等的元素,应设置为您的子元素(flex元素):

flex-basis: 25%;
flex-grow: 0;

它将为行中的所有元素提供25%的宽度。它们不会一个一个地成长和走。

郎弘壮
2023-03-14

您链接到的文章中有一个重要的部分没有提到,那就是flex-basis。默认情况下,flex-basisauto

根据规范:

如果指定的flex-basis为auto,则使用的flex basis为flex项的main size属性的值。(这本身可以是关键字auto,它根据flex项的内容调整其大小。)

每个flex项都有一个flex-basis,它有点像它的初始大小。然后从那里,任何剩余的空闲空间都按比例(基于flex-grow)分布在这些项之间。对于auto,基础是内容大小(或使用width定义的大小等)。因此,在您的示例中,具有较大文本的项将获得更多的空间。

如果希望元素完全均匀,可以设置flex-basis:0。这会将flex基准设置为0,然后任何剩余空间(因为所有基准都是0,所以所有空间都是)将基于flex-grow按比例分配。

li {
    flex-grow: 1;
    flex-basis: 0;
    /* ... */
}

规范中的这张图很好地说明了这一点。

这里有一个你的小提琴的工作例子。

 类似资料:
  • 问题内容: 尝试最多包含5个项目且只有3个项目的flexbox导航,但它并未在所有元素之间平均分配宽度。 问题答案: 您链接到的文章中没有提到一个重要的部分,那就是。默认为。 如果指定的flex-basis是auto,则使用的flex基础是flex项目的main size属性的值。(它本身可以是关键字auto,它会根据其内容来调整弹性项目的大小。) 每个伸缩项目都有一个类似于其初始大小的。然后,从

  • 在鼠标悬停时,我想变换两个相邻的flex元素的位置,如下图所示 标记如下 我希望两个元素都是父元素的100%宽度,第二个元素溢出,这样我就可以在鼠标悬停时变换X。我遇到的问题是两个元素都被挤压到容器中。 我知道我可以在另一个div中包装这两个元素,并给它200%的容器宽度。但想知道这能不能用Flexbox完成

  • 问题内容: 我正在使用flexbox对齐我的子元素。我想做的是将一个元素居中,而另一个保持最左对齐。通常我会使用来设置left元素。问题是将中心元素推离中心。这是可能的 ,而不 使用绝对定位? HTML和CSS 问题答案: 编辑: 请参阅下面的[Solo答案,这是更好的解决方案。 flexbox背后的想法是提供一个框架,可以轻松地将容器中尺寸可变的元素对齐。这样,提供一个布局而完全忽略一个元素的宽

  • 我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?

  • 我与一些孩子有: 我想要以下布局: 无论中有多少文本,我都希望将始终贴在底部,而不将其从流中取出。我听说Flexbox可以实现这一点,但我不能让它工作。

  • 我正在开发一个web应用程序,它显示了一个巨大的卡片网格,其高度本质上是可变的。 为了美观起见,我们使用jQuery的来均衡每行卡片的高度。 它的性能没有得到很好的扩展,所以今天我一直在迁移到一个基于flex box的解决方案,它的速度要快得多。 然而,我失去了一个行为——如果卡头的内容不合适,应该用省略号将其截断。 目标: 3列 列宽度变化以填充父 行间距不变 高度在一排内相等 如何安排容器大小