site.scss 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. html, body {
  2. height: 100vh;
  3. margin: 0;
  4. padding: 0;
  5. }
  6. body {
  7. display: grid;
  8. grid-template-rows: auto 1fr;
  9. grid-template-columns: minmax(200px, 0.17fr) 1fr;
  10. grid-gap: 0;
  11. // 모바일 전용: 완전 숨김 (offcanvas 스타일)
  12. &.hidden-aside {
  13. grid-template-columns: 0 auto;
  14. aside {
  15. transform: translateX(-100%);
  16. opacity: 0;
  17. }
  18. }
  19. // 데스크탑: 좁은 폭 + 아이콘만 표시
  20. &.collapsed-aside {
  21. grid-template-columns: 56px 1fr;
  22. aside {
  23. > ul.nav > li.nav-item {
  24. > a {
  25. justify-content: center;
  26. padding: 0.563rem 0;
  27. text-align: center;
  28. .menu-label,
  29. .menu-chevron {
  30. display: none;
  31. }
  32. i.bi {
  33. margin: 0;
  34. font-size: 1.05rem;
  35. }
  36. }
  37. // 자식 collapse 패널은 강제 숨김 (Bootstrap collapse 상태와 무관)
  38. > ul.collapse,
  39. > ul.collapse.show {
  40. display: none !important;
  41. }
  42. }
  43. footer {
  44. display: none;
  45. }
  46. }
  47. }
  48. aside {
  49. position: relative;
  50. height: inherit;
  51. background-color: #f9f9f9;
  52. border-right: 1px solid #ddd;
  53. overflow-y: auto;
  54. transition: transform 0.3s ease, opacity 0.3s ease;
  55. transform: translateX(0);
  56. display: flex;
  57. -ms-flex-direction: inherit;
  58. -webkit-flex-direction: inherit;
  59. flex-direction: column;
  60. > ul.nav {
  61. flex-grow: 1;
  62. > li.nav-item {
  63. &:first-of-type {
  64. > a {
  65. border-bottom: 1px solid #ddd;
  66. }
  67. }
  68. &:not(:first-of-type) {
  69. border-bottom: 1px solid #ddd;
  70. > a:not(.collapsed) {
  71. background-color: #f1f1f1;
  72. }
  73. }
  74. > ul {
  75. padding: 0.625rem 0.625rem 0.625rem 0;
  76. border-top: 1px solid #ddd;
  77. }
  78. ul {
  79. transition: none;
  80. }
  81. a {
  82. display: flex;
  83. align-items: center;
  84. gap: 0.5rem;
  85. padding: 0.438rem 0.781rem;
  86. color: #333;
  87. text-decoration: none;
  88. cursor: pointer;
  89. &:hover {
  90. background-color: #f0f0f0;
  91. }
  92. &.active {
  93. background-color: #e9e9e9;
  94. outline: 1px solid #ddd;
  95. }
  96. .menu-label {
  97. flex-grow: 1;
  98. }
  99. .menu-chevron {
  100. font-size: 0.75rem;
  101. color: #888;
  102. transition: transform 0.2s ease;
  103. }
  104. // 펼침 상태 — chevron 회전 (Bootstrap이 .collapsed 클래스 제거 시)
  105. &:not(.collapsed) .menu-chevron {
  106. transform: rotate(180deg);
  107. }
  108. }
  109. }
  110. }
  111. footer {
  112. padding: 0.781rem;
  113. text-align: center;
  114. border-top: 1px solid #ddd;
  115. a {
  116. color: #333;
  117. text-decoration: none;
  118. &:hover {
  119. color: blue;
  120. text-decoration: underline;
  121. }
  122. }
  123. }
  124. }
  125. main {
  126. background-color: #ffffff;
  127. height: inherit;
  128. overflow-y: auto;
  129. > header {
  130. border-bottom: 1px solid #ddd;
  131. padding: 0.313rem 0.781rem;
  132. .logo {
  133. color: #333;
  134. text-decoration: none;
  135. &:hover {
  136. text-decoration: underline;
  137. }
  138. img {
  139. position: relative;
  140. top: -2px;
  141. }
  142. }
  143. .profile-icon {
  144. display: none;
  145. }
  146. }
  147. > div.container-fluid {
  148. padding: 0.781rem;
  149. }
  150. }
  151. }
  152. @media (max-width: 768px) {
  153. body {
  154. main {
  155. > header {
  156. .profile-text {
  157. display: none;
  158. }
  159. .profile-icon {
  160. display: inline-block;
  161. }
  162. }
  163. }
  164. }
  165. }