BroadcastSection.module.scss 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // 섹션 제목 스타일
  2. .section-title {
  3. font-size: 1.5rem;
  4. font-weight: bold;
  5. margin-bottom: 1.5rem;
  6. color: #1f2937;
  7. display: flex;
  8. align-items: center;
  9. gap: 0.5rem;
  10. }
  11. // 인기 LIVE 섹션
  12. .popular-section {
  13. margin-bottom: 3rem;
  14. }
  15. // 캐러셀 컨테이너
  16. .carousel-container {
  17. position: relative;
  18. overflow: visible;
  19. border-radius: 12px;
  20. @media (max-width: 480px) {
  21. overflow: hidden;
  22. }
  23. }
  24. .carousel-track {
  25. display: flex;
  26. gap: 1rem;
  27. overflow-x: auto;
  28. scroll-behavior: smooth;
  29. padding: 0.5rem 0;
  30. // 스크롤바 숨기기
  31. &::-webkit-scrollbar {
  32. display: none;
  33. }
  34. -ms-overflow-style: none;
  35. scrollbar-width: none;
  36. // 모바일에서 적절한 패딩 추가
  37. @media (max-width: 480px) {
  38. padding: 0.5rem;
  39. gap: 0.8rem;
  40. overflow-x: scroll;
  41. }
  42. }
  43. // 실시간 LIVE 섹션
  44. .live-section {
  45. margin-top: 2rem;
  46. }
  47. // 비디오 그리드 스타일 (무한스크롤 대응)
  48. .video-grid {
  49. display: flex;
  50. flex-direction: column;
  51. gap: 1.5rem;
  52. margin: 0 auto;
  53. width: 100%;
  54. max-width: 100%;
  55. box-sizing: border-box;
  56. // 태블릿: 2개씩 (481px ~ 768px)
  57. @media (min-width: 481px) and (max-width: 768px) {
  58. display: grid;
  59. grid-template-columns: repeat(2, 1fr);
  60. gap: 1.2rem;
  61. padding: 0;
  62. max-width: 100%;
  63. }
  64. // 데스크톱: 3개씩 (769px 이상)
  65. @media (min-width: 769px) {
  66. display: grid;
  67. grid-template-columns: repeat(3, 1fr);
  68. gap: 1.5rem;
  69. padding: 0;
  70. max-width: 1000px;
  71. }
  72. // 모바일: 세로 스크롤 (480px 미만)
  73. @media (max-width: 479px) {
  74. gap: 1rem;
  75. padding: 0;
  76. }
  77. }
  78. // 스켈레톤 로딩 스타일
  79. .skeleton-card {
  80. display: flex;
  81. flex-direction: column;
  82. background: #f8f9fa;
  83. border-radius: 12px;
  84. overflow: hidden;
  85. min-width: 280px;
  86. height: 220px;
  87. position: relative;
  88. @media (max-width: 480px) {
  89. min-width: 250px;
  90. height: 200px;
  91. }
  92. }
  93. .skeleton-thumbnail {
  94. width: 100%;
  95. height: 160px;
  96. background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%);
  97. background-size: 200% 100%;
  98. animation: skeleton-loading 1.5s infinite;
  99. @media (max-width: 480px) {
  100. height: 140px;
  101. }
  102. }
  103. .skeleton-info {
  104. padding: 12px;
  105. display: flex;
  106. flex-direction: column;
  107. gap: 8px;
  108. }
  109. .skeleton-text {
  110. height: 16px;
  111. background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%);
  112. background-size: 200% 100%;
  113. animation: skeleton-loading 1.5s infinite;
  114. border-radius: 4px;
  115. width: 80%;
  116. }
  117. .skeleton-text-small {
  118. height: 12px;
  119. background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%);
  120. background-size: 200% 100%;
  121. animation: skeleton-loading 1.5s infinite;
  122. border-radius: 4px;
  123. width: 60%;
  124. }
  125. @keyframes skeleton-loading {
  126. 0% {
  127. background-position: -200% 0;
  128. }
  129. 100% {
  130. background-position: 200% 0;
  131. }
  132. }