固定宽度的孩子在 flexbox 中缩小 [重复]

Posted

技术标签:

【中文标题】固定宽度的孩子在 flexbox 中缩小 [重复]【英文标题】:Fixed width child is shrinking in flexbox [duplicate] 【发布时间】:2017-12-12 16:14:07 【问题描述】:

我是第一次使用display:flex

您可以在此处找到代码笔:https://codepen.io/chrispillen/pen/GEYpRg

.node:not(.branch) 
  width: auto;
  height: 100px;
  background: red;
  margin-bottom: 1px;


.node.branch,
.node.branch .body 
  width: auto;
  overflow: hidden;


.node.branch .leaf 
  width: 100%;
  height: 100px;
  background: blue;


.node.branch .body 
  width: 100%;
  display: flex;
  align-items: stretch;


.node.branch .body .tribe 
  width: 100px;
  background: blue;
  margin-right: 1px;


.node.branch .body .subnodes 
  padding-top: 1px;
  width: 100%;
  overflow: hidden;
<div class="node"></div>
<div class="node branch">
  <div class="leaf"></div>
  <div class="body">
    <div class="tribe">TRIBE</div>
    <div class="subnodes">
      <div class="node"></div>
      <div class="node"></div>
    </div>
  </div>
  <div class="leaf"></div>
</div>

“tribe”元素不会保持 100 像素的宽度。

其他一切都按预期工作。我可以以某种方式强迫它吗?顺便问一下:这种行为的真正原因是 flex 吗?

【问题讨论】:

查看此部分flex-shrink 因素 in this answer 【参考方案1】:

Flexbox 项目具有flex-shrink 参数,默认为1。这意味着如果您的 flexbox 容器没有足够的空间,它的项目将会缩小。

为 flexbox 项目集 flex-shrink: 0 禁用此行为。

演示:

.node:not(.branch) 
  width: auto;
  height: 100px;
  background: red;
  margin-bottom: 1px;


.node.branch,
.node.branch .body 
  width: auto;
  overflow: hidden;


.node.branch .leaf 
  width: 100%;
  height: 100px;
  background: blue;


.node.branch .body 
  width: 100%;
  display: flex;
  align-items: stretch;


.node.branch .body .tribe 
  width: 100px;
  flex-shrink: 0; /* new */
  background: blue;
  margin-right: 1px;


.node.branch .body .subnodes 
  padding-top: 1px;
  width: 100%;
  overflow: hidden;
<div class="node"></div>

<div class="node branch">
  <div class="leaf"></div>

  <div class="body">
    <div class="tribe">TRIBE</div>

    <div class="subnodes">
      <div class="node"></div>
      <div class="node"></div>
    </div>
  </div>
  
  <div class="leaf"></div>
</div>

【讨论】:

以上是关于固定宽度的孩子在 flexbox 中缩小 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

flexbox下的孩子没有指定宽度[重复]

Chrome不会根据孩子的内容展开flex parent [重复]

缩小以适应 flexbox 或 flex-basis: content 解决方法中的内容?

像表格单元格一样的 Flexbox 大小的孩子?

React Native FlexBox:为啥添加`alignItems`会阻止孩子拥有100%的宽度?

如何使用 CSS flexbox 设置固定宽度的列