/* 原始CSS样式保持不变 */ :root { --antd-color-8: #ad6800; --antd-color-7: #d48806; --antd-color-6: #faad14; --antd-color-5: #ffc53d; --antd-color-4: #ffd666; --antd-color-3: #ffe58f; --antd-color-2: #fff1b8; } html, body, .container { margin: 0; padding: 0; width: 100vw; height: 100vh; overflow: hidden; /* background: #eff2f9; */ background-image: url(../asset/bg.png); background-repeat: no-repeat; background-size: 100%; } .container-header { position: fixed; top: 0px; left: 0px; width: 100%; display: flex; justify-content: space-between; align-items: center; background-color: rgba(255, 255, 255, 0.9); box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 10px; z-index: 1000; padding: 10px 20px; } .container-header-logo { display: flex; align-items: center; } .container-header-nav { display: flex; margin-right: 50px; } .container-header-nav>div { text-align: center; margin-right: 10px; color: rgb(0, 0, 0); font-weight: 500; font-size: 16px; text-decoration: none; padding: 5px 20px; border-radius: 20px; transition: 0.3s; border: 1px solid transparent; cursor: pointer; } .container-header-nav>div:hover { border: 1px solid #999; } .container-header-nav>div.active { background-color: transparent; color: #000; border: 1px solid #000; } .breadcrumb { position: fixed; top: 75px; left: 0; right: 0; /* background: #eff2f9; */ backdrop-filter: blur(10px); padding: 15px 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.2); z-index: 999; font-family: inherit; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); animation: slideInDown 0.6s ease-out; } @keyframes slideInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } .breadcrumb-content { color: #6c757d; font-size: 18px; font-weight: 500; display: flex; align-items: center; justify-content: space-between; max-width: 1400px; margin: 0 auto; padding: 0 20px; } .breadcrumb-content a { color: var(--antd-color-6); text-decoration: none; font-weight: 600; position: relative; padding: 4px 8px; border-radius: 6px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .breadcrumb-content a::after { content: ''; position: absolute; bottom: 0; left: 50%; width: 0; height: 2px; background: var(--antd-color-6); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); transform: translateX(-50%); } .breadcrumb-content a:hover::after { width: 80%; } .search-container { position: relative; } .search-input { padding: 8px 35px 8px 12px; border: 2px solid #ddd; border-radius: 20px; outline: none; width: 150px; font-size: 14px; background: rgba(255, 255, 255, 0.9); transition: all 0.3s ease; color: #333; } .search-input::placeholder { color: #999; } .breadcrumb-path { display: flex; align-items: center; } .breadcrumb-path a { color: #000; /* 默认黑色 */ text-decoration: none; font-weight: 500; position: relative; padding: 4px 8px; border-radius: 6px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .breadcrumb-path a:hover { color: #faad14; } .breadcrumb-path a.active { color: #faad14; /* 选中状态为 #faad14 */ font-weight: 600; } .breadcrumb-path span { margin: 0 8px; opacity: 0.6; color: #666; } /* 搜索框样式 */ .search-container { position: relative; } .search-input { padding: 8px 35px 8px 12px; border: 2px solid #ddd; border-radius: 20px; outline: none; width: 150px; font-size: 14px; background: rgba(255, 255, 255, 0.9); transition: all 0.3s ease; color: #333; } .search-input::placeholder { color: #999; } .search-input:focus { border-color: #faad14; box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.1); width: 180px; } .search-icon { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); width: 16px; height: 16px; pointer-events: none; opacity: 0.6; color: #666; } .search-input:focus + .search-icon { opacity: 1; color: #faad14; } /* 主要内容区域 */ .main-content { display: flex; margin: 140px auto 20px auto; height: calc(100vh - 160px); font-family: inherit; max-width: 1400px; padding: 0 20px; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-radius: 12px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); animation: fadeInUp 0.8s ease-out; overflow: hidden; } @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } /* 左侧边栏 */ .sidebar { width: 280px; background: linear-gradient(145deg, #ffffff 0%, #f8f9fa 100%); border-right: 1px solid rgba(233, 236, 239, 0.3); overflow-y: auto; border-radius: 12px 0 0 12px; animation: slideInLeft 0.6s ease-out 0.2s both; } @keyframes slideInLeft { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } .sidebar-title { padding: 20px; font-size: 18px; font-weight: 700; color: #343a40; border-bottom: 1px solid rgba(233, 236, 239, 0.5); background: linear-gradient(90deg, var(--antd-color-6), var(--antd-color-8)); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; position: relative; } .sidebar-title::after { content: ''; position: absolute; bottom: 0; left: 20px; right: 20px; height: 3px; background: linear-gradient(90deg, var(--antd-color-6), var(--antd-color-8)); border-radius: 2px; } .sidebar-menu { list-style: none; padding: 10px 0; margin: 0; } .sidebar-menu li { margin: 5px 10px; border-radius: 8px; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .sidebar-menu li:hover { transform: translateX(5px); } .sidebar-menu li a { display: block; padding: 15px 20px; color: #343a40; text-decoration: none; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); font-size: 14px; font-weight: 500; border-radius: 8px; position: relative; overflow: hidden; } .sidebar-menu li a::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .sidebar-menu li a:hover::before { left: 100%; } .sidebar-menu li a:hover { background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); color: var(--antd-color-6); box-shadow: 0 2px 10px rgba(0, 123, 255, 0.1); } .sidebar-menu li.active a { background: linear-gradient(135deg, var(--antd-color-5), var(--antd-color-7)); color: white; font-weight: 600; box-shadow: 0 4px 15px var(--antd-color-2); } /* 右侧内容区域 */ .content-area { flex: 1; padding: 20px; overflow-y: auto; background: transparent; animation: slideInRight 0.6s ease-out 0.4s both; } @keyframes slideInRight { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } } /* 筛选区域 */ .filter-section { background: linear-gradient(145deg, #ffffff 0%, #f8f9fa 100%); padding: 25px; border-radius: 12px; margin-bottom: 25px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); backdrop-filter: blur(10px); animation: fadeInScale 0.6s ease-out 0.6s both; position: relative; overflow: hidden; } @keyframes fadeInScale { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } .filter-section::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, var(--antd-color-6), var(--antd-color-8), var(--antd-color-4)); } .filter-row { display: flex; align-items: center; margin-bottom: 20px; flex-wrap: wrap; animation: slideInUp 0.5s ease-out forwards; } @keyframes slideInUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .filter-row:last-child { margin-bottom: 0; } .filter-label { min-width: 80px; font-weight: 700; color: #343a40; margin-right: 20px; font-size: 15px; position: relative; } .filter-label::after { content: ''; position: absolute; right: -10px; top: 50%; width: 2px; height: 20px; background: linear-gradient(to bottom, var(--antd-color-6), transparent); transform: translateY(-50%); } .filter-tags { display: flex; flex-wrap: wrap; gap: 12px; } .filter-tag { padding: 8px 18px; background: linear-gradient(145deg, #ffffff, #f8f9fa); color: #6c757d; border: 2px solid transparent; border-radius: 25px; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .filter-tag::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .filter-tag:hover::before { left: 100%; } .filter-tag:hover { transform: translateY(-2px); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15); border-color: var(--antd-color-6); } .filter-tag.active { background: linear-gradient(135deg, var(--antd-color-5), var(--antd-color-7)); color: white; border-color: var(--antd-color-6); box-shadow: 0 4px 20px var(--antd-color-3); transform: translateY(-1px); } /* 教材展示区域 - 学期卡片 */ .materials-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(420px, 1fr)); gap: 30px; animation: staggerFadeIn 0.8s ease-out 0.8s both; } @keyframes staggerFadeIn { from { opacity: 0; } to { opacity: 1; } } .material-card { background: linear-gradient(145deg, #ffffff 0%, #f8f9fa 100%); border-radius: 12px; padding: 30px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); cursor: pointer; position: relative; overflow: hidden; border: 1px solid rgba(255, 255, 255, 0.2); animation: cardSlideIn 0.6s ease-out forwards; } @keyframes cardSlideIn { from { opacity: 0; transform: translateY(20px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } .material-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, var(--antd-color-6), var(--antd-color-8)); transform: scaleX(0); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .material-card:hover::before { transform: scaleX(1); } .material-card:hover { transform: translateY(-8px) scale(1.02); box-shadow: 0 15px 40px rgba(0, 0, 0, 0.2); } .material-cover { display: flex; align-items: center; margin-bottom: 25px; } .material-image { width: 130px; height: 160px; border-radius: 12px; margin-right: 25px; position: relative; overflow: hidden; background-size: cover; background-position: center; background-repeat: no-repeat; box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); /* 添加默认的渐变背景 */ background-color: var(--antd-color-2); background-image: linear-gradient(135deg, var(--antd-color-3) 0%, var(--antd-color-5) 100%); } .material-image::before { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 50px; height: 50px; background: url('data:image/svg+xml,') center/contain no-repeat; opacity: 0.4; pointer-events: none; z-index: 1; } /* 当背景图片加载成功时,隐藏默认图标 */ .material-image[style*="background-image: url"]::before { display: none; } .material-image::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(135deg, transparent 60%, rgba(0, 123, 255, 0.1)); opacity: 0; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .material-card:hover .material-image::after { opacity: 1; } .material-card:hover .material-image { transform: scale(1.05); } .material-info h3 { margin: 0 0 15px 0; font-size: 20px; font-weight: 700; color: #343a40; line-height: 1.4; background: linear-gradient(135deg, var(--antd-color-7), var(--antd-color-5)); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .material-meta { display: flex; align-items: center; gap: 15px; font-size: 14px; color: #6c757d; font-weight: 500; } .material-meta span { display: flex; align-items: center; gap: 8px; padding: 4px 10px; background: rgba(0, 123, 255, 0.1); border-radius: 15px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .material-meta span:hover { background: rgba(0, 123, 255, 0.2); transform: scale(1.05); } .material-meta .icon { width: 16px; height: 16px; background: linear-gradient(135deg, var(--antd-color-6), var(--antd-color-4)); border-radius: 50%; } .course-stats { font-size: 15px; color: #6c757d; margin-top: 18px; font-weight: 500; padding: 10px 15px; background: linear-gradient(135deg, rgba(0, 123, 255, 0.05), rgba(108, 117, 125, 0.05)); border-radius: 8px; border-left: 4px solid var(--antd-color-6); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .material-card:hover .course-stats { background: linear-gradient(135deg, rgba(0, 123, 255, 0.1), rgba(108, 117, 125, 0.1)); transform: translateX(5px); } /* 新增:课程列表展示区域 - 课程卡片 */ .course-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; animation: staggerFadeIn 0.8s ease-out 0.8s both; } /* 返回按钮样式 */ .back-button { grid-column: 1 / -1; display: flex; align-items: center; gap: 10px; padding: 12px 20px; background: linear-gradient(135deg, var(--antd-color-5), var(--antd-color-7)); color: white; border-radius: 25px; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 0 4px 15px var(--antd-color-3); margin-bottom: 20px; width: fit-content; } .back-button:hover { transform: translateY(-2px); box-shadow: 0 6px 25px var(--antd-color-3); background: linear-gradient(135deg, var(--antd-color-7), var(--antd-color-5)); } .back-button svg { width: 18px; height: 18px; } /* 课程卡片样式 - 比学期卡片更小 */ .course-card { background: linear-gradient(145deg, #ffffff 0%, #f8f9fa 100%); border-radius: 10px; padding: 20px; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); cursor: pointer; position: relative; overflow: hidden; border: 1px solid rgba(255, 255, 255, 0.2); animation: courseCardSlideIn 0.5s ease-out forwards; } @keyframes courseCardSlideIn { from { opacity: 0; transform: translateY(15px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } .course-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--antd-color-6), var(--antd-color-8)); transform: scaleX(0); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .course-card:hover::before { transform: scaleX(1); } .course-card:hover { transform: translateY(-5px) scale(1.02); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); } .course-card.disabled { opacity: 0.6; cursor: pointer; } .course-card.disabled:hover { transform: none; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08); } .course-cover { display: flex; flex-direction: column; height: 100%; } .course-image { width: 100%; height: 120px; border-radius: 8px; margin-bottom: 15px; background-size: cover; background-position: center; background-repeat: no-repeat; background-color: var(--antd-color-2); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; /* 添加默认的渐变背景,当图片加载失败时显示 */ background-image: linear-gradient(135deg, var(--antd-color-3) 0%, var(--antd-color-5) 100%); } .course-image::before { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 40px; height: 40px; background: url('data:image/svg+xml,') center/contain no-repeat; opacity: 0.3; pointer-events: none; } /* 当背景图片加载成功时,隐藏默认图标 */ .course-image[style*="background-image: url"]::before { display: none; } .course-image::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(135deg, transparent 60%, rgba(250, 173, 20, 0.1)); opacity: 0; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .course-card:hover .course-image::after { opacity: 1; } .course-card:hover .course-image { transform: scale(1.02); } .course-info { flex: 1; display: flex; flex-direction: column; } .course-info h4 { margin: 0 0 10px 0; font-size: 16px; font-weight: 600; color: #343a40; line-height: 1.3; background: linear-gradient(135deg, var(--antd-color-7), var(--antd-color-5)); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .course-description { margin: 0 0 12px 0; font-size: 13px; color: #6c757d; line-height: 1.4; flex: 1; } .course-meta { margin-bottom: 12px; } .course-id { font-size: 12px; color: #999; background: rgba(0, 123, 255, 0.1); padding: 3px 8px; border-radius: 10px; display: inline-block; } .course-action { font-size: 13px; color: #6c757d; font-weight: 500; padding: 8px 12px; background: linear-gradient(135deg, rgba(250, 173, 20, 0.05), rgba(108, 117, 125, 0.05)); border-radius: 6px; border-left: 3px solid var(--antd-color-6); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); text-align: center; } .course-card:hover .course-action { background: linear-gradient(135deg, rgba(250, 173, 20, 0.1), rgba(108, 117, 125, 0.1)); transform: translateY(-1px); } /* 空课程样式 */ .empty-course { grid-column: 1 / -1; text-align: center; padding: 60px 20px; color: #6c757d; } .empty-content h3 { margin: 0 0 10px 0; font-size: 20px; color: #343a40; } .empty-content p { margin: 0; font-size: 14px; opacity: 0.8; } /* 自定义滚动条 */ .sidebar::-webkit-scrollbar, .content-area::-webkit-scrollbar { width: 6px; } .sidebar::-webkit-scrollbar-track, .content-area::-webkit-scrollbar-track { background: rgba(248, 249, 250, 0.5); border-radius: 3px; } .sidebar::-webkit-scrollbar-thumb, .content-area::-webkit-scrollbar-thumb { background: linear-gradient(135deg, var(--antd-color-6), var(--antd-color-8)); border-radius: 3px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .sidebar::-webkit-scrollbar-thumb:hover, .content-area::-webkit-scrollbar-thumb:hover { background: linear-gradient(135deg, var(--antd-color-8), var(--antd-color-4)); } /* 响应式优化 */ @media (max-width: 768px) { .main-content { flex-direction: column; margin: 120px 10px 10px 10px; height: calc(100vh - 130px); } .sidebar { width: 100%; height: auto; border-right: none; border-bottom: 1px solid rgba(255, 255, 255, 0.2); border-radius: 12px 12px 0 0; } .materials-grid { grid-template-columns: 1fr; gap: 20px; } .course-grid { grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 15px; } .material-cover { flex-direction: column; text-align: center; } .material-image { margin-right: 0; margin-bottom: 15px; } } /* 加载动画 */ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .loading { animation: pulse 1.5s ease-in-out infinite; }