사이트에 슬라이딩 사이드바 메뉴를 추가하는 방법
아래에는 관련 코드만 설명하겠습니다. 전체 코드를 보고 싶다면 위의 codepen을 확인하세요.
HTML
<body>
<div class="menu-sidebar">
<div class="sidebar-content">
<button class="close-menu-button">
<!-- close button icon -->
</button>
</div>
</div>
<div class="overlay"></div>
<div class="main-page">
<div class="header">
<button class="menu-button">
<!-- menu icon -->
</button>
</div>
<h1>Page Title</h1>
<p>
Lorem ipsum dolor sit amet...
</p>
</div>
</body>
이 HTML은 네 가지 주요 부분으로 구성됩니다.
.menu-sidebar
.main-page
.menu-button
.overlay
이 UI에는 유휴 및 사이드바 열림 상태라는 두 가지 상태가 있습니다.
<body>
에 클래스를 설정하여 켜져 있는 상태를 지정합니다. 모든 래퍼 요소가 될 수 있지만 이 예에서는 body
를 사용합니다. 이 데모에서는 사이드바 열기 상태에 대해 sidebar-open
클래스를 사용했습니다.CSS를 사용하여 각 상태에 대한 스타일을 정의하고
sidebar-open
클래스가 body
로 전환되면 올바른 스타일이 적용되어 transition
로 애니메이션됩니다.다음은 각 상태에 대한 스타일을 정의하는 예입니다.
.main-page {
// Styling for the main page when in idle state
}
body.sidebar-open .main-page {
// Styling for the main page when in sidebar-open state
}
CSS
/* Sidebar-open state for body */
body.sidebar-open {
overflow: hidden;
}
/* Idle state for the sidebar */
.menu-sidebar {
width: 500px;
height: 100%;
overflow: auto;
position: fixed;
left: 0;
top: 0;
z-index: 2;
transition: 0.5s ease translate;
translate: -100% 0;
will-change: transform;
}
/* Sidebar-open state for the sidebar */
body.sidebar-open .menu-sidebar {
translate: 0 0;
}
/* Idle state for the main page */
.main-page {
transition: 0.5s ease translate;
will-change: transform;
}
/* Sidebar-open state for the main page */
body.sidebar-open .main-page {
translate: 500px 0;
}
/* Idle state for the overlay */
.overlay {
opacity: 0;
pointer-events: none;
background: rgba(0, 0, 0, 0.5);
position: fixed;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 100%;
transition: 0.5s ease opacity;
}
/* Sidebar-open state for the overlay */
body.sidebar-open .overlay {
opacity: 1;
pointer-events: all;
}
/* When on tablet-size screen, make the sidebar open in full width above the main page */
@media (max-width: 768px) {
.menu-sidebar {
width: 100%;
}
body.sidebar-open .main-page {
translate: 0 0;
}
}
요소가 각 상태에 어떻게 있는지 봅시다.
사이드바(
.menu-sidebar
):position: fixed
로 배치합니다. z-index
를 .overlay
및 기본 페이지보다 큰 값으로 설정해야 합니다. 그래서 z-index: 2
로 설정했습니다. 500px
로 선택했지만 원하는 너비를 선택할 수 있습니다. translate: -100% 0
은 전체 너비만큼 왼쪽으로 이동합니다. translate
를 사용하여 사이드바에 애니메이션을 적용하고 이를 더욱 개선하려면 요소를 새 레이어로 승격해야 합니다. 그것이 will-change
가 하는 일입니다. translate
는 0 0
가 되어 원래 위치로 다시 이동하고 transition
를 사용하면 오른쪽으로 움직이는 것처럼 나타납니다. 기본 페이지(
.main-page
):transition
및 will-change
가 있는지 확인하기만 하면 됩니다. 500px
입니다. 오버레이(.overlay):
background: rgba(0, 0, 0, 0.5)
. opacity: 0
로 애니메이션을 적용하고 싶기 때문에 display: none
가 아닌 transition: 0.5s ease opacity
를 사용합니다. opacity: 0
가 있는 요소가 페이지에 여전히 존재하지만 표시되지 않습니다. 따라서 .overlay
를 클릭하게 되므로 페이지의 아무 항목이나 클릭해도 작동하지 않습니다. 이 문제를 해결하기 위해 pointer-events: none
를 설정하여 모든 마우스 및 터치 이벤트를 비활성화합니다. opacity: 1
및 pointer-events: all
를 설정합니다. 자바스크립트
이 작업을 수행하기 위한 마지막 단계는 메뉴 버튼, 오버레이 또는 닫기 버튼을 클릭할 때 본문의 클래스를 토글
sidebar-open
하는 것입니다.const menuButton = document.querySelector('.menu-button')
const overlay = document.querySelector('.overlay')
const closeMenuButton = document.querySelector('.close-menu-button')
menuButton.addEventListener('click', toggleMenu)
overlay.addEventListener('click', toggleMenu)
closeMenuButton.addEventListener('click', toggleMenu)
function toggleMenu() {
document.body.classList.toggle('sidebar-open')
}
Reference
이 문제에 관하여(사이트에 슬라이딩 사이드바 메뉴를 추가하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tahazsh/how-to-add-a-sliding-sidebar-menu-to-your-site-1emd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)