使用 flexbox 创建响应式 table
Create responsive table using flexbox
如何创建响应式 table?
我要的table和这个类似:
table必须是响应式的,所以要改变的是列的宽度。
我认为最好的解决方案是使用 Flexbox,但是如何使用呢?
我试试这个代码:
.container {
display: flex;
border: 1px solid black;
}
.column {
display: flex;
flex-direction: column;
border: 1px solid black;
}
.cell {
border: 1px solid black;
padding: 5px;
}
<div class="container">
<div class="column">
<div class="cell"></div> <!-- empty cell -->
<div class="cell">something</div>
<div class="cell">dog</div>
<div class="cell">more dogs</div>
</div>
<div class="column">
<div class="cell">column2 long title</div>
<div class="cell">abc</div>
<div class="cell">a</div>
<div class="cell">aaaaaaa</div>
</div>
<div class="column">
<div class="cell">column 3 tilew</div>
<div class="cell">bbbb</div>
<div class="cell">da</div>
<div class="cell">f</div>
</div>
<div class="column">
<div class="cell">something</div>
<div class="cell">ggggg</div>
<div class="cell">f</div>
<div class="cell">cats</div>
</div>
</div>
我简单地创建了4列,每列的行数相同,当然,它们的高度不会相同。
我该如何解决?
那么,第一个单元格必须为空
非常感谢!
我不明白为什么 您需要使用 flexbox 而不是 table。无论如何,您可以在这里使用 CSS 网格布局只是为了 而不是 使用 tables - 问题中的代码很容易设置。
此处也使用 display: contents
- 请注意,它在较新的浏览器中受支持 - 完整支持说明 here.
.container {
display: grid; /* grid containers */
grid-template-columns: repeat(4, 1fr); /* four columns */
grid-template-rows: repeat(4, 1fr); /* four rows */
grid-auto-flow: column; /* in column direction */
border: 1px solid black;
}
.column {
display: contents; /* the child elements would be grid items */
border: 1px solid black;
}
.cell {
border: 1px solid black;
padding: 5px;
}
<div class="container">
<div class="column">
<div class="cell"></div> <!-- empty cell -->
<div class="cell">something</div>
<div class="cell">dog</div>
<div class="cell">more dogs</div>
</div>
<div class="column">
<div class="cell">column2 long title</div>
<div class="cell">abc</div>
<div class="cell">a</div>
<div class="cell">aaaaaaa</div>
</div>
<div class="column">
<div class="cell">column 3 tilew</div>
<div class="cell">bbbb</div>
<div class="cell">da</div>
<div class="cell">f</div>
</div>
<div class="column">
<div class="cell">something</div>
<div class="cell">ggggg</div>
<div class="cell">f</div>
<div class="cell">cats</div>
</div>
</div>
在这里!
/*
Generic Styling, for Desktops/Laptops
*/
table {
width: 100%;
border-collapse: collapse;
}
/* Zebra striping */
tr:nth-of-type(odd) {
background: #eee;
}
th {
background: #333;
color: white;
font-weight: bold;
}
td, th {
padding: 6px;
border: 1px solid #ccc;
text-align: left;
}
/*
Max width before this PARTICULAR table gets nasty
This query will take effect for any screen smaller than 760px
and also iPads specifically.
*/
@media
only screen and (max-width: 760px),
(min-device-width: 768px) and (max-device-width: 1024px) {
.responsive-table-input-matrix {
display: block;
position: relative;
width: 100%;
&:after {
clear: both;
content: '';
display: block;
font-size: 0;
height: 0;
visibility: hidden;
}
tbody {
display: block;
overflow-x: auto;
position: relative;
white-space: nowrap;
width: auto;
tr {
display: inline-block;
vertical-align: top;
td {
display: block;
text-align: center;
&:first-child {
text-align: left;
}
}
}
}
thead {
display: block;
float: left;
margin-right: 10px;
&:after {
clear: both;
content: "";
display: block;
font-size: 0;
height: 0;
visibility: hidden;
}
th:first-of-type {
height: 1.4em;
}
th {
display: block;
text-align: right;
&:first-child {
text-align: right;
}
}
}
}
}
<table class="responsive-table-input-matrix">
<thead>
<tr>
<th></th>
<th>Owner</th>
<th>Group</th>
<th>Others</th>
<th>Administrators</th>
<th>Managers</th>
<th>Engineers</th>
<th>Sales</th>
<th>Employees</th>
<th>Customers</th>
<th>Community</th>
</tr>
</thead>
<tbody>
<tr>
<td>Add</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Edit</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Delete</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Rename</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Move</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
如何创建响应式 table?
我要的table和这个类似:
table必须是响应式的,所以要改变的是列的宽度。
我认为最好的解决方案是使用 Flexbox,但是如何使用呢?
我试试这个代码:
.container {
display: flex;
border: 1px solid black;
}
.column {
display: flex;
flex-direction: column;
border: 1px solid black;
}
.cell {
border: 1px solid black;
padding: 5px;
}
<div class="container">
<div class="column">
<div class="cell"></div> <!-- empty cell -->
<div class="cell">something</div>
<div class="cell">dog</div>
<div class="cell">more dogs</div>
</div>
<div class="column">
<div class="cell">column2 long title</div>
<div class="cell">abc</div>
<div class="cell">a</div>
<div class="cell">aaaaaaa</div>
</div>
<div class="column">
<div class="cell">column 3 tilew</div>
<div class="cell">bbbb</div>
<div class="cell">da</div>
<div class="cell">f</div>
</div>
<div class="column">
<div class="cell">something</div>
<div class="cell">ggggg</div>
<div class="cell">f</div>
<div class="cell">cats</div>
</div>
</div>
我简单地创建了4列,每列的行数相同,当然,它们的高度不会相同。 我该如何解决?
那么,第一个单元格必须为空
非常感谢!
我不明白为什么 您需要使用 flexbox 而不是 table。无论如何,您可以在这里使用 CSS 网格布局只是为了 而不是 使用 tables - 问题中的代码很容易设置。
此处也使用 display: contents
- 请注意,它在较新的浏览器中受支持 - 完整支持说明 here.
.container {
display: grid; /* grid containers */
grid-template-columns: repeat(4, 1fr); /* four columns */
grid-template-rows: repeat(4, 1fr); /* four rows */
grid-auto-flow: column; /* in column direction */
border: 1px solid black;
}
.column {
display: contents; /* the child elements would be grid items */
border: 1px solid black;
}
.cell {
border: 1px solid black;
padding: 5px;
}
<div class="container">
<div class="column">
<div class="cell"></div> <!-- empty cell -->
<div class="cell">something</div>
<div class="cell">dog</div>
<div class="cell">more dogs</div>
</div>
<div class="column">
<div class="cell">column2 long title</div>
<div class="cell">abc</div>
<div class="cell">a</div>
<div class="cell">aaaaaaa</div>
</div>
<div class="column">
<div class="cell">column 3 tilew</div>
<div class="cell">bbbb</div>
<div class="cell">da</div>
<div class="cell">f</div>
</div>
<div class="column">
<div class="cell">something</div>
<div class="cell">ggggg</div>
<div class="cell">f</div>
<div class="cell">cats</div>
</div>
</div>
在这里!
/*
Generic Styling, for Desktops/Laptops
*/
table {
width: 100%;
border-collapse: collapse;
}
/* Zebra striping */
tr:nth-of-type(odd) {
background: #eee;
}
th {
background: #333;
color: white;
font-weight: bold;
}
td, th {
padding: 6px;
border: 1px solid #ccc;
text-align: left;
}
/*
Max width before this PARTICULAR table gets nasty
This query will take effect for any screen smaller than 760px
and also iPads specifically.
*/
@media
only screen and (max-width: 760px),
(min-device-width: 768px) and (max-device-width: 1024px) {
.responsive-table-input-matrix {
display: block;
position: relative;
width: 100%;
&:after {
clear: both;
content: '';
display: block;
font-size: 0;
height: 0;
visibility: hidden;
}
tbody {
display: block;
overflow-x: auto;
position: relative;
white-space: nowrap;
width: auto;
tr {
display: inline-block;
vertical-align: top;
td {
display: block;
text-align: center;
&:first-child {
text-align: left;
}
}
}
}
thead {
display: block;
float: left;
margin-right: 10px;
&:after {
clear: both;
content: "";
display: block;
font-size: 0;
height: 0;
visibility: hidden;
}
th:first-of-type {
height: 1.4em;
}
th {
display: block;
text-align: right;
&:first-child {
text-align: right;
}
}
}
}
}
<table class="responsive-table-input-matrix">
<thead>
<tr>
<th></th>
<th>Owner</th>
<th>Group</th>
<th>Others</th>
<th>Administrators</th>
<th>Managers</th>
<th>Engineers</th>
<th>Sales</th>
<th>Employees</th>
<th>Customers</th>
<th>Community</th>
</tr>
</thead>
<tbody>
<tr>
<td>Add</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Edit</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Delete</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Rename</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Move</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>