pet/styles/common.scss

485 lines
7.9 KiB
SCSS
Raw Permalink 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.

/**
* 公共样式文件
* 定义项目中常用的样式类,提高代码复用性
*/
/* 渐变背景 */
.gradient-bg {
background: linear-gradient(135deg, #FF8A80 0%, #FFB6C1 25%, #FECFEF 50%, #F8BBD9 100%);
}
.gradient-bg-primary {
background: linear-gradient(135deg, #FF8A80, #FFB6C1);
}
/* 卡片样式 */
.card-style {
background: rgba(255, 255, 255, 0.95);
border-radius: 24rpx;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
backdrop-filter: blur(10rpx);
}
/* 按钮渐变 */
.btn-gradient {
background: linear-gradient(135deg, #FF8A80, #FFB6C1);
color: white;
border: none;
}
/* 阴影效果 */
.shadow-light {
box-shadow: 0 4rpx 16rpx rgba(255, 138, 128, 0.2);
}
.shadow-medium {
box-shadow: 0 6rpx 20rpx rgba(255, 138, 128, 0.3);
}
.shadow-heavy {
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
}
/* 圆角 */
.radius-small {
border-radius: 12rpx;
}
.radius-medium {
border-radius: 16rpx;
}
.radius-large {
border-radius: 24rpx;
}
.radius-round {
border-radius: 50%;
}
/* 间距 */
.margin-small {
margin: 16rpx;
}
.margin-medium {
margin: 24rpx;
}
.margin-large {
margin: 32rpx;
}
.padding-small {
padding: 16rpx;
}
.padding-medium {
padding: 24rpx;
}
.padding-large {
padding: 32rpx;
}
/* 文字颜色 */
.text-primary {
color: #FF8A80;
}
.text-secondary {
color: #666;
}
.text-muted {
color: #999;
}
.text-white {
color: white;
}
/* 背景透明度 */
.bg-transparent {
background: transparent;
}
.bg-white-light {
background: rgba(255, 255, 255, 0.1);
}
.bg-white-medium {
background: rgba(255, 255, 255, 0.85);
}
.bg-white-heavy {
background: rgba(255, 255, 255, 0.95);
}
/* 页面容器样式 */
.page-container {
padding-top: calc(20rpx + env(safe-area-inset-top));
min-height: 100vh;
box-sizing: border-box;
}
.page-container-no-safe {
padding-top: 20rpx;
min-height: 100vh;
box-sizing: border-box;
}
/* 页面容器变体 */
.page-container-with-bg {
@extend .page-container;
background: linear-gradient(135deg, #FF8A80 0%, #FFB6C1 25%, #FECFEF 50%, #F8BBD9 100%);
}
/* 统一布局架构 - 页面容器 */
.page-container-unified {
@extend .page-container-with-bg;
padding: 20rpx 30rpx 0 30rpx; /* 上边距20rpx左右边距30rpx下边距0 */
/* 响应式设计 - 小屏幕使用较小边距 */
@media (max-width: 375px) {
padding: 20rpx 20rpx 0 20rpx;
}
}
/* 通用背景渐变 */
.gradient-bg {
background: linear-gradient(135deg, #FF8A80 0%, #FFB6C1 25%, #FECFEF 50%, #F8BBD9 100%);
}
.gradient-bg-primary {
background: linear-gradient(135deg, #FF8A80, #FFB6C1);
}
.gradient-bg-success {
background: linear-gradient(135deg, #64B5F6, #81C784);
}
.gradient-bg-warning {
background: linear-gradient(135deg, #FFB74D, #FF8A65);
}
/* 通用卡片样式 */
.card {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(20rpx);
border-radius: 24rpx;
padding: 24rpx;
box-shadow: 0 8rpx 32rpx rgba(255, 138, 128, 0.2);
border: 1rpx solid rgba(255, 255, 255, 0.3);
}
.card-small {
@extend .card;
padding: 16rpx;
border-radius: 16rpx;
box-shadow: 0 4rpx 16rpx rgba(255, 138, 128, 0.1);
}
.card-large {
@extend .card;
padding: 32rpx;
border-radius: 28rpx;
}
/* 统一布局架构 - 卡片样式 */
.card-unified {
@extend .card;
margin: 0 0 24rpx 0; /* 仅保留下边距用于卡片间隔 */
/* 响应式设计 - 小屏幕调整间距 */
@media (max-width: 375px) {
margin: 0 0 20rpx 0;
padding: 20rpx;
}
}
/* 通用按钮样式 */
.btn {
padding: 16rpx 32rpx;
border-radius: 24rpx;
border: none;
font-size: 28rpx;
font-weight: 600;
text-align: center;
transition: all 0.3s ease;
cursor: pointer;
}
.btn-primary {
@extend .btn;
background: linear-gradient(135deg, #FF8A80, #FFB6C1);
color: white;
&:active {
transform: scale(0.98);
}
}
.btn-secondary {
@extend .btn;
background: rgba(255, 255, 255, 0.9);
color: #FF8A80;
border: 2rpx solid rgba(255, 138, 128, 0.3);
&:active {
background: rgba(255, 255, 255, 0.7);
}
}
.btn-small {
padding: 12rpx 24rpx;
font-size: 24rpx;
border-radius: 20rpx;
}
.btn-large {
padding: 20rpx 40rpx;
font-size: 32rpx;
border-radius: 28rpx;
}
/* 通用输入框样式 */
.input-container {
position: relative;
margin-bottom: 24rpx;
}
.input-field {
width: 100%;
padding: 20rpx 24rpx;
border: 2rpx solid rgba(255, 138, 128, 0.2);
border-radius: 16rpx;
background: rgba(255, 255, 255, 0.9);
font-size: 28rpx;
color: #333;
&:focus {
border-color: #FF8A80;
background: rgba(255, 255, 255, 1);
}
&::placeholder {
color: #999;
}
}
.input-label {
font-size: 28rpx;
color: #333;
margin-bottom: 12rpx;
font-weight: 600;
}
/* 通用列表样式 */
.list-item {
background: rgba(255, 255, 255, 0.9);
border-radius: 16rpx;
padding: 24rpx;
margin-bottom: 16rpx;
box-shadow: 0 4rpx 16rpx rgba(255, 138, 128, 0.1);
transition: all 0.3s ease;
&:active {
transform: scale(0.98);
background: rgba(255, 255, 255, 0.8);
}
}
.list-item-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12rpx;
}
.list-item-title {
font-size: 32rpx;
font-weight: 600;
color: #333;
}
.list-item-subtitle {
font-size: 24rpx;
color: #666;
margin-top: 8rpx;
}
.list-item-content {
font-size: 28rpx;
color: #555;
line-height: 1.5;
}
/* 通用标签样式 */
.tag {
display: inline-block;
padding: 8rpx 16rpx;
border-radius: 20rpx;
font-size: 22rpx;
font-weight: 500;
margin-right: 12rpx;
margin-bottom: 8rpx;
}
.tag-primary {
@extend .tag;
background: rgba(255, 138, 128, 0.1);
color: #FF8A80;
border: 1rpx solid rgba(255, 138, 128, 0.3);
}
.tag-success {
@extend .tag;
background: rgba(76, 175, 80, 0.1);
color: #4CAF50;
border: 1rpx solid rgba(76, 175, 80, 0.3);
}
.tag-warning {
@extend .tag;
background: rgba(255, 183, 77, 0.1);
color: #FFB74D;
border: 1rpx solid rgba(255, 183, 77, 0.3);
}
.tag-info {
@extend .tag;
background: rgba(33, 150, 243, 0.1);
color: #2196F3;
border: 1rpx solid rgba(33, 150, 243, 0.3);
}
/* 通用头像样式 */
.avatar {
border-radius: 50%;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #FF8A80, #FFB6C1);
color: white;
font-weight: 600;
}
.avatar-small {
@extend .avatar;
width: 48rpx;
height: 48rpx;
font-size: 20rpx;
}
.avatar-medium {
@extend .avatar;
width: 80rpx;
height: 80rpx;
font-size: 32rpx;
}
.avatar-large {
@extend .avatar;
width: 120rpx;
height: 120rpx;
font-size: 48rpx;
}
/* 通用图标样式 */
.icon {
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: 50%;
}
.icon-small {
@extend .icon;
width: 32rpx;
height: 32rpx;
font-size: 16rpx;
}
.icon-medium {
@extend .icon;
width: 48rpx;
height: 48rpx;
font-size: 24rpx;
}
.icon-large {
@extend .icon;
width: 64rpx;
height: 64rpx;
font-size: 32rpx;
}
/* 通用分割线 */
.divider {
height: 1rpx;
background: rgba(255, 138, 128, 0.1);
margin: 24rpx 0;
}
.divider-thick {
height: 2rpx;
background: rgba(255, 138, 128, 0.2);
margin: 32rpx 0;
}
/* 通用状态样式 */
.status-dot {
width: 12rpx;
height: 12rpx;
border-radius: 50%;
display: inline-block;
margin-right: 8rpx;
}
.status-success {
background: #4CAF50;
}
.status-warning {
background: #FFB74D;
}
.status-error {
background: #F44336;
}
.status-info {
background: #2196F3;
}
/* 通用加载和空状态 */
.loading-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 80rpx 40rpx;
color: #999;
}
.loading-text {
font-size: 28rpx;
margin-top: 16rpx;
}
.empty-container {
@extend .loading-container;
.empty-icon {
font-size: 80rpx;
color: #ddd;
margin-bottom: 16rpx;
}
.empty-text {
font-size: 28rpx;
color: #999;
}
}