대시보드 프로토타입 플로팅 액션 메뉴 디자인 개선

- 모바일에서 플로팅 버튼 위치 개선 (하단 탭 위로 명확하게 표시)
  - 모바일: bottom 160px (하단 네비게이션 바 위에 배치)
  - 데스크톱: bottom 96px (적절한 위치 유지)

- 플로팅 액션 메뉴 버튼 스타일 통일
  - 배경색: Primary 색상 (#4DD5A7) - FAB와 동일
  - 텍스트/아이콘: 흰색 - FAB와 동일
  - Hover 효과: Primary-dark - FAB와 동일
  - 그림자: shadow-fab - FAB와 동일

- 사용성 개선
  - 터치 영역 확보: min-height 48px
  - Active 상태 피드백 추가
  - 부드러운 애니메이션 유지

- FAB 버튼 z-index 조정
  - common.css: z-index 1001로 상향 (하단 네비게이션 바 위에 표시)
  - 모바일: bottom 88px, 데스크톱: bottom 24px

- Mobile First 디자인 철학 준수
- UI/UX 설계서와 완벽 매칭

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
yabo0812 2025-10-22 10:01:59 +09:00
parent 93ff4ddaca
commit 3419194f24
2 changed files with 167 additions and 4 deletions

View File

@ -407,6 +407,93 @@
section { section {
margin-bottom: var(--space-xl); margin-bottom: var(--space-xl);
} }
/* 플로팅 액션 메뉴 */
.fab-menu {
position: fixed;
bottom: 160px; /* 모바일: FAB 버튼(88px) + FAB 높이(56px) + 여백(16px) */
right: var(--space-lg);
display: flex;
flex-direction: column;
gap: var(--space-md);
z-index: 999;
opacity: 0;
transform: translateY(20px);
pointer-events: none;
transition: all var(--transition-normal);
}
.fab-menu.active {
opacity: 1;
transform: translateY(0);
pointer-events: all;
}
.fab-menu-item {
display: flex;
align-items: center;
gap: var(--space-sm);
background: var(--primary); /* FAB와 동일한 Primary 색상 */
border-radius: var(--radius-full);
padding: var(--space-sm) var(--space-lg);
box-shadow: var(--shadow-fab);
cursor: pointer;
transition: all var(--transition-fast);
white-space: nowrap;
min-height: 48px; /* 터치 영역 확보 */
}
.fab-menu-item:hover {
background: var(--primary-dark); /* FAB hover와 동일 */
transform: translateX(-4px);
box-shadow: var(--shadow-lg);
}
.fab-menu-item:active {
transform: translateX(-4px) scale(0.98);
}
.fab-menu-item-icon {
font-size: 20px;
color: var(--white);
}
.fab-menu-item-text {
font-weight: var(--font-weight-medium);
font-size: var(--font-body);
color: var(--white); /* 흰색 텍스트 */
}
/* FAB 회전 효과 */
.fab.active {
transform: rotate(45deg);
}
/* 오버레이 */
.fab-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.3);
z-index: 998;
opacity: 0;
pointer-events: none;
transition: opacity var(--transition-normal);
}
.fab-overlay.active {
opacity: 1;
pointer-events: all;
}
/* 데스크톱에서 위치 조정 */
@media (min-width: 768px) {
.fab-menu {
bottom: 96px; /* 데스크톱: FAB 버튼(24px) + FAB 높이(56px) + 여백(16px) */
}
}
</style> </style>
</head> </head>
<body> <body>
@ -529,8 +616,23 @@
</a> </a>
</nav> </nav>
<!-- FAB 오버레이 -->
<div class="fab-overlay" id="fabOverlay"></div>
<!-- FAB 메뉴 -->
<div class="fab-menu" id="fabMenu">
<div class="fab-menu-item" id="quickStartBtn">
<div class="fab-menu-item-icon">🚀</div>
<div class="fab-menu-item-text">새 회의 시작</div>
</div>
<div class="fab-menu-item" id="scheduleMeetingBtn">
<div class="fab-menu-item-icon">📅</div>
<div class="fab-menu-item-text">회의 예약</div>
</div>
</div>
<!-- FAB (Floating Action Button) --> <!-- FAB (Floating Action Button) -->
<button class="fab" id="fabButton" title="새 회의 예약">+</button> <button class="fab" id="fabButton" title="새 회의 만들기">+</button>
<script src="common.js"></script> <script src="common.js"></script>
<script> <script>
@ -746,10 +848,64 @@
console.log('대시보드 초기화 완료'); console.log('대시보드 초기화 완료');
} }
/**
* FAB 메뉴 토글
*/
let fabMenuOpen = false;
function toggleFabMenu() {
fabMenuOpen = !fabMenuOpen;
const fabButton = $('#fabButton');
const fabMenu = $('#fabMenu');
const fabOverlay = $('#fabOverlay');
if (fabMenuOpen) {
fabButton.classList.add('active');
fabMenu.classList.add('active');
fabOverlay.classList.add('active');
} else {
fabButton.classList.remove('active');
fabMenu.classList.remove('active');
fabOverlay.classList.remove('active');
}
}
function closeFabMenu() {
if (fabMenuOpen) {
toggleFabMenu();
}
}
/** /**
* FAB 버튼 클릭 이벤트 * FAB 버튼 클릭 이벤트
*/ */
$('#fabButton').addEventListener('click', () => { $('#fabButton').addEventListener('click', (e) => {
e.stopPropagation();
toggleFabMenu();
});
/**
* FAB 오버레이 클릭 시 메뉴 닫기
*/
$('#fabOverlay').addEventListener('click', () => {
closeFabMenu();
});
/**
* "새 회의 시작" 버튼 클릭
*/
$('#quickStartBtn').addEventListener('click', () => {
closeFabMenu();
// 템플릿 선택 화면으로 이동 (빠른 시작)
navigateTo('04-템플릿선택.html');
});
/**
* "회의 예약" 버튼 클릭
*/
$('#scheduleMeetingBtn').addEventListener('click', () => {
closeFabMenu();
// 회의 예약 화면으로 이동
navigateTo('03-회의예약.html'); navigateTo('03-회의예약.html');
}); });

View File

@ -280,7 +280,7 @@ a:hover {
/* FAB */ /* FAB */
.fab { .fab {
position: fixed; position: fixed;
bottom: 24px; bottom: 88px; /* 하단 네비게이션 바(64px) + 여백(24px) */
right: 24px; right: 24px;
width: 56px; width: 56px;
height: 56px; height: 56px;
@ -295,7 +295,14 @@ a:hover {
justify-content: center; justify-content: center;
font-size: 24px; font-size: 24px;
transition: all var(--transition-normal); transition: all var(--transition-normal);
z-index: 100; z-index: 1001; /* 하단 네비게이션 바(1000) 위에 표시 */
}
/* 데스크톱에서는 원래 위치로 */
@media (min-width: 768px) {
.fab {
bottom: 24px;
}
} }
.fab:hover { .fab:hover {