html, body { height: 100vh; margin: 0; padding: 0; } body { display: grid; grid-template-rows: auto 1fr; grid-template-columns: minmax(200px, 0.17fr) 1fr; grid-gap: 0; // 모바일 전용: 완전 숨김 (offcanvas 스타일) &.hidden-aside { grid-template-columns: 0 auto; aside { transform: translateX(-100%); opacity: 0; } } // 데스크탑: 좁은 폭 + 아이콘만 표시 &.collapsed-aside { grid-template-columns: 56px 1fr; aside { > ul.nav > li.nav-item { > a { justify-content: center; padding: 0.563rem 0; text-align: center; .menu-label, .menu-chevron { display: none; } i.bi { margin: 0; font-size: 1.05rem; } } // 자식 collapse 패널은 강제 숨김 (Bootstrap collapse 상태와 무관) > ul.collapse, > ul.collapse.show { display: none !important; } } footer { display: none; } } } aside { position: relative; height: inherit; background-color: #f9f9f9; border-right: 1px solid #ddd; overflow-y: auto; transition: transform 0.3s ease, opacity 0.3s ease; transform: translateX(0); display: flex; -ms-flex-direction: inherit; -webkit-flex-direction: inherit; flex-direction: column; > ul.nav { flex-grow: 1; > li.nav-item { &:first-of-type { > a { border-bottom: 1px solid #ddd; } } &:not(:first-of-type) { border-bottom: 1px solid #ddd; > a:not(.collapsed) { background-color: #f1f1f1; } } > ul { padding: 0.625rem 0.625rem 0.625rem 0; border-top: 1px solid #ddd; } ul { transition: none; } a { display: flex; align-items: center; gap: 0.5rem; padding: 0.438rem 0.781rem; color: #333; text-decoration: none; cursor: pointer; &:hover { background-color: #f0f0f0; } &.active { background-color: #e9e9e9; outline: 1px solid #ddd; } .menu-label { flex-grow: 1; } .menu-chevron { font-size: 0.75rem; color: #888; transition: transform 0.2s ease; } // 펼침 상태 — chevron 회전 (Bootstrap이 .collapsed 클래스 제거 시) &:not(.collapsed) .menu-chevron { transform: rotate(180deg); } } } } footer { padding: 0.781rem; text-align: center; border-top: 1px solid #ddd; a { color: #333; text-decoration: none; &:hover { color: blue; text-decoration: underline; } } } } main { background-color: #ffffff; height: inherit; overflow-y: auto; > header { border-bottom: 1px solid #ddd; padding: 0.313rem 0.781rem; .logo { color: #333; text-decoration: none; &:hover { text-decoration: underline; } img { position: relative; top: -2px; } } .profile-icon { display: none; } } > div.container-fluid { padding: 0.781rem; } } } @media (max-width: 768px) { body { main { > header { .profile-text { display: none; } .profile-icon { display: inline-block; } } } } }