411 lines
11 KiB
CSS
411 lines
11 KiB
CSS
/**
|
||
* Unified Button System - 统一按钮尺寸系统
|
||
*
|
||
* 职责:全局浮动按钮尺寸标准化
|
||
* 作用域:TOC、Chatbot、沉浸模式等浮动按钮
|
||
* 依赖:variables.css
|
||
*
|
||
* 提取自:unified-button-sizes.css
|
||
*
|
||
* 包含:
|
||
* - 按钮尺寸变量系统
|
||
* - 圆形按钮样式类
|
||
* - 响应式尺寸调整
|
||
* - 无障碍支持
|
||
*/
|
||
|
||
/* ==================== 1. 按钮尺寸变量系统 ==================== */
|
||
|
||
:root {
|
||
/* 桌面端按钮尺寸(适中尺寸,不会太小) */
|
||
--btn-small-size: 40px; /* TOC按钮等 */
|
||
--btn-medium-size: 44px; /* Chatbot等 */
|
||
--btn-large-size: 42px; /* 沉浸式按钮等 */
|
||
|
||
/* 移动端按钮尺寸(适度缩小但保持可用性) */
|
||
--btn-small-mobile: 36px;
|
||
--btn-medium-mobile: 40px;
|
||
--btn-large-mobile: 44px;
|
||
|
||
/* 对应的图标尺寸 */
|
||
--btn-icon-small: 18px;
|
||
--btn-icon-medium: 20px;
|
||
--btn-icon-large: 19px;
|
||
|
||
/* 移动端图标尺寸 */
|
||
--btn-icon-small-mobile: 16px;
|
||
--btn-icon-medium-mobile: 18px;
|
||
--btn-icon-large-mobile: 18px;
|
||
}
|
||
|
||
/* ==================== 2. 基础按钮样式 ==================== */
|
||
|
||
/* Tiny Round Button (小型圆形按钮) - 极简低调风格 */
|
||
.tiny-round-btn {
|
||
border-radius: 50% !important;
|
||
background-color: rgba(255, 255, 255, 0.9) !important;
|
||
backdrop-filter: blur(4px);
|
||
color: #94a3b8 !important; /* slate-400 */
|
||
border: 1px solid #e2e8f0 !important;
|
||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05) !important;
|
||
/* 隐藏沉浸模式的出口 */
|
||
display: flex;
|
||
align-items: center !important;
|
||
justify-content: center !important;
|
||
cursor: pointer !important;
|
||
padding: 0 !important;
|
||
opacity: 0.6; /* 默认低透明度,减少视觉干扰 */
|
||
transition: all 0.2s ease !important;
|
||
|
||
width: var(--btn-small-size) !important;
|
||
height: var(--btn-small-size) !important;
|
||
font-size: var(--btn-icon-small) !important;
|
||
}
|
||
|
||
.tiny-round-btn:hover {
|
||
opacity: 1;
|
||
color: #3b82f6 !important; /* blue-500 */
|
||
border-color: #bfdbfe !important; /* blue-200 */
|
||
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15) !important;
|
||
transform: translateY(-2px);
|
||
}
|
||
|
||
.tiny-round-btn:active {
|
||
transform: translateY(0);
|
||
background-color: #f8fafc !important;
|
||
}
|
||
|
||
/* 移动端适配 */
|
||
@media (max-width: 768px) {
|
||
.tiny-round-btn {
|
||
opacity: 0.8; /* 移动端稍微不那么透明,因为没有 hover */
|
||
}
|
||
}
|
||
|
||
/* Medium Round Button (中型圆形按钮) */
|
||
.medium-round-btn {
|
||
border-radius: 50% !important;
|
||
background-color: var(--color-primary) !important;
|
||
color: white !important;
|
||
display: flex !important;
|
||
align-items: center !important;
|
||
justify-content: center !important;
|
||
box-shadow: 0 2px 8px rgba(59, 130, 246, 0.15) !important;
|
||
border: none !important;
|
||
cursor: pointer !important;
|
||
padding: 0 !important;
|
||
transition: background-color var(--transition-fast),
|
||
transform var(--transition-fast) !important;
|
||
|
||
width: var(--btn-medium-size) !important;
|
||
height: var(--btn-medium-size) !important;
|
||
font-size: var(--btn-icon-medium) !important;
|
||
}
|
||
|
||
.medium-round-btn:hover {
|
||
background-color: #1d4ed8 !important;
|
||
transform: scale(1.08);
|
||
}
|
||
|
||
/* Large Round Button (大型圆形按钮) */
|
||
.big-round-btn,
|
||
.large-round-btn {
|
||
border-radius: 50% !important;
|
||
background-color: var(--color-primary) !important;
|
||
color: white !important;
|
||
display: flex !important;
|
||
align-items: center !important;
|
||
justify-content: center !important;
|
||
box-shadow: 0 2px 8px rgba(59, 130, 246, 0.15) !important;
|
||
border: none !important;
|
||
cursor: pointer !important;
|
||
padding: 0 !important;
|
||
transition: background-color var(--transition-fast),
|
||
transform var(--transition-fast) !important;
|
||
|
||
width: var(--btn-large-size) !important;
|
||
height: var(--btn-large-size) !important;
|
||
font-size: var(--btn-icon-large) !important;
|
||
}
|
||
|
||
.big-round-btn:hover,
|
||
.large-round-btn:hover {
|
||
background-color: #1d4ed8 !important;
|
||
transform: scale(1.08);
|
||
}
|
||
|
||
/* ==================== 3. 图标样式 ==================== */
|
||
|
||
.tiny-round-btn > i,
|
||
.medium-round-btn > i,
|
||
.big-round-btn > i,
|
||
.large-round-btn > i {
|
||
font-size: inherit !important;
|
||
line-height: 1 !important;
|
||
padding: 0 !important;
|
||
}
|
||
|
||
/* ==================== 4. 特定按钮尺寸覆盖 ==================== */
|
||
|
||
/* 沉浸式布局按钮 */
|
||
#toggle-immersive-btn {
|
||
width: var(--btn-large-size) !important;
|
||
height: var(--btn-large-size) !important;
|
||
font-size: var(--btn-icon-large) !important;
|
||
}
|
||
|
||
/* Chatbot FAB */
|
||
#chatbot-fab {
|
||
width: var(--btn-medium-size) !important;
|
||
height: var(--btn-medium-size) !important;
|
||
font-size: var(--btn-icon-medium) !important;
|
||
}
|
||
|
||
/* Chatbot FAB按钮样式 - 极简低调风格(与 floatingHistoryBtn 一致) */
|
||
.chatbot-fab-button {
|
||
width: var(--btn-medium-size) !important;
|
||
height: var(--btn-medium-size) !important;
|
||
border-radius: 50% !important;
|
||
background-color: rgba(255, 255, 255, 0.9) !important;
|
||
backdrop-filter: blur(4px);
|
||
color: #94a3b8 !important; /* slate-400 */
|
||
border: 1px solid #e2e8f0 !important;
|
||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05) !important;
|
||
display: flex !important;
|
||
align-items: center !important;
|
||
justify-content: center !important;
|
||
cursor: pointer !important;
|
||
padding: 0 !important;
|
||
opacity: 0.6; /* 默认低透明度,减少视觉干扰 */
|
||
transition: all 0.2s ease !important;
|
||
outline: none !important;
|
||
}
|
||
|
||
.chatbot-fab-button i {
|
||
font-size: var(--btn-icon-medium) !important;
|
||
line-height: 1 !important;
|
||
}
|
||
|
||
.chatbot-fab-button:hover {
|
||
opacity: 1;
|
||
color: #3b82f6 !important; /* blue-500 */
|
||
border-color: #bfdbfe !important; /* blue-200 */
|
||
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15) !important;
|
||
transform: translateY(-2px);
|
||
}
|
||
|
||
.chatbot-fab-button:active {
|
||
transform: translateY(0);
|
||
background-color: #f8fafc !important;
|
||
}
|
||
|
||
/* ==================== 5. 响应式设计 ==================== */
|
||
|
||
/* 平板设备优化 (768px - 1024px) */
|
||
@media (max-width: 1024px) and (min-width: 769px) {
|
||
.tiny-round-btn {
|
||
width: 38px !important;
|
||
height: 38px !important;
|
||
font-size: 17px !important;
|
||
}
|
||
|
||
.medium-round-btn {
|
||
width: 42px !important;
|
||
height: 42px !important;
|
||
font-size: 19px !important;
|
||
}
|
||
|
||
.big-round-btn,
|
||
.large-round-btn {
|
||
width: 40px !important;
|
||
height: 40px !important;
|
||
font-size: 19px !important;
|
||
}
|
||
|
||
.chatbot-fab-button {
|
||
width: 42px !important;
|
||
height: 42px !important;
|
||
}
|
||
|
||
.chatbot-fab-button i {
|
||
font-size: 19px !important;
|
||
}
|
||
|
||
#toggle-immersive-btn {
|
||
width: 40px !important;
|
||
height: 40px !important;
|
||
font-size: 19px !important;
|
||
}
|
||
}
|
||
|
||
/* 移动端响应式设计 (700px以下) */
|
||
@media (max-width: 700px) {
|
||
:root {
|
||
--btn-small-size: var(--btn-small-mobile);
|
||
--btn-medium-size: var(--btn-medium-mobile);
|
||
--btn-large-size: var(--btn-large-mobile);
|
||
--btn-icon-small: var(--btn-icon-small-mobile);
|
||
--btn-icon-medium: var(--btn-icon-medium-mobile);
|
||
--btn-icon-large: var(--btn-icon-large-mobile);
|
||
}
|
||
|
||
.tiny-round-btn {
|
||
width: var(--btn-small-mobile) !important;
|
||
height: var(--btn-small-mobile) !important;
|
||
font-size: var(--btn-icon-small-mobile) !important;
|
||
}
|
||
|
||
.medium-round-btn {
|
||
width: var(--btn-medium-mobile) !important;
|
||
height: var(--btn-medium-mobile) !important;
|
||
font-size: var(--btn-icon-medium-mobile) !important;
|
||
}
|
||
|
||
.big-round-btn,
|
||
.large-round-btn {
|
||
width: var(--btn-large-mobile) !important;
|
||
height: var(--btn-large-mobile) !important;
|
||
font-size: var(--btn-icon-large-mobile) !important;
|
||
}
|
||
|
||
#chatbot-fab {
|
||
width: var(--btn-medium-mobile) !important;
|
||
height: var(--btn-medium-mobile) !important;
|
||
font-size: var(--btn-icon-medium-mobile) !important;
|
||
}
|
||
|
||
.chatbot-fab-button {
|
||
width: var(--btn-medium-mobile) !important;
|
||
height: var(--btn-medium-mobile) !important;
|
||
opacity: 0.8; /* 移动端稍微不那么透明,因为没有 hover */
|
||
}
|
||
|
||
.chatbot-fab-button i {
|
||
font-size: var(--btn-icon-medium-mobile) !important;
|
||
}
|
||
|
||
#toggle-immersive-btn {
|
||
width: var(--btn-large-mobile) !important;
|
||
height: var(--btn-large-mobile) !important;
|
||
font-size: var(--btn-icon-large-mobile) !important;
|
||
}
|
||
}
|
||
|
||
/* 极小屏幕设备 (400px以下) */
|
||
@media (max-width: 400px) {
|
||
.tiny-round-btn {
|
||
width: 34px !important;
|
||
height: 34px !important;
|
||
font-size: 15px !important;
|
||
}
|
||
|
||
.medium-round-btn {
|
||
width: 38px !important;
|
||
height: 38px !important;
|
||
font-size: 17px !important;
|
||
}
|
||
|
||
.big-round-btn,
|
||
.large-round-btn {
|
||
width: 42px !important;
|
||
height: 42px !important;
|
||
font-size: 19px !important;
|
||
}
|
||
|
||
#chatbot-fab {
|
||
width: 38px !important;
|
||
height: 38px !important;
|
||
font-size: 17px !important;
|
||
}
|
||
|
||
.chatbot-fab-button {
|
||
width: 38px !important;
|
||
height: 38px !important;
|
||
}
|
||
|
||
.chatbot-fab-button i {
|
||
font-size: 17px !important;
|
||
}
|
||
}
|
||
|
||
/* ==================== 6. 无障碍支持 ==================== */
|
||
|
||
/* 减少动画偏好 */
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.tiny-round-btn,
|
||
.medium-round-btn,
|
||
.big-round-btn,
|
||
.large-round-btn {
|
||
transition: background-color var(--transition-fast) !important;
|
||
}
|
||
|
||
.tiny-round-btn:hover,
|
||
.medium-round-btn:hover,
|
||
.big-round-btn:hover,
|
||
.large-round-btn:hover {
|
||
transform: none !important;
|
||
}
|
||
}
|
||
|
||
/* 高对比度模式支持 */
|
||
@media (prefers-contrast: high) {
|
||
.tiny-round-btn,
|
||
.medium-round-btn,
|
||
.big-round-btn,
|
||
.large-round-btn {
|
||
border: 2px solid currentColor !important;
|
||
box-shadow: none !important;
|
||
}
|
||
}
|
||
|
||
/* ==================== 7. 暗色模式适配 ==================== */
|
||
|
||
@media (prefers-color-scheme: dark) {
|
||
.tiny-round-btn {
|
||
background-color: rgba(30, 41, 59, 0.9) !important; /* slate-800 with opacity */
|
||
color: #cbd5e1 !important; /* slate-300 */
|
||
border-color: #475569 !important; /* slate-600 */
|
||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;
|
||
}
|
||
|
||
.tiny-round-btn:hover {
|
||
color: #60a5fa !important; /* blue-400 */
|
||
border-color: #3b82f6 !important; /* blue-500 */
|
||
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.25) !important;
|
||
}
|
||
|
||
.tiny-round-btn:active {
|
||
background-color: rgba(15, 23, 42, 0.95) !important; /* slate-900 */
|
||
}
|
||
|
||
.medium-round-btn,
|
||
.big-round-btn,
|
||
.large-round-btn {
|
||
background-color: #1e40af !important;
|
||
box-shadow: 0 2px 8px rgba(30, 64, 175, 0.3) !important;
|
||
}
|
||
|
||
.medium-round-btn:hover,
|
||
.big-round-btn:hover,
|
||
.large-round-btn:hover {
|
||
background-color: #1e3a8a !important;
|
||
}
|
||
|
||
.chatbot-fab-button {
|
||
background-color: rgba(30, 41, 59, 0.9) !important; /* slate-800 with opacity */
|
||
color: #cbd5e1 !important; /* slate-300 */
|
||
border-color: #475569 !important; /* slate-600 */
|
||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;
|
||
}
|
||
|
||
.chatbot-fab-button:hover {
|
||
color: #60a5fa !important; /* blue-400 */
|
||
border-color: #3b82f6 !important; /* blue-500 */
|
||
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.25) !important;
|
||
}
|
||
|
||
.chatbot-fab-button:active {
|
||
background-color: rgba(15, 23, 42, 0.95) !important; /* slate-900 */
|
||
}
|
||
}
|