与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

288 lines
6.3 KiB

  1. .page {
  2. background: linear-gradient(145deg, #f5f7fa 0%, #f0f2f5 100%);
  3. }
  4. .notice-page {
  5. min-height: 100vh;
  6. background: transparent;
  7. position: relative;
  8. font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, sans-serif;
  9. }
  10. .bg-blur {
  11. position: fixed;
  12. top: 0;
  13. left: 0;
  14. width: 100%;
  15. height: 100%;
  16. background: radial-gradient(circle at 20% 30%, rgba(235, 245, 255, 0.7) 0%, rgba(255, 255, 255, 0.9) 70%);
  17. backdrop-filter: blur(20px);
  18. -webkit-backdrop-filter: blur(20px);
  19. z-index: 0;
  20. pointer-events: none;
  21. }
  22. .content {
  23. position: relative;
  24. z-index: 2;
  25. display: flex;
  26. flex-direction: column;
  27. padding: 30rpx 32rpx 0;
  28. box-sizing: border-box;
  29. }
  30. /* 头部与搜索 */
  31. .header {
  32. margin-bottom: 36rpx;
  33. }
  34. .title {
  35. font-size: 48rpx;
  36. font-weight: 700;
  37. color: #1e293b;
  38. letter-spacing: 2rpx;
  39. display: block;
  40. margin-bottom: 24rpx;
  41. text-shadow: 0 4rpx 12rpx rgba(0,0,0,0.02);
  42. }
  43. .search-box {
  44. background: rgba(255,255,255,0.7);
  45. backdrop-filter: blur(8px);
  46. -webkit-backdrop-filter: blur(8px);
  47. border-radius: 48rpx;
  48. padding: 16rpx 32rpx;
  49. display: flex;
  50. align-items: center;
  51. border: 1rpx solid rgba(255,255,255,0.9);
  52. box-shadow: 0 8rpx 20rpx rgba(0,0,0,0.02), 0 2rpx 4rpx rgba(0,0,0,0.02);
  53. transition: all 0.2s;
  54. }
  55. .search-box:focus-within {
  56. border-color: #b2d9ff;
  57. background: rgba(255,255,255,0.9);
  58. box-shadow: 0 12rpx 28rpx rgba(0,120,255,0.08);
  59. }
  60. .search-box .icon {
  61. font-size: 32rpx;
  62. color: #7c8ea0;
  63. margin-right: 16rpx;
  64. }
  65. .search-box input {
  66. flex: 1;
  67. font-size: 30rpx;
  68. padding: 8rpx 0;
  69. color: #1e293b;
  70. }
  71. .placeholder {
  72. color: #9aa6b2;
  73. font-weight: 400;
  74. }
  75. .clear-icon {
  76. font-size: 36rpx;
  77. color: #8e9dac;
  78. padding: 8rpx;
  79. border-radius: 50%;
  80. background: rgba(0,0,0,0.02);
  81. width: 40rpx;
  82. height: 40rpx;
  83. display: flex;
  84. align-items: center;
  85. justify-content: center;
  86. }
  87. /* 分类导航 — 磨砂质感 */
  88. .category-scroll {
  89. white-space: nowrap;
  90. margin-bottom: 32rpx;
  91. background: rgba(255,255,255,0.5);
  92. backdrop-filter: blur(12px);
  93. -webkit-backdrop-filter: blur(12px);
  94. border-radius: 60rpx;
  95. padding: 8rpx 0;
  96. border: 1rpx solid rgba(255,255,255,0.8);
  97. }
  98. .category-list {
  99. display: inline-flex;
  100. padding: 0 24rpx;
  101. }
  102. .category-item {
  103. display: inline-flex;
  104. flex-direction: column;
  105. align-items: center;
  106. justify-content: center;
  107. padding: 16rpx 36rpx;
  108. margin-right: 12rpx;
  109. border-radius: 60rpx;
  110. font-size: 30rpx;
  111. color: #475569;
  112. background: transparent;
  113. transition: all 0.18s;
  114. position: relative;
  115. font-weight: 500;
  116. }
  117. .category-item.active {
  118. background: #ffffff;
  119. color: #1e4bd2;
  120. font-weight: 600;
  121. box-shadow: 0 6rpx 14rpx rgba(0,80,255,0.1);
  122. }
  123. .dot {
  124. width: 8rpx;
  125. height: 8rpx;
  126. background: #1e4bd2;
  127. border-radius: 50%;
  128. margin-top: 6rpx;
  129. }
  130. /* 列表容器 */
  131. .list-container {
  132. flex: 1;
  133. height: calc(100vh - 280rpx);
  134. background: transparent;
  135. border-radius: 40rpx 40rpx 0 0;
  136. margin-top: 8rpx;
  137. }
  138. .notice-scroll {
  139. height: 100%;
  140. padding-bottom: 20rpx;
  141. }
  142. .notice-list {
  143. display: flex;
  144. flex-direction: column;
  145. gap: 28rpx;
  146. }
  147. /* 卡片设计 — 轻盈毛玻璃 */
  148. .notice-card {
  149. background: rgba(255,255,255,0.7);
  150. backdrop-filter: blur(16px);
  151. -webkit-backdrop-filter: blur(16px);
  152. border-radius: 36rpx;
  153. border: 1rpx solid rgba(255,255,255,0.9);
  154. box-shadow: 0 8rpx 18rpx rgba(0,0,0,0.02);
  155. display: flex;
  156. overflow: hidden;
  157. transition: transform 0.2s, box-shadow 0.3s;
  158. }
  159. .notice-card:active {
  160. transform: scale(0.99);
  161. box-shadow: 0 4rpx 12rpx rgba(0,0,0,0.04);
  162. }
  163. .card-left-bar {
  164. width: 12rpx;
  165. flex-shrink: 0;
  166. background: #3b82f6;
  167. }
  168. .card-content {
  169. flex: 1;
  170. padding: 32rpx 28rpx;
  171. }
  172. .card-header {
  173. display: flex;
  174. align-items: center;
  175. justify-content: space-between;
  176. margin-bottom: 16rpx;
  177. }
  178. .notice-title {
  179. font-size: 34rpx;
  180. font-weight: 600;
  181. color: #0a1e3c;
  182. max-width: 460rpx;
  183. overflow: hidden;
  184. text-overflow: ellipsis;
  185. white-space: nowrap;
  186. }
  187. .notice-tag {
  188. font-size: 24rpx;
  189. padding: 8rpx 24rpx;
  190. border-radius: 48rpx;
  191. background: #eef2ff;
  192. color: #1e4bd2;
  193. font-weight: 500;
  194. letter-spacing: 1rpx;
  195. }
  196. .notice-abstract {
  197. font-size: 28rpx;
  198. color: #55657a;
  199. line-height: 1.5;
  200. margin-bottom: 28rpx;
  201. display: -webkit-box;
  202. -webkit-line-clamp: 2;
  203. -webkit-box-orient: vertical;
  204. overflow: hidden;
  205. text-overflow: ellipsis;
  206. }
  207. .card-footer {
  208. display: flex;
  209. justify-content: space-between;
  210. align-items: center;
  211. color: #778a9b;
  212. font-size: 26rpx;
  213. }
  214. .date-time, .view-count {
  215. display: flex;
  216. align-items: center;
  217. gap: 8rpx;
  218. }
  219. /* 加载更多 / 状态 */
  220. .load-more {
  221. text-align: center;
  222. padding: 48rpx 0 36rpx;
  223. color: #8f9eb0;
  224. font-size: 28rpx;
  225. display: flex;
  226. align-items: center;
  227. justify-content: center;
  228. gap: 12rpx;
  229. }
  230. .loading-icon {
  231. font-size: 48rpx;
  232. line-height: 1;
  233. animation: pulse 1.2s infinite;
  234. }
  235. @keyframes pulse {
  236. 0%, 100% { opacity: 0.6; }
  237. 50% { opacity: 1; }
  238. }
  239. /* 骨架屏 */
  240. .skeleton-list {
  241. padding: 0 8rpx;
  242. }
  243. .skeleton-item {
  244. background: rgba(255,255,255,0.6);
  245. border-radius: 32rpx;
  246. height: 220rpx;
  247. margin-bottom: 28rpx;
  248. position: relative;
  249. overflow: hidden;
  250. }
  251. .skeleton-item::after {
  252. content: "";
  253. position: absolute;
  254. top: 0;
  255. left: -150%;
  256. width: 200%;
  257. height: 100%;
  258. background: linear-gradient(90deg, transparent, rgba(255,255,255,0.7), transparent);
  259. animation: shimmer 1.5s infinite;
  260. }
  261. @keyframes shimmer {
  262. 100% { left: 100%; }
  263. }
  264. /* 空状态 */
  265. .empty-state {
  266. display: flex;
  267. flex-direction: column;
  268. align-items: center;
  269. justify-content: center;
  270. padding: 120rpx 0;
  271. color: #6f7d8c;
  272. font-size: 32rpx;
  273. background: rgba(255,255,255,0.4);
  274. backdrop-filter: blur(8px);
  275. border-radius: 48rpx;
  276. margin-top: 60rpx;
  277. }
  278. /* 模拟图片(无实际图片用文字代替) */
  279. .empty-state text:first-of-type {
  280. font-size: 64rpx;
  281. margin-bottom: 24rpx;
  282. }