ππ» μμμ μ°λ¦¬λ νλμ userInfoλΌλ νλ©΄μ λ§λ€μ΄ 쀬μ΅λλ€.
μ΄μ νμ΄μ§λ₯Ό λ°κΏμ μμ§μΌ μ μλ μ¬μ΄λ λ° μμ μ ν΄λ³΄λλ‘ ν κ²μ
νμ§λ§ μ²μμ λ§ν κ² μ²λΌ νμ΄μ§λ₯Ό μ΄λνλ κ°λ μ μλκ³
divμ μ²΄κ° μ¬λΌμ‘λ€κ° λνλ¬λ€κ° νλλ±μ κΈ°λ₯μ λλ€.
νμ΄μ§λ₯Ό μ¬λ¬κ° λ§λ€μ΄μ κ΄λ¦¬νλ κ°λ
μΌλ‘ κ°μ Έκ°μ§ μκΈ° λλ¬Έμ
νλμ index νμ΄μ§μμ μ½λλ§ μΆκ°νλλ‘ νκ² μ΅λλ€.
<aside class="menu-aside hidden-menu">
<button class="menu-button">βΆοΈ</button>
<header class="aside-header">
<h1 class="header-title"><i class="fa-regular fa-calendar-check"></i>TODOLIST</h1>
</header>
<nav class="menu-nav">
<ul class="menu-list">
<a href="javascript:void(0)" class="menu-items">
<li><i class="fa-regular fa-user"></i>User Information</li>
</a>
<a href="javascript:void(0)" class="menu-items">
<li><i class="fa-regular fa-calendar"></i>To Do List</li>
</a>
</ul>
</nav>
</aside>
ν΄λΉ μ½λκ° μ°λ¦¬κ° λ§λ€μλ mainνκ·Έ μλ‘ μ¬λΌκ°μ£Όλ©΄ λ©λλ€.
μ΄ μ¬μ΄λλ° κ°μκ²½μ° λ²νΌμ λλ₯΄κ² λλ©΄ μμΌλ‘ λ€μ΄κ°λ€κ° λ€μ λλ₯΄λ©΄
λ°μΌλ‘ λμ€λ νμμΌλ‘ κ°μ Έκ° κ²μ λλ€.
λ°λ‘ μ΄μ΄μ css λ₯Ό 보λλ‘ ν κ²μ
그리 μ΄λ €μ΄ λΆλΆμ΄ μμ΅λλ€.
.menu-aside {
position: absolute;
top: 0px;
left: 0px;
z-index: 99;
width: 300px;
height: 100%;
box-shadow: 1px 0px 5px 1px black;
background-color: #454545;
transition: left 1s ease;
}
.hidden-menu {
left: -300px;
}
.aside-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 5px 20px 10px;
border-bottom: 1px solid #dbdbdb;
background-color: #121212;
}
.header-title, .aside-header i[class*="fa"] {
color: #fff;
}
.menu-button {
position: absolute;
transform: translateY(-50%);
top: 50%;
right: -13px;
display: flex;
justify-content: center;
align-items: center;
border: none;
border-bottom-right-radius: 20px;
border-top-right-radius: 20px;
padding: 0;
width: 13px;
height: 60px;
background-color: #454545;
color: #f0e5d3;
}
.menu-button:hover, .menu-button:active {
background-color: #454545;
text-shadow: 0px 0px 5px #f0e5d3;
}
.fa-calendar-check {
padding: 0px 15px;
font-size: 18px;
}
.header-title {
font-size: 18px;
cursor: default;
}
.menu-nav {
padding: 20px 0px 0px;
}
.menu-items li{
display: flex;
align-items: center;
border-bottom: 1px solid #dbdbdb;
padding: 0px 20px;
height: 40px;
background-color: #303030;
color: #fff;
font-size: 16px;
}
.menu-items li:hover {
background-color: #121212;
}
.menu-items li .fa-regular {
padding: 0px 10px;
color: #fff;
font-size: 16px;
}
μ΄μ Javascriptλ₯Ό μ΄μ©ν κΈ°λ₯μ λ§λ€μ΄λ³Ό μκ°μ λλ€.
κΈ°λ₯μ΄λΌκ³ νκΈ°μ μ’ κ·Έλ μ§λ§ μ¬μ΄λλ° κ°μκ²½μ° νμ΄μ§λ₯Ό νλ μ μ£Όκ³
λ²νΌλ λ°©ν₯μ λ°κΏμ£Όλλ±μ κΈ°λ₯μ΄μμ΅λλ€
class AsideEvent {
static #instance = null;
static getInstance() {
if(this.#instance == null){
this.#instance = new AsideEvent();
}
return this.#instance;
}
// buttonμ΄ μμΌλ‘ λ€μ΄κ° λμ λμ¬λμ ꡬλ³
addEventShowMenuButton() {
const menuButton = document.querySelector('.menu-button');
menuButton.onclick = () => {
const menuAside = document.querySelector('.menu-aside');
if(menuAside.classList.contains('hidden-menu')){
menuAside.classList.remove('hidden-menu');
menuButton.textContent = 'βοΈ';
}else {
menuAside.classList.add('hidden-menu');
menuButton.textContent = 'βΆοΈ';
}
}
}
addEventMainChange() {
const menuItems = document.querySelectorAll('.menu-items');
const menuButton = document.querySelector('.menu-button');
menuItems.forEach((item, index) => {
item.onclick = () => {
const mainContainers = document.querySelectorAll('.main-container');
const menuAside = document.querySelector('.menu-aside');
mainContainers.forEach(container => {
container.classList.add('main-hidden');
});
mainContainers[index].classList.remove('main-hidden');
menuAside.classList.add('hidden-menu');
menuButton.textContent = 'βΆοΈ';
}
});
}
}
π³ μ¬μ΄λλ° κ°μκ²½μ°μ μμ userInfo μ λΉνλ©΄ μ λ§ κ°λ¨ν ꡬνμ λλ€. κ·Έλ¦¬κ³ νμ¬ μλ°μ€ν¬λ¦½νΈ λ€μ΄ μ°μ¬μ§κ³ μμ§λ μμ΅λλ€.
APP.jsλΌλ νμΌμ λ°λ‘ λμ΄ κ·Έμͺ½μμ μλμ°κ° λ‘λ λ λ μ€νμ νκΈ°μν΄
κΈ°λ₯λ€μ ν¨μλ‘ μ μλ§ νκ³ μ€νμ App.js μμ μ€νν μμ μ λλ€.