common.module.scss 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. .container {
  2. display: grid;
  3. height: 100vh;
  4. grid-template-rows: minmax(auto, 50px) 2fr auto;
  5. // PC
  6. @media (min-width: 1124px) {
  7. grid-template-areas: "header header header" "aside main chatAside" "aside footer chatAside";
  8. grid-template-columns: minmax(200px, 280px) 1fr minmax(200px, 400px);
  9. }
  10. // Tablet
  11. @media (max-width: 1125px) {
  12. grid-template-areas: "header" "main" "footer";
  13. grid-template-columns: 1fr;
  14. }
  15. > .header {
  16. grid-area: header;
  17. height: 56px;
  18. background: #f4f4f4;
  19. border-bottom: 1px solid #dedede;
  20. // 햄버거 메뉴
  21. .hamburger {
  22. display: none;
  23. align-items: center;
  24. justify-content: center;
  25. width: 40px;
  26. height: 40px;
  27. border: none;
  28. background: transparent;
  29. cursor: pointer;
  30. font-size: 1.25rem;
  31. color: #333;
  32. flex-shrink: 0;
  33. &:hover {
  34. color: #000;
  35. }
  36. @media (max-width: 1125px) {
  37. display: flex;
  38. }
  39. }
  40. // 로고
  41. > a, > .logoLink {
  42. flex-basis: 137px;
  43. font-size: inherit;
  44. padding-right: 20px;
  45. flex-shrink: 0;
  46. }
  47. // 메뉴
  48. nav {
  49. font-weight: 500;
  50. ul {
  51. li {
  52. a, button {
  53. &:hover {
  54. font-weight: 700;
  55. text-decoration: underline;
  56. }
  57. }
  58. }
  59. }
  60. }
  61. }
  62. // 좌측 사이드바 (코인 목록)
  63. > .aside {
  64. grid-area: aside;
  65. overflow-y: auto;
  66. transition: transform 0.3s ease;
  67. background: #fff;
  68. @media (min-width: 1124px) {
  69. position: relative;
  70. transform: translateX(0);
  71. border-right: 1px solid #dedede;
  72. }
  73. // 모바일: 왼쪽에서 슬라이드
  74. @media (max-width: 1125px) {
  75. position: fixed;
  76. top: 56px;
  77. left: 0;
  78. width: min(320px, 85vw);
  79. height: calc(100vh - 56px);
  80. z-index: 1000;
  81. transform: translateX(-100%);
  82. border-right: 1px solid #dedede;
  83. box-shadow: none;
  84. }
  85. }
  86. // 사이드바 열림 상태
  87. &.sidebarOpen {
  88. > .aside {
  89. @media (max-width: 1125px) {
  90. transform: translateX(0);
  91. box-shadow: 4px 0 12px rgba(0, 0, 0, 0.15);
  92. }
  93. }
  94. }
  95. // 메인 내용
  96. > .main {
  97. position: relative;
  98. grid-area: main;
  99. overflow-y: auto;
  100. border-bottom: 1px solid #dedede;
  101. }
  102. // 우측 사이드바 (채팅)
  103. > .chatAside {
  104. grid-area: chatAside;
  105. transition: transform 0.3s ease;
  106. @media (min-width: 1124px) {
  107. position: relative;
  108. transform: translateX(0);
  109. border-left: 1px solid #dedede;
  110. }
  111. // 테블릿일 때
  112. @media (max-width: 1125px) {
  113. position: fixed;
  114. top: 56px;
  115. right: 0;
  116. width: min(400px, 100vw);
  117. height: 100vh;
  118. z-index: 1000;
  119. transform: translateX(100%);
  120. }
  121. }
  122. // 사이드바 오버레이 (모바일)
  123. > .overlay {
  124. display: none;
  125. @media (max-width: 1125px) {
  126. position: fixed;
  127. top: 56px;
  128. left: 0;
  129. right: 0;
  130. bottom: 0;
  131. background: rgba(0, 0, 0, 0.4);
  132. z-index: 999;
  133. }
  134. }
  135. &.sidebarOpen > .overlay {
  136. @media (max-width: 1125px) {
  137. display: block;
  138. }
  139. }
  140. // 하단 내용
  141. > .footer {
  142. grid-area: footer;
  143. font-size: 0.688rem;
  144. padding: 4px;
  145. ol {
  146. display: flex;
  147. flex-flow: row;
  148. justify-content: space-between;
  149. li {
  150. &:nth-of-type(1) { // 최근 게시글
  151. flex-grow: 1;
  152. }
  153. &:nth-of-type(2) { // 공지사항
  154. flex-grow: 1;
  155. }
  156. &:nth-of-type(3) { // Copyright
  157. flex-grow: 0;
  158. }
  159. }
  160. }
  161. }
  162. // 페이지네이션
  163. #pagination {
  164. display: flex;
  165. flex-direction: row;
  166. flex-wrap: nowrap;
  167. justify-content: center;
  168. align-items: center;
  169. padding: 0.938rem 0 1.25rem 0;
  170. button {
  171. margin: 0 0.125rem;
  172. padding: 0.25rem 0.625rem;
  173. border-radius: 3px;
  174. &:hover {
  175. background: #f0f0f0;
  176. outline: 1px solid #dedede;
  177. }
  178. &.active {
  179. background: #f0f0f0;
  180. outline: 1px solid #b3b3b3;
  181. pointer-events: none;
  182. }
  183. }
  184. }
  185. }