У меня есть несколько div
элементов:
<main>
<div id="top">Top</div>
<div id="left">Left</div>
<div id="right">Right</div>
</main>
, которые я хотел бы показать в сетке:
┌─────────────────┐
│ Top │
╞══════╤══════════╡
│ Left │ Right │
└──────┴──────────┘
Я хотел бы иметь возможность скрыть один элемент, а другой заполнить его пробел.
┌─────────────────┐
│ Top │
╞═════════════════╡
│ Right │
└─────────────────┘
Столбцы не расположены равномерно. Я использовал следующие CSS для элементов main
и div#top
:
main {
display: grid;
grid-template-rows: 3em 1fr;
grid-template-columns: 120px 1fr;
border: medium solid #333;
}
div#top {
grid-column: 1/3;
}
Проблема в том, что когда я скрываю первый div
, используя display: none
, второй занимает только оригинальное пространство первого.
Как мне убедить второе деление занять весь ряд?
Фрагмент ниже иллюстрирует точку.
Примечание: Вопрос на Сделать так, чтобы div заполнял всю строку CSS сетки, когда другая часть недоступна , просит что-то подобное, но решение не работает в моем случае. Это потому, что мой левый 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>