Files
wechat_wc/src/pages/shop/detail/index.scss
T

342 lines
6.0 KiB
SCSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ============================================================
Shop Detail Page — 商品详情页
结构:沉浸式详情页(固定Hero + ScrollView内容 + CTA
============================================================ */
.shop-detail-page {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--bg-page);
}
/* --- Fixed Hero Area --- */
.shop-hero-fixed {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 65vh;
z-index: 0;
overflow: hidden;
}
.shop-hero-clip {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
will-change: height, transform;
}
.shop-hero-img {
width: 100%;
height: 100%;
object-fit: cover;
will-change: top;
}
/* Bottom gradient mask: pseudo-mask approach (better x-compatibility) */
.shop-hero-overlay {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 55%;
pointer-events: none;
}
/* Hero info (title, price) anchored at bottom */
.shop-hero-info {
position: absolute;
bottom: 0;
left: 0;
right: 0;
z-index: 2;
padding: 96rpx 40rpx calc(24rpx + env(safe-area-inset-bottom));
display: flex;
flex-direction: column;
gap: 8rpx;
}
.shop-hero-title {
font-size: 44rpx;
font-weight: 700;
line-height: 1.3;
color: var(--text-primary);
}
.shop-hero-subtitle {
font-size: 24rpx;
color: var(--text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.shop-hero-price-row {
display: flex;
align-items: baseline;
gap: 16rpx;
margin-top: 6rpx;
}
.shop-hero-price {
font-size: 44rpx;
font-weight: 700;
color: var(--accent-primary);
}
.shop-hero-original {
font-size: 26rpx;
color: var(--text-muted);
text-decoration: line-through;
}
/* --- ScrollView Content Layer --- */
.shop-scroll {
position: relative;
z-index: 3;
}
.shop-content {
min-height: 100vh;
will-change: transform;
}
/* --- Transition Band (sticky-like top info) --- */
.shop-band {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 4;
padding: 24rpx 40rpx 24rpx;
display: flex;
flex-direction: column;
gap: 10rpx;
transition: opacity 0.15s ease;
will-change: opacity;
}
.shop-band-title {
font-size: 40rpx;
font-weight: 700;
line-height: 1.3;
color: var(--text-primary);
}
.shop-band-subtitle {
font-size: 24rpx;
color: var(--text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.shop-band-price-row {
display: flex;
align-items: baseline;
gap: 16rpx;
margin-top: 6rpx;
}
.shop-band-price {
font-size: 40rpx;
font-weight: 700;
color: var(--accent-primary);
}
.shop-band-original {
font-size: 26rpx;
color: var(--text-muted);
text-decoration: line-through;
}
/* --- Detail Body --- */
.shop-detail-body {
padding: 0 32rpx calc(48rpx + env(safe-area-inset-bottom));
will-change: opacity, transform;
box-sizing: border-box;
}
.shop-content-card {
padding: 32rpx;
background: var(--bg-card);
border: 1rpx solid var(--border);
border-radius: 32rpx;
box-shadow: var(--shadow-card);
box-sizing: border-box;
}
.shop-section {
margin-bottom: 32rpx;
}
.shop-section:last-child {
margin-bottom: 0;
}
.shop-section-title {
font-size: 34rpx;
font-weight: 700;
color: var(--text-primary);
margin: 0 0 20rpx;
display: block;
position: relative;
padding-left: 20rpx;
letter-spacing: 0;
}
.shop-section-title::before {
content: '';
position: absolute;
left: 0;
top: 8rpx;
bottom: 8rpx;
width: 6rpx;
border-radius: 999rpx;
background: var(--accent-primary);
}
.shop-section-text {
font-size: 28rpx;
color: var(--text-secondary);
line-height: 1.8;
display: block;
}
.shop-divider {
height: 1rpx;
background: var(--border);
margin: 32rpx 0;
}
/* --- Tags --- */
.shop-tag-row {
display: flex;
flex-wrap: wrap;
gap: 16rpx;
margin: 20rpx 0;
}
.shop-tag {
height: 56rpx;
padding: 0 28rpx;
border-radius: 999rpx;
font-size: 22rpx;
font-weight: 600;
background: var(--accent-primary-soft);
border: 1rpx solid var(--accent-primary);
display: inline-flex;
align-items: center;
justify-content: center;
}
.shop-tag-text {
color: var(--accent-primary);
}
/* --- Spec Table --- */
.shop-spec-table {
width: 100%;
border: 1rpx solid var(--border);
border-radius: 20rpx;
overflow: hidden;
background: var(--bg-muted);
}
.shop-spec-row {
display: flex;
padding: 24rpx 28rpx;
border-bottom: 1rpx solid var(--border);
}
.shop-spec-row:last-child {
border-bottom: none;
}
.shop-spec-key {
width: 35%;
color: var(--text-muted);
font-weight: 500;
font-size: 24rpx;
}
.shop-spec-val {
flex: 1;
color: var(--text-primary);
font-size: 26rpx;
font-weight: 500;
word-break: break-all;
}
.shop-bottom-spacer {
height: 200rpx;
}
/* --- Back Button --- */
.shop-back-btn {
position: fixed;
top: calc(env(safe-area-inset-top, 20px) + 20rpx);
left: 24rpx;
z-index: 50;
width: 88rpx;
height: 88rpx;
border-radius: 50%;
background: rgba(40, 35, 32, 0.5);
backdrop-filter: blur(16px) saturate(1.4);
-webkit-backdrop-filter: blur(16px) saturate(1.4);
border: 1rpx solid var(--glass-line);
box-shadow: var(--shadow-elevated);
display: flex;
align-items: center;
justify-content: center;
transition: opacity 0.2s ease, transform 0.15s ease;
}
.shop-back-btn:active {
transform: scale(0.92);
}
.shop-back-arrow {
font-size: 36rpx;
color: var(--text-primary);
line-height: 1;
}
/* --- Bottom Action Bar — 毛玻璃由 BottomActionBar 提供,本地只补充价格摘要 --- */
.bottom-action-bar .price-summary {
flex-shrink: 0;
}
.bottom-action-bar .btn-primary,
.bottom-action-bar .btn-secondary {
flex: 1;
text-align: center;
padding: 28rpx 0;
font-size: 28rpx;
font-weight: 600;
line-height: 1.2;
}
.summary-label {
font-size: 22rpx;
color: var(--text-secondary);
display: block;
}
.summary-price {
font-size: 40rpx;
font-weight: 700;
color: var(--accent-primary);
}
.summary-original {
font-size: 24rpx;
color: var(--text-muted);
text-decoration: line-through;
}