모바일 화면 - drawer 디자인 반영

This commit is contained in:
현성필
2025-12-09 15:57:21 +09:00
parent 45d40f8e92
commit 3a1f1cf29f
5 changed files with 419 additions and 291 deletions
+139 -103
View File
@@ -836,146 +836,182 @@ hr {
bottom: 0;
width: 100%;
height: 100%;
background: var(--white);
background: #ffffff;
transform: translateY(100%);
transition: transform 0.3s ease;
display: flex;
flex-direction: column;
overflow-y: auto;
}
.mobile-drawer .drawer-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px;
border-bottom: 2px solid var(--border-gray);
background: var(--white);
box-shadow: var(--shadow-sm);
min-height: 60px;
height: 44px;
min-height: 44px;
padding: 0 12px 0 20px;
background: #ffffff;
}
.mobile-drawer .drawer-header .drawer-logo {
.mobile-drawer .drawer-header .drawer-header-left {
display: flex;
align-items: center;
gap: 12px;
gap: 8px;
}
.mobile-drawer .drawer-header .drawer-logo .logo {
height: 32px;
width: auto;
.mobile-drawer .drawer-header .drawer-header-left .drawer-user-icon {
width: 24px;
height: 24px;
}
.mobile-drawer .drawer-header .drawer-logo .logo-text {
font-size: 16px;
font-weight: 700;
color: var(--primary-blue);
.mobile-drawer .drawer-header .drawer-header-left .drawer-login-text {
font-family: "Noto Sans KR", sans-serif;
font-size: 12px;
font-weight: 400;
color: #212529;
line-height: 26px;
}
.mobile-drawer .drawer-header .drawer-close {
width: 40px;
height: 40px;
width: 24px;
height: 24px;
background: transparent;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
font-size: 18px;
color: var(--text-gray);
transition: all 0.3s ease;
padding: 0;
}
.mobile-drawer .drawer-header .drawer-close svg {
width: 24px;
height: 24px;
}
.mobile-drawer .drawer-header .drawer-close:hover {
background: var(--white);
color: var(--text-dark);
opacity: 0.7;
}
.mobile-drawer .drawer-welcome {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 214px;
padding: 40px 20px;
background: #ebfbff;
border-bottom: 1px solid #dadada;
}
.mobile-drawer .drawer-welcome .welcome-text {
font-family: "Noto Sans KR", sans-serif;
font-size: 14px;
font-weight: 400;
color: #212529;
line-height: 26px;
margin: 0 0 24px 0;
text-align: center;
}
.mobile-drawer .drawer-welcome .welcome-buttons {
display: flex;
gap: 21px;
width: 100%;
max-width: 309px;
}
.mobile-drawer .drawer-welcome .btn-drawer-signup {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
height: 40px;
background: #e5e7eb;
color: #5f666c;
font-family: "Noto Sans KR", sans-serif;
font-size: 14px;
font-weight: 700;
border-radius: 8px;
text-decoration: none;
transition: all 0.3s ease;
}
.mobile-drawer .drawer-welcome .btn-drawer-signup:hover {
background: #d1d5db;
}
.mobile-drawer .drawer-welcome .btn-drawer-login {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
height: 40px;
background: #0049b4;
color: #ffffff;
font-family: "Noto Sans KR", sans-serif;
font-size: 14px;
font-weight: 700;
border-radius: 8px;
text-decoration: none;
transition: all 0.3s ease;
}
.mobile-drawer .drawer-welcome .btn-drawer-login:hover {
background: rgb(0, 52.3166666667, 129);
}
.mobile-drawer .drawer-nav {
flex: 1;
padding: 0;
overflow-y: auto;
background: var(--white);
padding: 0 20px;
background: #ffffff;
}
.mobile-drawer .drawer-nav .drawer-menu {
.mobile-drawer .drawer-nav .drawer-menu-list {
list-style: none;
margin: 0;
padding: 20px 0;
padding: 0;
}
.mobile-drawer .drawer-nav .drawer-menu li {
margin-bottom: 8px;
.mobile-drawer .drawer-nav .drawer-menu-item {
border-bottom: 1px solid #dadada;
}
.mobile-drawer .drawer-nav .drawer-menu li .drawer-link {
display: block;
padding: 16px 24px;
margin: 0 20px;
color: var(--text-dark);
text-decoration: none;
font-size: 18px;
font-weight: 500;
border-radius: 12px;
transition: all 0.3s ease;
}
.mobile-drawer .drawer-nav .drawer-menu li .drawer-link:hover, .mobile-drawer .drawer-nav .drawer-menu li .drawer-link:active {
background: var(--light-bg);
color: var(--primary-blue);
transform: translateX(4px);
box-shadow: var(--shadow-sm);
}
.mobile-drawer .drawer-actions {
padding: 24px;
border-top: 2px solid var(--border-gray);
background: var(--white);
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.05);
}
.mobile-drawer .drawer-actions .drawer-login-btn {
display: block;
text-align: center;
padding: 14px 20px;
color: var(--text-dark);
text-decoration: none;
border: 2px solid var(--primary-blue);
border-radius: 12px;
font-weight: 600;
font-size: 16px;
margin-bottom: 12px;
transition: all 0.3s ease;
}
.mobile-drawer .drawer-actions .drawer-login-btn:hover {
background: var(--light-bg);
color: var(--primary-blue);
}
.mobile-drawer .drawer-actions .drawer-signup-btn {
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-menu-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 14px 20px;
color: var(--white);
text-decoration: none;
border-radius: 12px;
font-weight: 600;
font-size: 16px;
margin-bottom: 12px;
transition: all 0.3s ease;
box-shadow: var(--shadow-md);
}
.mobile-drawer .drawer-actions .drawer-signup-btn:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-lg);
}
.mobile-drawer .drawer-actions .drawer-search-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
justify-content: space-between;
width: 100%;
padding: 14px 20px;
background: var(--gray-bg);
color: var(--text-dark);
height: 56px;
padding: 0 8px;
background: transparent;
border: none;
border-radius: 12px;
font-weight: 500;
font-size: 16px;
cursor: pointer;
transition: all 0.3s ease;
font-family: "Noto Sans KR", sans-serif;
font-size: 16px;
font-weight: 500;
color: #212529;
text-align: left;
}
.mobile-drawer .drawer-actions .drawer-search-btn:hover {
background: var(--light-bg);
color: var(--primary-blue);
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-menu-btn .accordion-icon {
transition: transform 0.3s ease;
}
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-submenu {
display: none;
list-style: none;
margin: 0;
padding: 12px 0;
background: #fafafa;
}
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-submenu li a {
display: block;
padding: 8px 16px 8px 57px;
font-family: "Noto Sans KR", sans-serif;
font-size: 14px;
font-weight: 500;
color: #212529;
text-decoration: none;
line-height: 28px;
transition: color 0.3s ease;
}
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-submenu li a:hover {
color: #0049b4;
}
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-submenu li:not(:first-child) a {
font-weight: 400;
color: #515151;
}
.mobile-drawer .drawer-nav .drawer-menu-item.open .drawer-menu-btn {
font-weight: 700;
}
.mobile-drawer .drawer-nav .drawer-menu-item.open .drawer-menu-btn .accordion-icon {
transform: rotate(180deg);
}
.mobile-drawer .drawer-nav .drawer-menu-item.open .drawer-submenu {
display: block;
}
.btn-mobilemenu {
@@ -15889,7 +15925,7 @@ body.commission-print-page .btn-primary:hover {
}
@media (max-width: 768px) {
.container {
padding: 0 16px;
padding: 0;
}
}
File diff suppressed because one or more lines are too long
@@ -9,7 +9,8 @@
padding: 0 $spacing-lg;
@include respond-to('sm') {
padding: 0 $spacing-md;
//padding: 0 $spacing-md;
padding: 0;
}
}
+162 -105
View File
@@ -312,7 +312,7 @@
}
// ===========================
// Mobile Drawer/Modal
// Mobile Drawer/Modal (Figma Design)
// ===========================
.mobile-drawer {
position: fixed;
@@ -335,7 +335,7 @@
}
.drawer-overlay {
display: none; // Not needed for full-screen drawer
display: none;
}
.drawer-content {
@@ -346,163 +346,220 @@
bottom: 0;
width: 100%;
height: 100%;
background: var(--white);
background: #ffffff;
transform: translateY(100%);
transition: transform 0.3s ease;
display: flex;
flex-direction: column;
overflow-y: auto;
}
// Figma: 헤더 바 44px
.drawer-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px;
border-bottom: 2px solid var(--border-gray);
background: var(--white);
box-shadow: var(--shadow-sm);
min-height: 60px;
height: 44px;
min-height: 44px;
padding: 0 12px 0 20px;
background: #ffffff;
.drawer-logo {
.drawer-header-left {
display: flex;
align-items: center;
gap: 12px;
gap: 8px;
.logo {
height: 32px;
width: auto;
.drawer-user-icon {
width: 24px;
height: 24px;
}
.logo-text {
font-size: 16px;
font-weight: 700;
color: var(--primary-blue);
.drawer-login-text {
font-family: 'Noto Sans KR', sans-serif;
font-size: 12px;
font-weight: 400;
color: #212529;
line-height: 26px;
}
}
.drawer-close {
width: 40px;
height: 40px;
width: 24px;
height: 24px;
background: transparent;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
padding: 0;
svg {
width: 24px;
height: 24px;
}
&:hover {
opacity: 0.7;
}
}
}
// Figma: 환영 영역 214px, 배경 #ebfbff
.drawer-welcome {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 214px;
padding: 40px 20px;
background: #ebfbff;
border-bottom: 1px solid #dadada;
.welcome-text {
font-family: 'Noto Sans KR', sans-serif;
font-size: 14px;
font-weight: 400;
color: #212529;
line-height: 26px;
margin: 0 0 24px 0;
text-align: center;
}
.welcome-buttons {
display: flex;
gap: 21px;
width: 100%;
max-width: 309px;
}
// Figma: 회원가입 버튼 - #e5e7eb 배경, #5f666c 텍스트
.btn-drawer-signup {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
height: 40px;
background: #e5e7eb;
color: #5f666c;
font-family: 'Noto Sans KR', sans-serif;
font-size: 14px;
font-weight: 700;
border-radius: 8px;
font-size: 18px;
color: var(--text-gray);
text-decoration: none;
transition: all 0.3s ease;
&:hover {
background: var(--white);
color: var(--text-dark);
background: #d1d5db;
}
}
// Figma: 로그인 버튼 - #0049b4 배경, 흰색 텍스트
.btn-drawer-login {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
height: 40px;
background: #0049b4;
color: #ffffff;
font-family: 'Noto Sans KR', sans-serif;
font-size: 14px;
font-weight: 700;
border-radius: 8px;
text-decoration: none;
transition: all 0.3s ease;
&:hover {
background: darken(#0049b4, 10%);
}
}
}
// Figma: 메뉴 리스트 (아코디언)
.drawer-nav {
flex: 1;
padding: 0;
overflow-y: auto;
background: var(--white);
padding: 0 20px;
background: #ffffff;
.drawer-menu {
.drawer-menu-list {
list-style: none;
margin: 0;
padding: 20px 0;
padding: 0;
}
.drawer-menu-item {
border-bottom: 1px solid #dadada;
// Figma: 메뉴 버튼 56px 높이
.drawer-menu-btn {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 56px;
padding: 0 8px;
background: transparent;
border: none;
cursor: pointer;
font-family: 'Noto Sans KR', sans-serif;
font-size: 16px;
font-weight: 500;
color: #212529;
text-align: left;
.accordion-icon {
transition: transform 0.3s ease;
}
}
// Figma: 서브메뉴 - 배경 #fafafa
.drawer-submenu {
display: none;
list-style: none;
margin: 0;
padding: 12px 0;
background: #fafafa;
li {
margin-bottom: 8px;
.drawer-link {
a {
display: block;
padding: 16px 24px;
margin: 0 20px;
color: var(--text-dark);
text-decoration: none;
font-size: 18px;
padding: 8px 16px 8px 57px;
font-family: 'Noto Sans KR', sans-serif;
font-size: 14px;
font-weight: 500;
border-radius: 12px;
transition: all 0.3s ease;
color: #212529;
text-decoration: none;
line-height: 28px;
transition: color 0.3s ease;
&:hover, &:active {
background: var(--light-bg);
color: var(--primary-blue);
transform: translateX(4px);
box-shadow: var(--shadow-sm);
&:hover {
color: #0049b4;
}
}
// 두 번째 항목부터 Regular
&:not(:first-child) a {
font-weight: 400;
color: #515151;
}
}
}
.drawer-actions {
padding: 24px;
border-top: 2px solid var(--border-gray);
background: var(--white);
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.05);
// 열린 상태
&.open {
.drawer-menu-btn {
font-weight: 700;
.drawer-login-btn {
.accordion-icon {
transform: rotate(180deg);
}
}
.drawer-submenu {
display: block;
text-align: center;
padding: 14px 20px;
color: var(--text-dark);
text-decoration: none;
border: 2px solid var(--primary-blue);
border-radius: 12px;
font-weight: 600;
font-size: 16px;
margin-bottom: 12px;
transition: all 0.3s ease;
&:hover {
background: var(--light-bg);
color: var(--primary-blue);
}
}
.drawer-signup-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 14px 20px;
color: var(--white);
text-decoration: none;
border-radius: 12px;
font-weight: 600;
font-size: 16px;
margin-bottom: 12px;
transition: all 0.3s ease;
box-shadow: var(--shadow-md);
&:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-lg);
}
}
.drawer-search-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
width: 100%;
padding: 14px 20px;
background: var(--gray-bg);
color: var(--text-dark);
border: none;
border-radius: 12px;
font-weight: 500;
font-size: 16px;
cursor: pointer;
transition: all 0.3s ease;
&:hover {
background: var(--light-bg);
color: var(--primary-blue);
}
}
}
}
@@ -98,87 +98,106 @@
</div>
</header>
<!-- Mobile Drawer/Modal -->
<!-- Mobile Drawer/Modal (Figma Design) -->
<div class="mobile-drawer" id="mobileDrawer">
<div class="drawer-overlay" id="drawerOverlay"></div>
<div class="drawer-content">
<!-- Drawer Header -->
<div class="drawer-header">
<div class="drawer-logo">
<a th:href="@{/}" class="drawer-logo-link">
<img src="/img/logo/logo.png" alt="광주은행" class="logo">
</a>
<a th:href="@{/}" class="logo-text">개발자 포털</a>
<div class="drawer-header-left">
<img th:src="@{/img/icon_user_blue.svg}" alt="User" class="drawer-user-icon" onerror="this.src='/img/user_icon.svg'">
<span class="drawer-login-text" sec:authorize="isAnonymous()">로그인 해 주세요</span>
<span class="drawer-login-text" sec:authorize="isAuthenticated()">[[${#authentication.principal.userName}]]님</span>
</div>
<button class="drawer-close" id="drawerClose">
<i class="fas fa-times"></i>
<button class="drawer-close" id="drawerClose" aria-label="메뉴 닫기">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 6L6 18M6 6L18 18" stroke="#212529" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
</div>
<!-- Authenticated User Info (Mobile) -->
<div class="drawer-user-info" sec:authorize="isAuthenticated()">
<div class="drawer-profile">
<div class="profile-avatar">
<i class="fas fa-user-circle"></i>
</div>
<div class="profile-info">
<p class="profile-name">[[${#authentication.principal.userName}]]님</p>
<span class="profile-greeting">즐거운 하루 되세요!</span>
</div>
<!-- Welcome Section (Anonymous) -->
<div class="drawer-welcome" sec:authorize="isAnonymous()">
<p class="welcome-text">광주은행 API Portal에 오신것을 환영합니다.</p>
<div class="welcome-buttons">
<a th:href="@{/signup}" class="btn-drawer-signup">회원가입</a>
<a th:href="@{/login}" class="btn-drawer-login">로그인</a>
</div>
</div>
<!-- Welcome Section (Authenticated) -->
<div class="drawer-welcome authenticated" sec:authorize="isAuthenticated()">
<p class="welcome-text">[[${#authentication.principal.userName}]]님, 환영합니다.</p>
<div class="welcome-buttons">
<a th:href="@{/mypage}" class="btn-drawer-signup">내 정보</a>
<a th:href="@{/actionLogout.do}" class="btn-drawer-login">로그아웃</a>
</div>
</div>
<!-- Navigation Menu (Accordion Style) -->
<nav class="drawer-nav">
<ul class="drawer-menu">
<li><a href="#docs" class="drawer-link">서비스 소개</a></li>
<li><a href="/apis" class="drawer-link">오픈 API</a></li>
<li><a href="#playground" class="drawer-link">고객지원</a></li>
<ul class="drawer-menu-list">
<!-- API Portal 안내 -->
<li class="drawer-menu-item has-submenu">
<button class="drawer-menu-btn" type="button">
<span>API Portal 안내</span>
<svg class="accordion-icon" width="14" height="7" viewBox="0 0 14 7" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 1L7 6L13 1" stroke="#212529" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
<ul class="drawer-submenu">
<li><a th:href="@{/about}">API Portal 소개</a></li>
<li><a th:href="@{/guide}">이용안내</a></li>
</ul>
</li>
<!-- Authenticated Menu Items -->
<li sec:authorize="isAuthenticated()">
<a href="#community" class="drawer-link">커뮤니티</a>
<!-- API -->
<li class="drawer-menu-item has-submenu">
<button class="drawer-menu-btn" type="button">
<span>API</span>
<svg class="accordion-icon" width="14" height="7" viewBox="0 0 14 7" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 1L7 6L13 1" stroke="#212529" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
<ul class="drawer-submenu">
<li><a th:href="@{/apis}">API 마켓</a></li>
</ul>
</li>
<li sec:authorize="hasRole('ROLE_USER_MANAGER')">
<a th:href="@{/users}" class="drawer-link">
<i class="fas fa-users"></i> 이용자 관리
</a>
<!-- 고객지원 -->
<li class="drawer-menu-item has-submenu">
<button class="drawer-menu-btn" type="button">
<span>고객지원</span>
<svg class="accordion-icon" width="14" height="7" viewBox="0 0 14 7" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 1L7 6L13 1" stroke="#212529" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
<ul class="drawer-submenu">
<li><a th:href="@{/portalnotice}">공지사항</a></li>
<li><a th:href="@{/faq_list}">FAQ</a></li>
<li><a th:href="@{/inquiry}">Q&amp;A</a></li>
<li><a th:href="@{/partnership}">사업 제휴 문의</a></li>
</ul>
</li>
<li sec:authorize="hasRole('ROLE_APP')">
<a th:href="@{/myapikey}" class="drawer-link">
<i class="fas fa-key"></i> 인증 키 관리
</a>
</li>
<li sec:authorize="hasRole('ROLE_APP')">
<a th:href="@{/statistics/api}" class="drawer-link">
<i class="fas fa-chart-bar"></i> 이용 통계
</a>
</li>
<li sec:authorize="isAuthenticated()">
<a th:href="@{/mypage}" class="drawer-link">
<i class="fas fa-user-circle"></i> 내 정보 관리
</a>
</li>
<li sec:authorize="isAuthenticated()">
<a th:href="@{/change_password}" class="drawer-link">
<i class="fas fa-lock"></i> 비밀번호 변경
</a>
<!-- 마이페이지 (Authenticated Only) -->
<li class="drawer-menu-item has-submenu" sec:authorize="isAuthenticated()">
<button class="drawer-menu-btn" type="button">
<span>마이페이지</span>
<svg class="accordion-icon" width="14" height="7" viewBox="0 0 14 7" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 1L7 6L13 1" stroke="#212529" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
<ul class="drawer-submenu">
<li sec:authorize="hasRole('ROLE_USER_MANAGER')"><a th:href="@{/users}">이용자 관리</a></li>
<li sec:authorize="hasRole('ROLE_APP')"><a th:href="@{/myapikey}">인증 키 관리</a></li>
<li sec:authorize="hasRole('ROLE_APP')"><a th:href="@{/statistics/api}">이용 통계</a></li>
<li sec:authorize="hasRole('ROLE_APP')"><a th:href="@{/commission/manage}">과금 관리</a></li>
<li><a th:href="@{/mypage}">내 정보 관리</a></li>
<li><a th:href="@{/change_password}">비밀번호 변경</a></li>
</ul>
</li>
</ul>
</nav>
<div class="drawer-actions">
<!-- Anonymous User Actions -->
<div sec:authorize="isAnonymous()">
<a th:href="@{/login}" class="drawer-login-btn">로그인</a>
</div>
<!-- Authenticated User Actions -->
<div sec:authorize="isAuthenticated()">
<a th:href="@{/actionLogout.do}" class="drawer-logout-btn">
<i class="fas fa-sign-out-alt"></i>
로그아웃
</a>
</div>
</div>
</div>
</div>
</th:block>
@@ -201,18 +220,40 @@
function closeDrawer() {
drawer.classList.remove('active');
document.body.style.overflow = '';
// Close all accordion menus when drawer closes
document.querySelectorAll('.drawer-menu-item.open').forEach(item => {
item.classList.remove('open');
});
}
menuToggle?.addEventListener('click', openDrawer);
drawerClose?.addEventListener('click', closeDrawer);
drawerOverlay?.addEventListener('click', closeDrawer);
// Close drawer when clicking on nav links
document.querySelectorAll('.drawer-link').forEach(link => {
// Mobile Drawer Accordion Menu
const menuButtons = document.querySelectorAll('.drawer-menu-btn');
menuButtons.forEach(btn => {
btn.addEventListener('click', function(e) {
e.preventDefault();
const menuItem = this.closest('.drawer-menu-item');
const isOpen = menuItem.classList.contains('open');
// Close all other menus (optional - remove for multi-open)
// document.querySelectorAll('.drawer-menu-item.open').forEach(item => {
// if (item !== menuItem) item.classList.remove('open');
// });
// Toggle current menu
menuItem.classList.toggle('open');
});
});
// Close drawer when clicking on submenu links
document.querySelectorAll('.drawer-submenu a').forEach(link => {
link.addEventListener('click', closeDrawer);
});
// Mypage Dropdown
// Mypage Dropdown (Desktop)
const mypageToggle = document.querySelector('.mypage-toggle');
const mypageDropdown = document.querySelector('.mypage-dropdown');
@@ -222,20 +263,18 @@
mypageDropdown.classList.toggle('active');
});
// Close dropdown when clicking outside
document.addEventListener('click', function(e) {
if (!mypageDropdown.contains(e.target)) {
mypageDropdown.classList.remove('active');
}
});
// Prevent dropdown from closing when clicking inside
mypageDropdown.addEventListener('click', function(e) {
e.stopPropagation();
});
}
// Desktop Navigation Submenu Toggle (Click-based for mobile-like behavior on desktop)
// Desktop Navigation Submenu Toggle
const navItems = document.querySelectorAll('.header-center .nav-menu > li');
navItems.forEach(item => {
@@ -243,30 +282,25 @@
const submenu = item.querySelector('.sub-menu');
if (submenu) {
// Add click handler for toggle
link.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
// Close other submenus
navItems.forEach(otherItem => {
if (otherItem !== item && otherItem.classList.contains('submenu-open')) {
otherItem.classList.remove('submenu-open');
}
});
// Toggle current submenu
item.classList.toggle('submenu-open');
});
// Close submenu when clicking outside
document.addEventListener('click', function(e) {
if (!item.contains(e.target)) {
item.classList.remove('submenu-open');
}
});
// Prevent submenu from closing when clicking inside
submenu.addEventListener('click', function(e) {
e.stopPropagation();
});