/* 基础样式 */ body { font-family: 'Microsoft YaHei', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f8f9fa; color: #333; line-height: 1.6; margin: 0; padding: 0; } .container { max-width: 1400px; padding: 20px; margin: 0 auto; } /* 导航栏样式 */ .navbar { background-color: #343a40 !important; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .navbar-brand { font-weight: bold; font-size: 1.5rem; color: #fff !important; } /* 卡片样式 */ .card { background-color: #fff; border: 1px solid #dee2e6; border-radius: 8px; margin-bottom: 20px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .card-header { background-color: #343a40; color: #fff; border-bottom: 1px solid #dee2e6; padding: 15px 20px; border-radius: 8px 8px 0 0; } .card-body { padding: 20px; } .card-title { margin: 0; font-size: 1.1rem; font-weight: 600; } /* 按钮样式 */ .btn { border-radius: 4px; font-weight: 500; padding: 8px 16px; border: 1px solid transparent; transition: all 0.2s ease; } .btn-primary { background-color: #007bff; border-color: #007bff; color: #fff; } .btn-primary:hover { background-color: #0056b3; border-color: #0056b3; color: #fff; } .btn-success { background-color: #28a745; border-color: #28a745; color: #fff; } .btn-success:hover { background-color: #1e7e34; border-color: #1e7e34; color: #fff; } .btn-danger { background-color: #dc3545; border-color: #dc3545; color: #fff; } .btn-danger:hover { background-color: #c82333; border-color: #bd2130; color: #fff; } .btn-outline-danger { color: #dc3545; border-color: #dc3545; background-color: transparent; } .btn-outline-danger:hover { background-color: #dc3545; border-color: #dc3545; color: #fff; } .btn-sm { padding: 4px 8px; font-size: 0.875rem; } /* 上传区域样式 */ .upload-area { border: 2px dashed #dee2e6; border-radius: 8px; padding: 40px 20px; text-align: center; cursor: pointer; background-color: #f8f9fa; transition: border-color 0.2s ease; } .upload-area:hover { border-color: #007bff; background-color: #e9ecef; } .upload-icon { font-size: 2.5rem; color: #6c757d; margin-bottom: 10px; } .upload-area:hover .upload-icon { color: #007bff; } /* 表格样式 */ .table { margin-bottom: 0; background-color: #fff; } .table th { background-color: #343a40; color: #fff; border-color: #454d55; font-weight: 600; padding: 12px; } .table td { padding: 12px; vertical-align: middle; border-color: #dee2e6; } .table-striped tbody tr:nth-of-type(odd) { background-color: #f8f9fa; } .table-hover tbody tr:hover { background-color: #e9ecef; } .table-bordered { border: 1px solid #dee2e6; } .table-responsive { border-radius: 8px; overflow: hidden; } /* 列表组样式 */ .list-group-item { background-color: #fff; border: 1px solid #dee2e6; padding: 12px 16px; margin-bottom: 2px; } .list-group-item:first-child { border-top-left-radius: 4px; border-top-right-radius: 4px; } .list-group-item:last-child { border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; margin-bottom: 0; } .list-group-item:hover { background-color: #f8f9fa; } /* 表单控件样式 */ .form-control, .form-select { border: 1px solid #ced4da; border-radius: 4px; padding: 8px 12px; background-color: #fff; transition: border-color 0.2s ease; } .form-control:focus, .form-select:focus { border-color: #007bff; box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); outline: 0; } .form-label { font-weight: 500; margin-bottom: 8px; color: #495057; } /* 滑块样式 */ .form-range { height: 6px; background-color: #dee2e6; border-radius: 3px; outline: none; } .form-range::-webkit-slider-thumb { appearance: none; width: 20px; height: 20px; border-radius: 50%; background-color: #007bff; cursor: pointer; border: 2px solid #fff; box-shadow: 0 2px 4px rgba(0,0,0,0.2); } .form-range::-moz-range-thumb { width: 20px; height: 20px; border-radius: 50%; background-color: #007bff; cursor: pointer; border: 2px solid #fff; box-shadow: 0 2px 4px rgba(0,0,0,0.2); } /* 进度条样式 */ .progress { height: 20px; background-color: #e9ecef; border-radius: 4px; overflow: hidden; } .progress-bar { background-color: #28a745; transition: width 0.3s ease; } .progress-bar-striped { background-image: linear-gradient(45deg, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; } .progress-bar-animated { animation: progress-bar-stripes 1s linear infinite; } @keyframes progress-bar-stripes { 0% { background-position: 1rem 0; } 100% { background-position: 0 0; } } /* 警告框样式 */ .alert { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; } .alert-info { color: #0c5460; background-color: #d1ecf1; border-color: #bee5eb; } .alert-success { color: #155724; background-color: #d4edda; border-color: #c3e6cb; } .alert-danger { color: #721c24; background-color: #f8d7da; border-color: #f5c6cb; } .alert-warning { color: #856404; background-color: #fff3cd; border-color: #ffeaa7; } /* 工具类 */ .text-center { text-align: center; } .text-muted { color: #6c757d; } .mb-0 { margin-bottom: 0; } .mb-1 { margin-bottom: 0.25rem; } .mb-2 { margin-bottom: 0.5rem; } .mb-3 { margin-bottom: 1rem; } .mb-4 { margin-bottom: 1.5rem; } .mt-2 { margin-top: 0.5rem; } .mt-3 { margin-top: 1rem; } .me-2 { margin-right: 0.5rem; } .w-100 { width: 100%; } .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; } .d-flex { display: flex; } .d-inline { display: inline; } .d-none { display: none; } .justify-content-between { justify-content: space-between; } .justify-content-center { justify-content: center; } .align-items-center { align-items: center; } .gap-2 { gap: 0.5rem; } .small { font-size: 0.875rem; } /* 响应式设计 */ @media (max-width: 768px) { .container { padding: 10px; } .card-body { padding: 15px; } .upload-area { padding: 30px 15px; } .upload-icon { font-size: 2rem; } .btn { padding: 6px 12px; font-size: 0.9rem; } .table-responsive { font-size: 0.875rem; } }