简体   繁体   English

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

[英]Why flex-shrink doesn't work in inline-flex

Why items dont shrink in inline-flex.为什么项目不会在 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>

As stated before, flex acts like a block and inline-flex like inline-block on the outside and their children behave identically.如前所述, flex在外部表现得像block ,而inline-flexinline-block一样,它们的子项表现相同。 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 ).弹性项目.item当它们看起来相同时表现完全不同,因为它们的行为受到弹性容器( .flex.inline-flex )的影响。 Aside from the flex-containers having different display values, there are no other differences.除了具有不同display值的 flex-container 之外,没有其他区别。

  • Each .item of .inline-flex has retained it's width of 50px .item .inline-flex的每个 .item 都保留了 50px 的宽度
  • Each .item of .flex has a width of 34.6687px .item的每个 .item 的宽度为.flex

I still haven't figured out why this is but I have 3 different solutions:我还没有弄清楚为什么会这样,但我有 3 种不同的解决方案:

.container is too small, increase it's width. .container太小,增加它的宽度。

See Example A示例 A

Figure I图一

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

Change the flex properties of .item s or assign min-width更改.itemflex属性或指定min-width

See Example B参见示例 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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM