我第一次使用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”元素不会保留宽度为100px。
其他一切都按照假设运作。我能以某种方式强迫它吗?顺便说一下:是否有这种行为的真正原因?
答案 0 :(得分:6)
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;
}
&#13;
<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>
&#13;