英文:
flex row should be as wide as its children in an overflow-x container
问题
以下是已翻译的内容:
.flex-table {
border: 1px solid #ccc;
overflow-x: scroll;
}
.flex-table .headers {
position: sticky;
z-index: 20;
background: #ccc;
top: -2rem;
}
.flex-table .row {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #ccc;
width: 100%;
}
.flex-table .row .cell {
flex-grow: 1;
margin: 0.25rem;
border-right: 1px solid #ccc;
flex: none;
width: 5rem;
}
.flex-table .row .cell:last-child {
border-right: none;
}
<div class="flex-table">
<div class="headers">
<div class="row">
<div class="cell">#</div>
<div class="cell">--</div>
<div class="cell">Item</div>
<div class="cell">con</div>
<div class="cell">qt</div>
<div class="cell">cos</div>
<div class="cell">pric</div>
<div class="cell">GP (unit)</div>
<div class="cell">Profit</div>
<div class="cell">QOH</div>
<div class="cell">ATS</div>
<div class="cell">SO</div>
<div class="cell">PO</div>
<div class="cell">Sourcing Notes</div>
<div class="cell">dev</div>
</div>
</div>
<div class="bod">
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<!-- 其余行的代码已省略 -->
</div>
</div>
希望这对您有所帮助。
英文:
In the following example you will see my attempt at making a flex box table responsive however i cant get the rows to be 100% of the available scroll space. Note the header background when scrolling.
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-css -->
.flex-table {
border: 1px solid #ccc;
overflow-x: scroll;
}
.flex-table .headers {
position: sticky;
z-index: 20;
background: #ccc;
top: -2rem;
}
.flex-table .row {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #ccc;
width: 100%;
}
.flex-table .row .cell {
flex-grow: 1;
margin: 0.25rem;
border-right: 1px solid #ccc;
flex: none;
width: 5rem;
}
.flex-table .row .cell:last-child {
border-right: none;
}
<!-- language: lang-html -->
<div class="flex-table">
<div class="headers">
<div class="row">
<div class="cell">#</div>
<div class="cell">--</div>
<div class="cell">Item</div>
<div class="cell">con</div>
<div class="cell">qt</div>
<div class="cell">cos</div>
<div class="cell">pric</div>
<div class="cell">GP (unit)</div>
<div class="cell">Profit</div>
<div class="cell">QOH</div>
<div class="cell">ATS</div>
<div class="cell">SO</div>
<div class="cell">PO</div>
<div class="cell">Sourcing Notes</div>
<div class="cell">dev</div>
</div>
</div>
<div class="bod">
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
</div>
</div>
<!-- end snippet -->
How can I make this layout responsive so the header bg appears as expected.
答案1
得分: 1
在您的情况下,最简单的方法是提供一个.flex-table { display: grid; }
。但我仍然建议您使用表格来显示表格数据...
.flex-table {
display: grid;
border: 1px solid #ccc;
overflow-x: scroll;
}
.flex-table .headers {
position: sticky;
z-index: 20;
background: #ccc;
top: -2rem;
}
.flex-table .row {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #ccc;
width: 100%;
}
.flex-table .row .cell {
flex-grow: 1;
margin: 0.25rem;
border-right: 1px solid #ccc;
flex: none;
width: 5rem;
}
.flex-table .row .cell:last-child {
border-right: none;
}
<div class="flex-table">
<div class="headers">
<div class="row">
<div class="cell">#</div>
<div class="cell">--</div>
<div class="cell">Item</div>
<div class="cell">con</div>
<div class="cell">qt</div>
<div class="cell">cos</div>
<div class="cell">pric</div>
<div class="cell">GP (unit)</div>
<div class="cell">Profit</div>
<div class="cell">QOH</div>
<div class="cell">ATS</div>
<div class="cell">SO</div>
<div class="cell">PO</div>
<div class="cell">Sourcing Notes</div>
<div class="cell">dev</div>
</div>
</div>
<div class="bod">
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<!-- 其他行的代码 -->
</div>
</div>
英文:
The easiest thing to do in your case is to provide a .flex-table { display: grid; }
.
But I still advise you to use a table to display tabular data...
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-css -->
.flex-table {
display: grid; /* 👈 */
border: 1px solid #ccc;
overflow-x: scroll;
}
.flex-table .headers {
position: sticky;
z-index: 20;
background: #ccc;
top: -2rem;
}
.flex-table .row {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #ccc;
width: 100%;
}
.flex-table .row .cell {
flex-grow: 1;
margin: 0.25rem;
border-right: 1px solid #ccc;
flex: none;
width: 5rem;
}
.flex-table .row .cell:last-child {
border-right: none;
}
<!-- language: lang-html -->
<div class="flex-table">
<div class="headers">
<div class="row">
<div class="cell">#</div>
<div class="cell">--</div>
<div class="cell">Item</div>
<div class="cell">con</div>
<div class="cell">qt</div>
<div class="cell">cos</div>
<div class="cell">pric</div>
<div class="cell">GP (unit)</div>
<div class="cell">Profit</div>
<div class="cell">QOH</div>
<div class="cell">ATS</div>
<div class="cell">SO</div>
<div class="cell">PO</div>
<div class="cell">Sourcing Notes</div>
<div class="cell">dev</div>
</div>
</div>
<div class="bod">
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
</div>
</div>
<!-- end snippet -->
答案2
得分: 0
考虑将 width: max-content
应用于 .headers
和 .bod
元素,以确保其宽度与其子元素一样宽:
.flex-table {
border: 1px solid #ccc;
overflow-x: scroll;
}
.flex-table .headers {
position: sticky;
z-index: 20;
background: #ccc;
top: -2rem;
}
.flex-table :is(.headers, .bod) {
width: max-content;
}
.flex-table .row {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #ccc;
width: 100%;
}
.flex-table .row .cell {
flex-grow: 1;
margin: 0.25rem;
border-right: 1px solid #ccc;
flex: none;
width: 5rem;
}
.flex-table .row .cell:last-child {
border-right: none;
}
<div class="flex-table">
<div class="headers">
<div class="row">
<div class="cell">#</div>
<div class="cell">--</div>
<div class="cell">Item</div>
<div class="cell">con</div>
<div class="cell">qt</div>
<div class="cell">cos</div>
<div class="cell">pric</div>
<div class="cell">GP (unit)</div>
<div class="cell">Profit</div>
<div class="cell">QOH</div>
<div class="cell">ATS</div>
<div class="cell">SO</div>
<div class="cell">PO</div>
<div class="cell">Sourcing Notes</div>
<div class="cell">dev</div>
</div>
</div>
<div class="bod">
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<!-- 以下省略了其他行的内容 -->
</div>
</div>
这是你提供的 CSS 和 HTML 代码的翻译部分。
英文:
Consider applying width: max-content
to the .headers
and .bod
elements to ensure the width is as wide as its children:
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-css -->
.flex-table {
border: 1px solid #ccc;
overflow-x: scroll;
}
.flex-table .headers {
position: sticky;
z-index: 20;
background: #ccc;
top: -2rem;
}
.flex-table :is(.headers,.bod) {
width: max-content;
}
.flex-table .row {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #ccc;
width: 100%;
}
.flex-table .row .cell {
flex-grow: 1;
margin: 0.25rem;
border-right: 1px solid #ccc;
flex: none;
width: 5rem;
}
.flex-table .row .cell:last-child {
border-right: none;
}
<!-- language: lang-html -->
<div class="flex-table">
<div class="headers">
<div class="row">
<div class="cell">#</div>
<div class="cell">--</div>
<div class="cell">Item</div>
<div class="cell">con</div>
<div class="cell">qt</div>
<div class="cell">cos</div>
<div class="cell">pric</div>
<div class="cell">GP (unit)</div>
<div class="cell">Profit</div>
<div class="cell">QOH</div>
<div class="cell">ATS</div>
<div class="cell">SO</div>
<div class="cell">PO</div>
<div class="cell">Sourcing Notes</div>
<div class="cell">dev</div>
</div>
</div>
<div class="bod">
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
<div class="row">
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
<div class="cell">--</div>
</div>
</div>
</div>
<!-- end snippet -->
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论