以下代码段中的代码呈现了一个共鸣网格,该网格展开了一个被单击的元素.
const Demo = () => {
const Item = ({content}) => {
const [expanded, setExpanded] = React.useState(false);
return (<div className = {
expanded ? "expanded" : "item"
}
onClick = {
() => setExpanded(!expanded)
}>
{content}
</div>)
}
return (<div className = "grid" >
<Item content = "Item 1" / >
<Item content = "Item 2" / >
<Item content = "Item 3" / >
<Item content = "Item 4" / >
<Item content = "Item 5" / >
<Item content = "Item 6" / >
</div>)
}
ReactDOM.render( < Demo / > , document.querySelector("#app"))
.grid {
display: grid;
gap: 1rem;
grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr));
}
.item {
display: flex;
height: 100px;
border: 1px solid black;
justify-content: center;
align-items: center;
}
.expanded {
display: flex;
height: 200px;
border: 1px solid black;
justify-content: center;
align-items: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.development.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.development.js"></script>
<div id="app" />
例如,当点击Item 2时,网格如下所示:
但是,在本例中,我希望网格看起来像:
我该如何着手解决这件事呢?该解决方案不必使用css网格.但是,必须保持元素的响应宽度以及响应的行数和列数.