Files
xingque/pages/category/category.wxss
2026-07-09 00:17:03 +08:00

1175 lines
24 KiB
Plaintext

/* pages/category/category.wxss */
.fenlei-page {
width: 100%;
height: 100vh;
background: linear-gradient(135deg, #f8f9ff 0%, #f0f2ff 100%);
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
}
/* 1. 毛玻璃搜索框区域(固定) */
.search-container {
padding: 24rpx 32rpx;
background: transparent;
flex-shrink: 0;
position: relative;
z-index: 100;
}
.search-box {
backdrop-filter: blur(30rpx);
-webkit-backdrop-filter: blur(30rpx);
box-shadow:
0 8rpx 32rpx rgba(31, 38, 135, 0.1),
inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
position: relative;
overflow: hidden;
}
.search-box::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.1));
border-radius: 50rpx;
z-index: -1;
}
.search-icon {
width: 34rpx;
height: 34rpx;
margin-right: 18rpx;
opacity: 0.6;
}
.search-input {
margin-left: 0;
color: #222;
font-weight: 400;
}
.search-placeholder {
color: #aaa;
font-size: 28rpx;
}
.search-btn {
margin-left: 20rpx;
box-shadow: 0 6rpx 20rpx rgba(255, 170, 0, 0.3);
transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.search-btn:active {
transform: scale(0.95);
box-shadow: 0 4rpx 15rpx rgba(255, 170, 0, 0.4);
}
.search-btn-text {
font-size: 26rpx;
color: white;
font-weight: 600;
position: relative;
z-index: 1;
}
.search-btn-glow {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
transform: translateX(-100%);
transition: transform 0.6s;
}
.search-btn:active .search-btn-glow {
transform: translateX(100%);
}
.search-clear {
width: 36rpx;
height: 36rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-left: 16rpx;
opacity: 0.6;
transition: opacity 0.3s;
}
.search-clear:active {
opacity: 1;
}
.clear-icon {
width: 24rpx;
height: 24rpx;
}
/* 2. 商品类型选择区域(固定) */
.leixing-container {
padding: 0 32rpx 24rpx;
flex-shrink: 0;
position: relative;
}
.leixing-bg-glow {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 300rpx;
height: 300rpx;
background: radial-gradient(circle, rgba(255, 204, 0, 0.1) 0%, transparent 70%);
z-index: -1;
}
.leixing-scroll {
white-space: nowrap;
height: 180rpx; /* 恢复原大小 */
}
.leixing-list {
display: inline-flex;
padding-right: 32rpx;
}
.leixing-item {
display: inline-flex;
flex-direction: column;
align-items: center;
margin-right: 48rpx; /* 增加间距 */
position: relative;
padding: 12rpx;
}
.leixing-image-box {
width: 100rpx; /* 恢复原大小 */ /* 恢复原大小 */
height: 100rpx; /* 恢复原大小 */ /* 恢复原大小 */
border-radius: 50%;
position: relative;
margin-bottom: 16rpx;
overflow: hidden;
background: white;
box-shadow:
0 12rpx 30rpx rgba(0, 0, 0, 0.12),
0 4rpx 8rpx rgba(0, 0, 0, 0.06);
transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.leixing-active .leixing-image-box {
transform: scale(1.12);
box-shadow:
0 18rpx 40rpx rgba(255, 204, 0, 0.3),
0 8rpx 16rpx rgba(255, 170, 0, 0.2);
}
.leixing-image {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
}
.leixing-glow {
position: absolute;
top: -3rpx;
left: -3rpx;
right: -3rpx;
bottom: -3rpx;
border-radius: 50%;
background: linear-gradient(135deg, #ffcc00, #ffaa00, #ff8800);
opacity: 0;
transition: opacity 0.4s;
z-index: -1;
filter: blur(10rpx);
}
.leixing-glow-active {
opacity: 0.6;
animation: glowPulse 2s infinite;
}
.leixing-sparkle {
position: absolute;
top: 50%;
left: 50%;
width: 20rpx;
height: 20rpx;
background: white;
border-radius: 50%;
transform: translate(-50%, -50%) scale(0);
opacity: 0;
pointer-events: none;
}
.sparkle-animation {
animation: sparkleFlash 1.5s infinite;
}
.leixing-text {
font-size: 24rpx;
color: #555;
font-weight: 500;
transition: all 0.3s;
white-space: nowrap;
}
.leixing-active .leixing-text {
color: #ff9900;
font-weight: 600;
transform: translateY(-2rpx);
text-shadow: 0 2rpx 4rpx rgba(255, 153, 0, 0.2);
}
.leixing-active-bar {
position: absolute;
bottom: -4rpx;
width: 44rpx;
height: 4rpx;
background: linear-gradient(90deg, #ffcc00, #ffaa00);
border-radius: 2rpx;
opacity: 0;
transform: scaleX(0);
transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
box-shadow: 0 2rpx 8rpx rgba(255, 170, 0, 0.4);
}
.leixing-active-bar-show {
opacity: 1;
transform: scaleX(1);
}
.leixing-border-effect {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 50%;
border: 2rpx solid transparent;
opacity: 0;
pointer-events: none;
}
.border-effect-active {
opacity: 1;
border-color: rgba(255, 204, 0, 0.5);
animation: borderGlow 2s infinite;
}
/* 3. 左右分栏布局(可滚动区域) */
.main-container {
flex: 1;
display: flex;
height: calc(100vh - 300rpx);
overflow: hidden;
}
/* 左边:商品专区列表 */
.zhuanqu-left {
width: 200rpx;
background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(10rpx);
border-right: 1rpx solid rgba(0, 0, 0, 0.08);
flex-shrink: 0;
position: relative;
}
.zhuanqu-list {
padding: 0;
}
.zhuanqu-item {
position: relative;
padding: 32rpx 0;
border-bottom: 1rpx solid rgba(0, 0, 0, 0.05);
transition: all 0.3s;
}
.zhuanqu-item:active {
background: rgba(255, 204, 0, 0.05);
}
.zhuanqu-item-content {
display: flex;
flex-direction: column;
align-items: center;
padding: 0 20rpx;
}
.zhuanqu-name {
font-size: 26rpx;
color: #444;
text-align: center;
line-height: 1.4;
margin-bottom: 8rpx;
transition: all 0.3s;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
font-weight: 500;
}
.zhuanqu-active .zhuanqu-name {
color: #ff9900;
font-weight: 600;
text-shadow: 0 2rpx 4rpx rgba(255, 153, 0, 0.2);
}
.zhuanqu-count {
font-size: 22rpx;
color: #888;
transition: all 0.3s;
}
.zhuanqu-active .zhuanqu-count {
color: #ffaa00;
font-weight: 500;
}
.zhuanqu-active-indicator {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
width: 6rpx;
height: 44rpx;
background: linear-gradient(180deg, #ffcc00, #ffaa00);
border-radius: 3rpx 0 0 3rpx;
opacity: 0;
transition: all 0.3s;
overflow: hidden;
}
.zhuanqu-indicator-glow {
opacity: 1;
animation: indicatorGlow 2s infinite;
box-shadow: 0 0 20rpx rgba(255, 204, 0, 0.5);
}
.indicator-sparkle {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 10rpx;
background: rgba(255, 255, 255, 0.6);
animation: sparkleMove 1.5s infinite;
}
.zhuanqu-hover-glow {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg, transparent, rgba(255, 204, 0, 0.05), transparent);
opacity: 0;
transition: opacity 0.3s;
pointer-events: none;
}
.zhuanqu-item:active .zhuanqu-hover-glow {
opacity: 1;
}
.zhuanqu-click-effect {
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
border-radius: 50%;
background: rgba(255, 204, 0, 0.1);
transform: translate(-50%, -50%);
opacity: 0;
pointer-events: none;
}
.zhuanqu-item:active .zhuanqu-click-effect {
animation: rippleEffect 0.6s ease-out;
}
.zhuanqu-empty {
display: flex;
flex-direction: column;
align-items: center;
padding: 120rpx 0;
}
.zhuanqu-empty-icon {
width: 120rpx;
height: 120rpx;
opacity: 0.2;
margin-bottom: 28rpx;
}
.zhuanqu-empty-text {
font-size: 26rpx;
color: #999;
}
/* 右边:商品列表(紧凑布局) */
.shangpin-right {
flex: 1;
background: #fafafa;
}
.shangpin-list {
padding: 0;
}
.shangpin-item {
background: white;
padding: 28rpx 30rpx 22rpx;
position: relative;
display: flex;
align-items: flex-start;
min-height: 140rpx;
overflow: hidden;
}
.shangpin-item:active {
background: rgba(0, 0, 0, 0.02);
}
.shangpin-image-box {
margin-right: 24rpx;
flex-shrink: 0;
position: relative;
}
.shangpin-image {
width: 120rpx;
height: 120rpx;
border-radius: 14rpx;
background: #f5f5f5;
object-fit: cover;
}
.shangpin-image-glow {
position: absolute;
top: -4rpx;
left: -4rpx;
right: -4rpx;
bottom: -4rpx;
border-radius: 18rpx;
background: linear-gradient(135deg, rgba(255, 204, 0, 0.2), transparent);
opacity: 0;
transition: opacity 0.3s;
pointer-events: none;
}
.shangpin-item:active .shangpin-image-glow {
opacity: 0.5;
}
.image-corner {
position: absolute;
top: 0;
right: 0;
width: 20rpx;
height: 20rpx;
background: linear-gradient(135deg, #ffcc00, transparent 70%);
border-radius: 0 14rpx 0 0;
}
.shangpin-info {
flex: 1;
display: flex;
flex-direction: column;
height: 120rpx;
justify-content: space-between;
padding-top: 2rpx; /* 标题与图片顶部对齐 */
}
.shangpin-title {
margin-bottom: 0;
position: relative;
}
.shangpin-title-text {
font-size: 30rpx;
font-weight: 500;
color: #222; /* 黑色加深 */
line-height: 1.4;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
overflow: hidden;
}
.title-underline {
position: absolute;
bottom: -4rpx;
left: 0;
width: 0;
height: 2rpx;
background: linear-gradient(90deg, #ffcc00, #ffaa00);
transition: width 0.3s;
}
.shangpin-item:active .title-underline {
width: 40rpx;
}
.shangpin-footer {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: auto;
}
.shangpin-price {
display: flex;
align-items: baseline;
position: relative;
}
.price-icon {
font-size: 24rpx;
color: #ff6600;
font-weight: 500;
}
.price-integer {
font-size: 36rpx; /* 适当调整大小 */
color: #ff6600;
font-weight: 600;
margin-left: 2rpx;
}
.price-decimal {
font-size: 24rpx;
color: #ff6600;
font-weight: 500;
}
.price-glow {
position: absolute;
top: 50%;
left: 50%;
width: 80rpx;
height: 80rpx;
background: radial-gradient(circle, rgba(255, 102, 0, 0.1) 0%, transparent 70%);
transform: translate(-50%, -50%);
opacity: 0;
pointer-events: none;
}
.shangpin-item:active .price-glow {
animation: priceGlow 0.6s;
}
.detail-btn {
position: relative;
padding: 12rpx 28rpx;
background: linear-gradient(135deg, #ffcc00, #ffaa00);
border-radius: 40rpx;
transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
overflow: hidden;
box-shadow: 0 6rpx 20rpx rgba(255, 170, 0, 0.2);
display: flex;
align-items: center;
justify-content: center;
min-width: 120rpx;
}
.detail-btn:active {
transform: scale(0.95);
box-shadow: 0 4rpx 15rpx rgba(255, 170, 0, 0.4);
}
.detail-btn-text {
font-size: 24rpx;
color: white;
font-weight: 500;
position: relative;
z-index: 2;
line-height: 1;
}
.btn-glow-effect {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
transform: translateX(-100%);
transition: transform 0.6s;
}
.detail-btn:active .btn-glow-effect {
transform: translateX(100%);
}
.btn-halo {
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
border-radius: 50%;
background: rgba(255, 255, 255, 0.3);
transform: translate(-50%, -50%);
opacity: 0;
pointer-events: none;
}
.detail-btn:active .btn-halo {
animation: buttonHalo 0.6s ease-out;
}
.btn-star {
position: absolute;
width: 6rpx;
height: 6rpx;
background: white;
border-radius: 50%;
opacity: 0;
pointer-events: none;
}
.detail-btn:active .btn-star {
animation: starSparkle 0.8s ease-out;
}
.item-divider {
position: absolute;
left: 30rpx;
right: 30rpx;
bottom: 0;
height: 1rpx;
background: linear-gradient(90deg, rgba(0, 0, 0, 0.08), rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0.08));
}
.item-hover-glow {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, transparent, rgba(255, 204, 0, 0.03), transparent);
opacity: 0;
transition: opacity 0.3s;
pointer-events: none;
}
.shangpin-item:active .item-hover-glow {
opacity: 1;
}
.item-ripple-effect {
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
border-radius: 50%;
background: rgba(255, 204, 0, 0.1);
transform: translate(-50%, -50%);
opacity: 0;
pointer-events: none;
}
.shangpin-item:active .item-ripple-effect {
animation: rippleEffect 0.6s ease-out;
}
.shangpin-empty {
display: flex;
flex-direction: column;
align-items: center;
padding: 150rpx 0;
}
.shangpin-empty-icon {
width: 180rpx;
height: 180rpx;
opacity: 0.15;
margin-bottom: 36rpx;
}
.shangpin-empty-text {
font-size: 28rpx;
color: #999;
margin-bottom: 40rpx;
}
.shangpin-empty-btn {
background: linear-gradient(135deg, #ffcc00, #ffaa00);
color: white;
font-size: 26rpx;
font-weight: 500;
padding: 16rpx 44rpx;
border-radius: 40rpx;
box-shadow: 0 8rpx 24rpx rgba(255, 170, 0, 0.3);
transition: all 0.3s;
}
.shangpin-empty-btn:active {
transform: scale(0.95);
box-shadow: 0 4rpx 16rpx rgba(255, 170, 0, 0.4);
}
.load-more-line {
width: 60rpx;
height: 1rpx;
background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.1), transparent);
}
.load-more-text {
font-size: 24rpx;
color: #bbb;
margin: 0 20rpx;
}
/* 搜索结果弹窗 */
.search-results-container {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 2000;
display: flex;
}
.search-mask {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(5rpx);
}
.search-results-content {
position: absolute;
top: 100rpx;
left: 32rpx;
right: 32rpx;
bottom: 100rpx;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(30rpx);
border-radius: 24rpx;
box-shadow:
0 20rpx 60rpx rgba(0, 0, 0, 0.2),
inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
border: 1rpx solid rgba(255, 255, 255, 0.3);
display: flex;
flex-direction: column;
overflow: hidden;
}
.search-results-header {
padding: 32rpx;
border-bottom: 1rpx solid rgba(0, 0, 0, 0.06);
display: flex;
align-items: center;
justify-content: space-between;
flex-shrink: 0;
}
.search-header-left {
display: flex;
align-items: baseline;
}
.search-results-title {
font-size: 34rpx;
font-weight: 600;
color: #333;
}
.search-results-count {
font-size: 24rpx;
color: #999;
margin-left: 12rpx;
}
.search-close {
width: 44rpx;
height: 44rpx;
border-radius: 50%;
background: rgba(0, 0, 0, 0.05);
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s;
}
.search-close:active {
background: rgba(0, 0, 0, 0.1);
transform: scale(0.9);
}
.close-icon {
width: 20rpx;
height: 20rpx;
opacity: 0.6;
}
.search-results-list {
flex: 1;
height: 100%;
}
.search-result-item {
display: flex;
padding: 28rpx 32rpx;
border-bottom: 1rpx solid rgba(0, 0, 0, 0.04);
position: relative;
transition: all 0.3s;
}
.search-result-item:active {
background: rgba(0, 0, 0, 0.02);
transform: translateY(-2rpx);
}
.search-result-left {
margin-right: 24rpx;
position: relative;
}
.search-result-image {
width: 120rpx;
height: 120rpx;
border-radius: 16rpx;
background: #f5f5f5;
object-fit: cover;
}
.search-image-glow {
position: absolute;
top: -4rpx;
left: -4rpx;
right: -4rpx;
bottom: -4rpx;
border-radius: 20rpx;
background: linear-gradient(135deg, rgba(255, 204, 0, 0.2), transparent);
opacity: 0;
transition: opacity 0.3s;
pointer-events: none;
}
.search-result-item:active .search-image-glow {
opacity: 0.5;
}
.search-result-right {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
}
.search-result-title {
font-size: 28rpx;
font-weight: 500;
color: #333;
line-height: 1.4;
margin-bottom: 16rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.search-result-info {
display: flex;
gap: 12rpx;
margin-bottom: 20rpx;
}
.info-tag {
padding: 6rpx 12rpx;
background: rgba(255, 204, 0, 0.1);
border-radius: 6rpx;
}
.search-result-category {
font-size: 22rpx;
color: #666;
}
.search-result-zhuanqu {
font-size: 22rpx;
color: #888;
}
.search-result-price {
display: flex;
align-items: baseline;
}
.search-item-glow {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, transparent, rgba(255, 204, 0, 0.05), transparent);
opacity: 0;
transition: opacity 0.3s;
pointer-events: none;
}
.search-result-item:active .search-item-glow {
opacity: 1;
}
.search-empty {
display: flex;
flex-direction: column;
align-items: center;
padding: 160rpx 0;
}
.search-empty-icon {
width: 160rpx;
height: 160rpx;
opacity: 0.2;
margin-bottom: 36rpx;
}
.search-empty-text {
font-size: 30rpx;
color: #999;
margin-bottom: 16rpx;
}
.search-empty-tip {
font-size: 24rpx;
color: #bbb;
}
.search-loading {
display: flex;
flex-direction: column;
align-items: center;
padding: 160rpx 0;
}
.search-spinner {
width: 60rpx;
height: 60rpx;
position: relative;
margin-bottom: 24rpx;
}
.spinner-circle {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 4rpx solid transparent;
border-top-color: #ffcc00;
border-radius: 50%;
animation: spin 1s linear infinite;
}
.search-loading-text {
font-size: 26rpx;
color: #999;
}
/* 全局加载状态 */
.loading-toast {
backdrop-filter: blur(10rpx);
z-index: 3000;
}
.loading-content {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(20rpx);
padding: 60rpx 80rpx;
border-radius: 24rpx;
display: flex;
flex-direction: column;
align-items: center;
position: relative;
border: 1rpx solid rgba(255, 255, 255, 0.1);
}
.loading-spinner {
width: 80rpx;
height: 80rpx;
position: relative;
margin-bottom: 30rpx;
}
.spinner-ring {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 4rpx solid rgba(255, 255, 255, 0.2);
border-radius: 50%;
}
.spinner-dot {
position: absolute;
top: 0;
left: 50%;
width: 12rpx;
height: 12rpx;
background: #ffcc00;
border-radius: 50%;
transform: translateX(-50%);
animation: spin 1s linear infinite;
}
.loading-text {
font-size: 28rpx;
font-weight: 500;
}
.loading-glow {
position: absolute;
top: 50%;
left: 50%;
width: 200rpx;
height: 200rpx;
background: radial-gradient(circle, rgba(255, 204, 0, 0.2) 0%, transparent 70%);
transform: translate(-50%, -50%);
z-index: -1;
}
/* 动画定义 */
@keyframes glowPulse {
0%, 100% {
opacity: 0.4;
transform: scale(1);
}
50% {
opacity: 0.8;
transform: scale(1.05);
}
}
@keyframes sparkleFlash {
0%, 100% {
opacity: 0;
transform: translate(-50%, -50%) scale(0);
}
50% {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
filter: blur(0);
}
}
@keyframes borderGlow {
0%, 100% {
border-color: rgba(255, 204, 0, 0.3);
}
50% {
border-color: rgba(255, 204, 0, 0.8);
}
}
@keyframes indicatorGlow {
0%, 100% {
box-shadow: 0 0 20rpx rgba(255, 204, 0, 0.3);
}
50% {
box-shadow: 0 0 30rpx rgba(255, 204, 0, 0.8);
}
}
@keyframes sparkleMove {
0% {
transform: translateY(-100%);
opacity: 0;
}
50% {
opacity: 1;
}
100% {
transform: translateY(400%);
opacity: 0;
}
}
@keyframes rippleEffect {
0% {
width: 0;
height: 0;
opacity: 0.5;
}
100% {
width: 200rpx;
height: 200rpx;
opacity: 0;
}
}
@keyframes priceGlow {
0% {
opacity: 0;
transform: translate(-50%, -50%) scale(0.5);
}
50% {
opacity: 0.6;
transform: translate(-50%, -50%) scale(1);
}
100% {
opacity: 0;
transform: translate(-50%, -50%) scale(1.5);
}
}
@keyframes buttonHalo {
0% {
width: 0;
height: 0;
opacity: 0.6;
}
100% {
width: 200rpx;
height: 200rpx;
opacity: 0;
}
}
@keyframes starSparkle {
0% {
opacity: 0;
transform: translate(0, 0) scale(0);
}
20% {
opacity: 1;
transform: translate(-40rpx, -30rpx) scale(1);
}
40% {
opacity: 1;
transform: translate(30rpx, -20rpx) scale(1);
}
60% {
opacity: 1;
transform: translate(-20rpx, 40rpx) scale(1);
}
80% {
opacity: 1;
transform: translate(40rpx, 20rpx) scale(1);
}
100% {
opacity: 0;
transform: translate(0, 0) scale(0);
}
}