css - flexbox调整子宽度应该只改变下一个兄弟宽度
问题描述
我有一个具有动态项目数的 flexbox 容器。
所有项目都应填满容器的宽度。项目宽度应相对于容器宽度,而不是 px 单位。
我希望能够每次调整一个项目的大小(最后一个除外),并且它应该只更改自身及其右兄弟项目的宽度。例如,如果我有 4 个项目,最初每个项目的宽度应该是 25%,如果我将 item1 拖得更小,它的宽度应该减小到 20%,item2 应该增长到 30%,其余的项目应该保留相同的宽度为 25%。
这是我到目前为止的进展:
.container {
display: flex;
}
.item {
width: 25%;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
background-color: #4fa0f38c;
border: 1px solid white;
}
.item:not(:last-child) {
resize: horizontal;
overflow: auto;
}
<div class='container'>
<div class='item'>item 1</div>
<div class='item'>item 2</div>
<div class='item'>item 3</div>
<div class='item'>item 4</div>
</div>
我正在寻找使用带有 flex(无 js)的 css 的解决方案。
解决方案
您可以依靠活动状态来模拟这一点,但它不是很准确,因为:active
任何点击事件都会触发:
.container {
display: flex;
}
.item {
width: 25%;
height: 60px;
display: flex;
flex-grow:1;
align-items: center;
justify-content: center;
background-color: #4fa0f38c;
border: 1px solid white;
}
.item:not(:last-child) {
resize: horizontal;
overflow: auto;
}
/* all the element should not shrink */
.container:active *{
flex-shrink:0;
}
/* allow only the right element to shrink*/
.item:active + * {
flex-shrink:1;
}
/* make the right element grow more (when we decrease the left one)*/
.item:active + * {
flex-grow:99999;
}
<div class='container'>
<div class='item'>item 1</div>
<div class='item'>item 2</div>
<div class='item'>item 3</div>
<div class='item'>item 4</div>
</div>
推荐阅读
- react-native - webview.goBack() 抛出错误:UIManager.dispatchViewManagerCommand 有 2 个参数,预期为 3 - React Native
- java - 我可以用哪个符号替换 "expected should equal("""anyInt - anyInt - anyInt""")" 中的 anyInt
- regex - Google Data Studio 中的 REGEXP_EXTRACT 特定字符串
- java - 找到 a[i] 和 a[j] 之间的最大可能差异,其中 0 < i < a.length 和 i < j < a.length
- google-cloud-platform - 通过谷歌云 NAT 访问互联网时出现明显延迟
- haskell - flycheck-haskell 和 doctest 不适用于 Cabal 3.0 v2-build 项目
- graphite - 为什么即使在所有数据都到达 Graphite DB 之后,Graphite UI 也不显示数据?
- c# - 如何在 C# 桌面应用程序中保存登录凭据(用户名、密码)?
- php - 将其中包含对象的数组转换为 Json
- c# - 如何从 Amazon S3 存储桶中的特定文件夹中获取单个对象