WebRtc_QingGan/src/styles.css
Song367 537006ae5f
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 1m22s
优化UI
2025-07-31 11:43:51 +08:00

532 lines
9.2 KiB
CSS
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.

* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
color: #333;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
header {
text-align: center;
margin-bottom: 30px;
color: white;
}
header h1 {
font-size: 2.5rem;
margin-bottom: 10px;
text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}
header p {
font-size: 1.1rem;
opacity: 0.9;
}
.main-content {
background: white;
border-radius: 15px;
padding: 30px;
box-shadow: 0 10px 30px rgba(0,0,0,0.2);
}
/* 视频区域 */
.video-section {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 30px;
}
.video-container {
position: relative;
background: #000;
border-radius: 10px;
overflow: hidden;
aspect-ratio: 16/9;
}
.video-container video {
width: 100%;
height: 100%;
object-fit: cover;
}
.video-label {
position: absolute;
bottom: 10px;
left: 10px;
background: rgba(0,0,0,0.7);
color: white;
padding: 5px 10px;
border-radius: 5px;
font-size: 0.9rem;
}
/* 音频状态显示 */
.audio-status {
text-align: center;
margin-bottom: 30px;
padding: 20px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 10px;
color: white;
}
.status-indicator {
font-size: 1.2rem;
font-weight: bold;
}
.status-indicator.connected {
color: #90EE90;
}
.status-indicator.disconnected {
color: #FFB6C1;
}
/* 录制视频区域 */
.recorded-video-section {
margin-bottom: 30px;
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
/* 确保视频区域固定高度并居中 */
min-height: 100vh;
max-height: 100vh;
width: 100%;
}
.recorded-video-section h3 {
margin-bottom: 15px;
color: #333;
}
#recordedVideo {
max-width: 100%;
max-height: 100%;
width: 100%;
height: 100%;
border-radius: 0;
box-shadow: none;
object-fit: cover; /* 覆盖整个容器 */
background: transparent; /* 透明背景 */
transition: opacity 0.15s; /* 添加透明度过渡效果 */
margin: 0 auto; /* 左右居中 */
display: block; /* 确保块级显示 */
/* 确保视频始终居中 */
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
/* 视频加载时的样式 */
#recordedVideo.loading {
opacity: 0.8;
}
/* 视频播放时的样式 */
#recordedVideo.playing {
opacity: 1;
}
/* 隐藏视频播放条 */
#recordedVideo::-webkit-media-controls {
display: none !important;
}
#recordedVideo::-webkit-media-controls-panel {
display: none !important;
}
#recordedVideo::-webkit-media-controls-play-button {
display: none !important;
}
#recordedVideo::-webkit-media-controls-timeline {
display: none !important;
}
#recordedVideo::-webkit-media-controls-current-time-display {
display: none !important;
}
#recordedVideo::-webkit-media-controls-time-remaining-display {
display: none !important;
}
#recordedVideo::-webkit-media-controls-mute-button {
display: none !important;
}
#recordedVideo::-webkit-media-controls-volume-slider {
display: none !important;
}
#recordedVideo::-webkit-media-controls-fullscreen-button {
display: none !important;
}
/* Firefox 隐藏播放条 */
#recordedVideo::-moz-media-controls {
display: none !important;
}
/* 通用隐藏播放条 */
#recordedVideo {
pointer-events: none; /* 禁用鼠标事件,防止用户点击播放条 */
}
.video-info {
margin-top: 10px;
font-weight: bold;
color: #666;
}
/* 控制按钮 */
.controls {
display: flex;
gap: 15px;
justify-content: center;
margin-bottom: 30px;
flex-wrap: wrap;
}
.btn {
padding: 12px 24px;
border: none;
border-radius: 8px;
font-size: 1rem;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.btn-primary {
background: #007bff;
color: white;
}
.btn-primary:hover:not(:disabled) {
background: #0056b3;
transform: translateY(-2px);
}
.btn-danger {
background: #dc3545;
color: white;
}
.btn-danger:hover:not(:disabled) {
background: #c82333;
transform: translateY(-2px);
}
.btn-secondary {
background: #6c757d;
color: white;
}
.btn-secondary:hover:not(:disabled) {
background: #545b62;
transform: translateY(-2px);
}
.btn-success {
background: #28a745;
color: white;
}
.btn-success:hover:not(:disabled) {
background: #1e7e34;
transform: translateY(-2px);
}
.btn-warning {
background: #ffc107;
color: #212529;
}
.btn-warning:hover:not(:disabled) {
background: #e0a800;
transform: translateY(-2px);
}
.btn-info {
background: #17a2b8;
color: white;
}
.btn-info:hover:not(:disabled) {
background: #138496;
transform: translateY(-2px);
}
/* 输入区域 */
.input-section {
margin-bottom: 30px;
}
.text-input-group {
display: flex;
gap: 10px;
margin-bottom: 20px;
}
#textInput {
flex: 1;
padding: 12px;
border: 2px solid #ddd;
border-radius: 8px;
font-size: 1rem;
transition: border-color 0.3s ease;
}
#textInput:focus {
outline: none;
border-color: #007bff;
}
.voice-input-group {
display: flex;
align-items: center;
gap: 15px;
flex-wrap: wrap;
}
#voiceStatus {
color: #666;
font-style: italic;
}
/* 视频选择 */
.video-selection {
margin-bottom: 30px;
}
.video-selection h3 {
margin-bottom: 15px;
color: #333;
}
.video-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 15px;
}
.video-item {
background: #f8f9fa;
border: 2px solid #e9ecef;
border-radius: 8px;
padding: 15px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
}
.video-item:hover {
border-color: #007bff;
background: #e3f2fd;
transform: translateY(-2px);
}
.video-item.active {
border-color: #007bff;
background: #007bff;
color: white;
}
/* 状态显示 */
.status-section {
border-top: 2px solid #eee;
padding-top: 20px;
}
.status {
padding: 10px;
border-radius: 5px;
margin-bottom: 15px;
font-weight: bold;
}
.status.connected {
background: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.status.disconnected {
background: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.message-log {
max-height: 200px;
overflow-y: auto;
background: #f8f9fa;
border-radius: 8px;
padding: 15px;
font-family: monospace;
font-size: 0.9rem;
border: 1px solid #e9ecef;
}
.message-log div {
margin-bottom: 5px;
padding: 5px;
border-radius: 3px;
}
.message-log .info {
background: #d1ecf1;
color: #0c5460;
}
.message-log .error {
background: #f8d7da;
color: #721c24;
}
.message-log .success {
background: #d4edda;
color: #155724;
}
/* 响应式设计 */
@media (max-width: 768px) {
.video-section {
grid-template-columns: 1fr;
}
.controls {
flex-direction: column;
align-items: center;
}
.text-input-group {
flex-direction: column;
}
.voice-input-group {
flex-direction: column;
align-items: stretch;
}
.video-list {
grid-template-columns: 1fr;
}
/* 移动端视频容器优化 */
.video-container {
height: 100vh;
width: 100vw;
}
#recordedVideo {
width: 100%;
height: 100%;
object-fit: cover;
}
}
/* 桌面端视频容器优化 */
@media (min-width: 769px) {
.video-container {
height: 100vh;
width: 100vw;
}
#recordedVideo {
width: 100%;
height: 100%;
object-fit: cover;
}
}
/* 横屏模式优化 */
@media (orientation: landscape) and (max-height: 500px) {
.video-container {
height: 100vh;
}
.controls {
bottom: 20px;
}
}
/* 竖屏模式优化 */
@media (orientation: portrait) {
.video-container {
height: 100vh;
}
}
/* 动画效果 */
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
.recording {
animation: pulse 1s infinite;
}
/* 视频加载时的样式 */
#recordedVideo.loading {
opacity: 0.5;
}
/* 视频播放时的样式 */
#recordedVideo.playing {
opacity: 1;
}
#recordedVideo {
transition: opacity 0.1s ease-in-out; /* 缩短过渡时间 */
background-color: #1a1a1a; /* 深灰色背景,避免纯黑 */
}
#recordedVideo.loading {
opacity: 0.9; /* 提高loading时的透明度减少黑屏感 */
}
#recordedVideo.playing {
opacity: 1;
}
/* 优化加载指示器 */
.video-container.loading::before {
opacity: 0.8; /* 降低加载指示器的透明度 */
border-top-color: #667eea; /* 使用主题色 */
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}