【发布时间】:2020-05-25 12:37:37
【问题描述】:
我有许多div 元素:
<main>
<div id="top">Top</div>
<div id="left">Left</div>
<div id="right">Right</div>
</main>
我想在网格中显示:
┌─────────────────┐
│ Top │
╞══════╤══════════╡
│ Left │ Right │
└──────┴──────────┘
我希望能够隐藏一个元素并让另一个元素填充其空间。
┌─────────────────┐
│ Top │
╞═════════════════╡
│ Right │
└─────────────────┘
列的间距不均匀。我为 main 和 div#top 元素使用了以下 CSS:
main {
display: grid;
grid-template-rows: 3em 1fr;
grid-template-columns: 120px 1fr;
border: medium solid #333;
}
div#top {
grid-column: 1/3;
}
问题是当我使用display: none隐藏第一个div时,第二个只占用了第一个的原始空间。
如何说服第二个 div 占据整行?
下面的 sn-p 说明了这一点。
注意:Make div fill up entire CSS grid's row when the other part is not available 的问题提出了类似的问题,但解决方案不适用于我的情况。这是因为我的左 div 有一个固定的宽度。
var left = document.querySelector('div#left');
var right = document.querySelector('div#right');
right.addEventListener('click', function(e) {
left.style.display = left.style.display == 'none' ? 'block' : 'none';
});
main {
display: grid;
grid-template-rows: 3em 1fr;
grid-template-columns: 120px 1fr;
border: medium solid #333;
}
div#top, div#left, div#right {
border: medium solid #999;
background-color: #f8f8f8;
margin: 4px;
font-family: sans-serif;
padding: .5em;
}
div#top {
grid-column: 1/3;
}
div#left {
}
div#right {
}
<main>
<div id="top">Top</div>
<div id="left">Left</div>
<div id="right">Right: Click to Toggle Left</div>
</main>
【问题讨论】: