rto*_*tom 4 html javascript css
我正在尝试解决一个问题,其中我连续有 3 个项目,并且在调整窗口大小时我想首先截断第二个项目,然后在其 minWidth 之后开始截断第一个项目。目前所有项目都同时被截断。
.container {
display: flex;
flex-wrap: nowrap;
align-items: center;
gap: 10px;
}
.child {
border: 1px solid;
height: 40px;
}
.truncate {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis
}
.btn {
min-width: 30px
}
.label {
overflow: hidden
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="child label">
<h3 class="truncate">Item label</h3>
</div>
<div class="child btn truncate">
Item Button
</div>
<div class="child">
Item Status
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
TL;DR如果您需要在父级中支持 1 个子级收缩而不是另一个flex
子级,则可以使用flex-shrink
CSS 属性。如果您想阅读更官方的解释,请参阅 flex-shrink 的 MDN 文档
解决方案在您的示例中,添加flex-shrink: 9999;
将使.btn
该组件专门收缩,直到达到其最小宽度。
样本
div {
gap: 10px;
display: flex;
white-space: nowrap;
}
p:nth-child(1) {
overflow: hidden;
text-overflow: ellipsis;
}
p:nth-child(2) {
overflow: hidden;
text-overflow: ellipsis;
flex-shrink: 999999;
min-width: 50px;
}
Run Code Online (Sandbox Code Playgroud)
<div>
<p>Lorem ipsum dolor sit amet
<p>Lorem ipsum dolor sit amet
<p>Lorem ipsum
</div>
Run Code Online (Sandbox Code Playgroud)
解释
flex-shrink
作为所有值的比率。因此,如果您有 2 个元素,flex-shrink: 1
并且flex-shrink: 2
彼此相邻,则2
收缩速度将是1
。
为了达到您想要的结果,只需设置一个任意大的值,例如flex-shrink:9999
在一个项目上,这样它将专门收缩(直到其他属性(如min-width
停止它,此时下一个项目将开始收缩)。