我的顶层布局是n列,所有列的宽度都是固定的(侧边栏),中间的(主栏)应该自动填充剩余的空间。
所以,我在主栏中有一张棘手的宽表。它具有一个带有overflow-x: auto
的包装器,但是,它不希望触发包装器上的滚动,而是更倾向于将所有内容拉伸到顶级flex容器。可以通过在主栏中添加width: calc(100% - {sum of widths of other columns}px)
来解决此问题,但是我正在寻找一种更灵活的解决方案,该解决方案将允许添加更多列并调整现有列的大小,而无需触及此calc
规则。
有什么想法吗?有什么办法可以对弹性商品说:填满剩余空间,但不允许您的内容拉长您的力量?
UPD :通过使用table-layout: fixed
(代码为here)将主栏的内容包装在一个表中来做到这一点,但我对此感到很难过。有人知道更灵活的解决方案吗?还是可以吗?
// this JS generates placeholder text, ignore it
for (const el of document.querySelectorAll(".lorem")) {
el.innerHTML = Array(Number(el.getAttribute("p")) || 1)
.fill()
.map(() => `<p>${chance.paragraph()}</p>`)
.join("");
}
body {
margin: 0;
}
.outer {
display: flex;
}
.sidebar {
flex: 0 0 300px;
background: #eef;
}
.mainbar {
background: #ffe;
/* width: calc(100% - 500px); */
}
.rightbar {
flex: 0 0 200px;
background: #fef;
}
.table-wrapper {
width: 100%;
overflow-x: auto;
background: pink;
}
.table-wrapper td {
min-width: 400px;
}
<script src="https://unpkg.com/chance@1.0.16/chance.js"></script>
<div class="outer">
<div class="sidebar">
<div class="lorem" p="4"></div>
</div>
<div class="mainbar">
<div class="table-wrapper">
<table>
<tr>
<td class="lorem"></td>
<td class="lorem"></td>
<td class="lorem"></td>
<td class="lorem"></td>
</tr>
</table>
</div>
<div class="lorem" p="10"></div>
</div>
<div class="rightbar">
<div class="lorem" p="3"></div>
</div>
</div>
答案 0 :(得分:4)
如果我理解您的说法正确,请将flex: 1; min-width: 0;
添加到您的.mainbar
规则中,它应该会起作用。
flex: 1
将使其占用可用空间,而min-width: 0
将使flex项小于其内容,您可以在此处阅读更多内容:
堆栈片段
// this JS generates placeholder text, ignore it
for (const el of document.querySelectorAll(".lorem")) {
el.innerHTML = Array(Number(el.getAttribute("p")) || 1)
.fill()
.map(() => `<p>${chance.paragraph()}</p>`)
.join("");
}
body {
margin: 0;
}
.outer {
display: flex;
}
.sidebar {
flex: 0 0 300px;
background: #eef;
}
.mainbar {
background: #ffe;
flex: 1;
min-width: 0;
/* width: calc(100% - 500px); */
}
.rightbar {
flex: 0 0 200px;
background: #fef;
}
.table-wrapper {
width: 100%;
overflow-x: auto;
background: pink;
}
.table-wrapper td {
min-width: 400px;
}
<script src="https://unpkg.com/chance@1.0.16/chance.js"></script>
<div class="outer">
<div class="sidebar">
<div class="lorem" p="4"></div>
</div>
<div class="mainbar">
<div class="table-wrapper">
<table>
<tr>
<td class="lorem"></td>
<td class="lorem"></td>
<td class="lorem"></td>
<td class="lorem"></td>
</tr>
</table>
</div>
<div class="lorem" p="10"></div>
</div>
<div class="rightbar">
<div class="lorem" p="3"></div>
</div>
</div>