[英]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-flex
像inline-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 之外,没有其他区别。
.item
of .inline-flex
has retained it's width of 50px .item
.inline-flex
的每个 .item 都保留了 50px 的宽度.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
更改
.item
的flex
属性或指定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.