Это потому, что вы переключаете боковую панель с grid-template-rows: 30px 1fr;
на grid-template-columns: 30px 0px;
Если вы не включите ее, у вас не будет этой проблемы. Я сделал простой пример из вашего кода:
document.addEventListener('click', function (event) {
if (!event.target.matches('.toggle')) return;
event.preventDefault();
var sidebarLeft = document.getElementById('sidebar-left');
if (sidebarLeft.classList.contains('clicked')) {
sidebarLeft.classList.remove('clicked');
} else {
sidebarLeft.classList.add('clicked');
}
}, false);
#body, #wrapper {
display: grid;
}
#body{
grid-template-rows: 60px 1fr 30px;
grid-template-areas: "a a a" "b c d" "e e e";
grid-template-columns: auto 1fr auto;
width: 100%;
height: 100vh;
background: pink;
}
#header{
grid-area: a;
}
.sidebar.left {
grid-area: b;
width: 240px;
transition: all 0.5s;
}
.wrapper{
border-top: 1px solid black;
border-bottom: 1px solid black;
}
#content {
grid-area: c;
background-color: #0f111aff;
}
.toggle{
background: gray;
line-height: 30px;
width: 30px;
text-align: center;
color: white;
cursor: pointer;
}
#sidebar-left.clicked{
width: 30px;
}
<div id='body'>
<div id='header'></div>
<div class='sidebar left' id='sidebar-left'>
<div class='wrapper'>
<div class='toggle'>
<
</div>
</div>
</div>
<div id='content'>
</div>
</div>
Если вы чувствуете, что вам абсолютно необходим шаблон сетки. Вы можете использовать js, чтобы вызвать это после .5s (продолжительность перехода). Я пытался сделать это с помощью CSS-анимации, но кажется, что он не срабатывает на grid-template-rows / grid-template-columns
.
Совет 1 - Всегда делайте самый простой пример вашей проблемы. Это помогает, если вы разместите код здесь или, по крайней мере, где-нибудь, мы можем легко отредактировать его.
Совет 2 - Не используйте один и тот же идентификатор несколько раз в HTML