为什么flex-shrink在inline-flex中不起作用

发布于 2025-02-09 03:58:54 字数 977 浏览 0 评论 0原文

为什么项目不缩小内联用品。但是它在正常的弹性中正常工作。也许应该这样起作用,我不知道。也许它是规格中的某个地方,但我找不到任何相关的东西。如果有人能解释这一点,我会很感激。

.container {
  width: 100px;
  margin 0 auto;
  margin-top: 100px;
  background-color: green;
}

.inline-flex {
  display: inline-flex;
  margin-bottom: 10px;
}

.flex {
  display: flex;
}

.item {
  width: 50px;
  height: 50px;
  margin-right: 5px;
  background-color: blue;
}
<div class="container">
  <div class="inline-flex">
    <div class="item">no-shrink</div>
    <div class="item">no-shrink</div>
    <div class="item">no-shrink</div>
  </div>
  <div class="flex">
    <div class="item">shrink</div>
    <div class="item">shrink</div>
    <div class="item">shrink</div>
  </div>  
</div>

Why items dont shrink in inline-flex. But it works fine in normal flex. Maybe it is supposed to work that way, I dont know. Maybe it is somewhere in the spec but I coudn't find anything related. I would be grateful if someone could explain this.

.container {
  width: 100px;
  margin 0 auto;
  margin-top: 100px;
  background-color: green;
}

.inline-flex {
  display: inline-flex;
  margin-bottom: 10px;
}

.flex {
  display: flex;
}

.item {
  width: 50px;
  height: 50px;
  margin-right: 5px;
  background-color: blue;
}
<div class="container">
  <div class="inline-flex">
    <div class="item">no-shrink</div>
    <div class="item">no-shrink</div>
    <div class="item">no-shrink</div>
  </div>
  <div class="flex">
    <div class="item">shrink</div>
    <div class="item">shrink</div>
    <div class="item">shrink</div>
  </div>  
</div>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜吻♂芭芘 2025-02-16 03:58:54

如前所述,flex的作用像blockinline-flex-flex喜欢inline-block孩子的行为相同。 flex-items .Item在外观相同时的行为完全不同,因为它们的行为受Flex-Container的影响(.flex.inline- flex)。除了具有不同的显示值的弹性容器外,没有其他差异。

  • 每个.Item.inline-flex保留了50px的宽度
  • .Item .flex 具有宽度为34.6687px,

我仍然没有弄清楚为什么这是为什么,但是我有3种不同的解决方案:

.container太小,增加宽度。

参见示例a

图i

.container {
  width: 200px;
/* Increase .container to at least the .offsetWidth of the 3 .item`s */

更改flex> flex .Item s的属性或分配最小宽度

参见示例B

图II

.B .item {
  flex: 0 0 50px;
  /* OR */
  /* min-width: 50px */
}

*,
::before,
::after {
  box-sizing: border-box;
}

.container {
  width: 100px;
  background-color: green;
}

.A {
  width: 200px;
}

.inline-flex {
  display: inline-flex;
  margin-bottom: 10px;
}

.flex {
  display: flex;
}

.item {
  width: 50px;
  height: 50px;
  margin-right: 5px;
  background-color: blue;
}

.B .item {
  flex: 0 0 50px;
  /* OR */
  /* min-width: 50px */
}

h3 {
  margin: 0 0 4px 0
}
<h3>OP</h3>
<div class="container">
  <div class="inline-flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
  <div class="flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
</div>
<h3>Example A</h3>
<div class="container A">
  <div class="inline-flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
  <div class="flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
</div>
<h3>Example B</h3>
<div class="container B">
  <div class="inline-flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
  <div class="flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
</div>

As stated before, flex acts like a block and inline-flex like inline-block on the outside and their children behave identically. The flex-items .item are acting totally different when they should appear the same because their behavior is influenced by the flex-container (.flex and .inline-flex). Aside from the flex-containers having different display values, there are no other differences.

  • Each .item of .inline-flex has retained it's width of 50px
  • Each .item of .flex has a width of 34.6687px

I still haven't figured out why this is but I have 3 different solutions:

.container is too small, increase it's width.

See Example A

Figure I

.container {
  width: 200px;
/* Increase .container to at least the .offsetWidth of the 3 .item`s */

Change the flex properties of .items or assign min-width

See Example B

Figure II

.B .item {
  flex: 0 0 50px;
  /* OR */
  /* min-width: 50px */
}

*,
::before,
::after {
  box-sizing: border-box;
}

.container {
  width: 100px;
  background-color: green;
}

.A {
  width: 200px;
}

.inline-flex {
  display: inline-flex;
  margin-bottom: 10px;
}

.flex {
  display: flex;
}

.item {
  width: 50px;
  height: 50px;
  margin-right: 5px;
  background-color: blue;
}

.B .item {
  flex: 0 0 50px;
  /* OR */
  /* min-width: 50px */
}

h3 {
  margin: 0 0 4px 0
}
<h3>OP</h3>
<div class="container">
  <div class="inline-flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
  <div class="flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
</div>
<h3>Example A</h3>
<div class="container A">
  <div class="inline-flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
  <div class="flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
</div>
<h3>Example B</h3>
<div class="container B">
  <div class="inline-flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
  <div class="flex">
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
    <div class="item">XXX XXX</div>
  </div>
</div>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文