TypeScript

by mnk

HTML

<div class="grid-container">
  <div class="item1">Header</div>
  <div class="item2">Menu</div>
  <div class="item3">Main</div>  
  <div class="item4">Right</div>
  <div class="item5">Footer</div>
</div>
<button>
  click me
</button>

CSS

.item1 { grid-area: header; }
.item2 { grid-area: menu; }
.item3 { 
  grid-area: main;
  transition: all 1s ease-in-out;
}
.item4 { 
  grid-area: right;
  opacity: 0;
  transition: all 1s ease-in-out;
}
.item5 { grid-area: footer; }

.open .item4 {
  /* display: block; */
  opacity: 1;
}
.grid-container {
  display: grid;
  grid-auto-rows: auto;
  grid-template-areas:
    'header header header header header header'
    'menu main main main main main'
    'menu footer footer footer footer footer';
  gap: 10px;
  background-color: #2196F3;
  padding: 10px;
  -webkit-transition: all 1s ease-in-out;
-moz-transition: all 1s ease-in-out;
-ms-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
transition: all 1s ease-in-out;
}

.grid-container > div {
  background-color: rgba(255, 255, 255, 0.8);
  text-align: center;
  padding: 20px 0;
  font-size: 30px;
}

.open {
 grid-template-areas:
    'header header header header header header'
    'menu main main main main right'
    'menu footer footer footer footer footer';
}

TypeScript

const btn = document.querySelector('button')
const panel = document.querySelector('.grid-container')

btn.addEventListener('click', () => {
	panel.classList.toggle('open')
})