基础适配方案
视口设置
<!-- 确保移动端视口正确 --> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
响应式断点
/* 常见的移动端断点 */
@media (max-width: 767px) {
/* 手机端样式 */
.openclaw-container {
padding: 0 12px;
}
/* 调整组件尺寸 */
.openclaw-button {
min-height: 36px;
padding: 8px 16px;
}
}
@media (min-width: 768px) and (max-width: 1023px) {
/* 平板端样式 */
}
布局适配策略
弹性布局
.openclaw-component {
/* 使用flex布局自动适应 */
display: flex;
flex-wrap: wrap;
gap: 8px;
}
/* 小屏时调整布局方向 */
@media (max-width: 767px) {
.openclaw-component {
flex-direction: column;
}
}
网格系统优化
/* 移动端减少列数 */
.openclaw-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 16px;
}
@media (max-width: 480px) {
.openclaw-grid {
grid-template-columns: 1fr;
gap: 12px;
}
}
组件级适配
导航组件
/* 桌面端水平导航 */
.openclaw-nav {
display: flex;
gap: 24px;
}
/* 移动端改为垂直或汉堡菜单 */
@media (max-width: 767px) {
.openclaw-nav {
flex-direction: column;
position: fixed;
top: 0;
right: -100%;
width: 70%;
height: 100vh;
background: white;
transition: right 0.3s ease;
padding: 20px;
}
.openclaw-nav.active {
right: 0;
}
/* 汉堡菜单按钮 */
.openclaw-menu-toggle {
display: block;
width: 30px;
height: 30px;
}
}
表单组件
@media (max-width: 767px) {
.openclaw-form-item {
flex-direction: column;
align-items: stretch;
}
.openclaw-form-label {
width: 100%;
margin-bottom: 8px;
}
.openclaw-form-control {
width: 100%;
}
/* 输入框字体大小 */
input, textarea, select {
font-size: 16px; /* 防止iOS自动缩放 */
}
}
表格组件
/* 移动端表格适配 */
@media (max-width: 767px) {
.openclaw-table {
display: block;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
/* 或者使用卡片式表格 */
.openclaw-table-card {
display: block;
}
.openclaw-table-row {
display: flex;
flex-direction: column;
margin-bottom: 16px;
border: 1px solid #eee;
border-radius: 8px;
padding: 12px;
}
}
交互优化
触摸友好
/* 增大触摸区域 */
.openclaw-button,
.openclaw-link {
min-height: 44px;
min-width: 44px;
padding: 12px 16px;
}
/* 适当增大间距避免误触 */
.openclaw-interactive-elements {
margin: 8px 0;
}
手势支持
// 添加滑动支持
let startX, startY;
const element = document.querySelector('.openclaw-slider');
element.addEventListener('touchstart', (e) => {
startX = e.touches[0].clientX;
startY = e.touches[0].clientY;
});
element.addEventListener('touchmove', (e) => {
if (!startX || !startY) return;
const diffX = e.touches[0].clientX - startX;
// 添加水平滑动逻辑
});
性能优化
按需加载
// 移动端加载轻量级组件
if (window.innerWidth < 768) {
import('./mobile-components.js').then(module => {
// 加载移动端专用组件
});
}
图片适配
<picture> <source media="(max-width: 767px)" srcset="image-mobile.jpg"> <source media="(min-width: 768px)" srcset="image-desktop.jpg"> <img src="fallback.jpg" alt="示例"> </picture>
工具类辅助
/* 响应式工具类 */
.openclaw-hide-mobile {
display: block;
}
.openclaw-hide-desktop {
display: none;
}
@media (max-width: 767px) {
.openclaw-hide-mobile {
display: none;
}
.openclaw-hide-desktop {
display: block;
}
/* 文字大小调整 */
.openclaw-text-sm {
font-size: 12px;
}
.openclaw-text-md {
font-size: 14px;
}
.openclaw-text-lg {
font-size: 16px;
}
}
调试建议
// 添加移动端调试工具
if (window.innerWidth < 768) {
// 显示屏幕尺寸信息
const debugInfo = document.createElement('div');
debugInfo.style.cssText = `
position: fixed; bottom: 0; right: 0;
background: rgba(0,0,0,0.7); color: white;
padding: 5px; font-size: 12px; z-index: 9999;
`;
debugInfo.textContent = `${window.innerWidth}×${window.innerHeight}`;
document.body.appendChild(debugInfo);
}
最佳实践建议:
- 移动优先设计:优先编写移动端样式,再通过媒体查询增强桌面端
- 渐进增强:确保基本功能在所有设备上都可用
- 测试充分:使用真实设备测试,不仅仅是浏览器模拟器
- 性能监控:关注移动端的加载速度和内存使用
- 无障碍访问:确保触摸交互对有障碍用户友好
根据OpenClaw的具体实现,你可能需要调整这些通用方案以适应特定的组件结构。

版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。