我没有关于你问题的 css
技巧,但是我有一个 js
技巧,它可能会帮到你:
const items = [
{ name: 1, count: 5 },
{ name: 2, count: 5 },
{ name: 3, count: 5 },
{ name: 4, count: 5 },
{ name: 5, count: 5 },
{ name: 6, count: 5 },
{ name: 7, count: 5 }
....
];
function getColumns() {
const windowWidth = window.innerWidth;
console.log(windowWidth);
let columnsNumber = 3;
if (windowWidth < 400) {
columnsNumber = 2;
}
const columns = new Array(columnsNumber);
items.forEach((item, index) => {
var columnNumber = Math.floor(index / columns.length);
if (columns[columnNumber] === undefined) {
columns[columnNumber] = [item];
} else {
columns[columnNumber].push(item);
}
console.log(columns);
});
return columns;
}
export default function App() {
const [columns, setColumns] = useState(getColumns());
useEffect(() => {
window.addEventListener("resize", () => {
setColumns(getColumns());
});
}, []);
if (!columns) {
return <h1>Loading</h1>;
}
console.log(columns);
return (
<Grid container>
{columns.map((column, index) => (
<Grid item key={index} xs={12/columns.length}>
<Column items={column} />
</Grid>
))}
</Grid>
);
}
function Column({ items }) {
return (
<>
<Grid container>
{items.map((item, index) => (
<Grid item key={item.name} xs={12}>
<Typography key={item.name} align="right" component="h1">
{`${item.name}: ${item.count}`}
</Typography>
</Grid>
))}
</Grid>
</>
);
}
代码的结果是:
你可以在 codesandbox上看到domo