UNPKG

figma-restoration-mcp-vue-tools

Version:

Professional Figma Component Restoration Kit - MCP tools with snapDOM-powered high-quality screenshots, intelligent shadow detection, and advanced diff analysis for Vue component restoration. Features enhanced figma_compare with color-coded region analysi

222 lines (181 loc) 5.89 kB
# Layout容器sizing - hug与fixed的关键差异 ## 问题发现 在DesignV1组件还原过程中,发现了一个关键的布局实现错误:错误地将Figma中的`hug sizing`实现为CSS中的固定尺寸,导致还原度停滞在89%左右。 ## 核心差异分析 ### Figma中的sizing属性 ```json "layout_3Y1WQD": { "mode": "column", "gap": "12px", "padding": "16px", "sizing": { "horizontal": "hug", // 水平方向根据内容自适应 "vertical": "hug" // 垂直方向根据内容自适应 } } ``` ### 错误实现 (固定尺寸) ```css .layout { display: flex; flex-direction: column; gap: 12px; padding: 16px; width: 100%; /* ❌ 错误:固定宽度 */ height: 100%; /* ❌ 错误:固定高度 */ } ``` ### 正确实现 (hug sizing) ```css .layout { display: flex; flex-direction: column; gap: 12px; padding: 16px; /* ✅ 正确:不设置width/height,让容器根据内容自适应 */ } ``` ## 实际效果对比 ### DesignV1组件案例 - **修复前还原度**: 89.29% - **修复后还原度**: 99.72% - **提升幅度**: +10.43% (巨大改善) - **差异像素减少**: 从52,277个减少到1,373个 ### 视觉差异分析 - **固定尺寸问题**: 容器强制填充父元素,导致内容分布不自然 - **hug sizing效果**: 容器紧贴内容,实现Figma设计的精确布局 - **关键影响**: 影响所有子元素的相对位置和间距 ## Figma sizing属性映射规则 ### 1. hug sizing → CSS自适应 ```json "sizing": { "horizontal": "hug", "vertical": "hug" } ``` ```css /* 不设置width/height,让flex容器自适应 */ .container { display: flex; /* 其他属性... */ } ``` ### 2. fixed sizing → CSS固定尺寸 ```json "sizing": { "horizontal": "fixed", "vertical": "fixed" }, "dimensions": { "width": 162, "height": 77.25 } ``` ```css .container { width: 162px; height: 77.25px; } ``` ### 3. fill sizing → CSS填充父容器 ```json "sizing": { "horizontal": "fill", "vertical": "fill" } ``` ```css .container { width: 100%; height: 100%; } ``` ## 识别策略 ### 1. JSON分析检查点 - **查找sizing属性**: 在layout定义中寻找sizing配置 - **区分hug/fixed/fill**: 根据sizing值选择对应的CSS实现 - **验证dimensions**: fixed sizing才需要使用dimensions值 ### 2. 视觉验证方法 - **内容分布**: hug sizing的容器应该紧贴内容边界 - **空白区域**: 固定尺寸容器可能有多余的空白 - **子元素对齐**: hug sizing影响子元素的相对位置 ### 3. 差异图特征 - **块状红色区域**: 通常表示sizing实现错误 - **整体位置偏移**: 容器尺寸错误导致的连锁反应 - **边界不匹配**: 容器边界与预期不符 ## 最佳实践 ### 1. 优先级处理 1. **首先检查sizing属性**: 在实现任何容器前先确认sizing类型 2. **区分容器类型**: FRAME通常有sizing属性,GROUP通常没有 3. **验证嵌套关系**: 父容器的sizing影响子元素布局 ### 2. 实现模式 ```css /* 模式1: hug sizing容器 */ .hug-container { display: flex; flex-direction: column; /* 或row */ gap: 12px; padding: 16px; /* 不设置width/height */ } /* 模式2: fixed sizing容器 */ .fixed-container { width: 162px; height: 77.25px; /* 其他属性... */ } /* 模式3: fill sizing容器 */ .fill-container { width: 100%; height: 100%; /* 其他属性... */ } ``` ### 3. 调试技巧 - **浏览器开发者工具**: 检查容器的实际尺寸 - **对比expected.png**: 验证容器边界是否匹配 - **逐步验证**: 先实现容器sizing,再添加内容 ## 常见错误避免 ### ❌ 错误做法 - 所有容器都使用`width: 100%; height: 100%` - 忽略Figma JSON中的sizing属性 - 用固定尺寸实现hug sizing容器 - 不区分FRAME和GROUP的sizing行为 ### ✅ 正确做法 - 根据JSON中的sizing属性选择CSS实现 - hug sizing不设置width/height - fixed sizing使用dimensions中的精确值 - 验证容器边界与设计稿匹配 ## 适用场景 ### 高频应用场景 - **列表容器**: 通常使用hug sizing适应内容 - **卡片组件**: 根据内容自适应高度 - **导航栏**: 水平hug,垂直fixed - **按钮组**: hug sizing适应按钮数量 ### 特殊注意场景 - **嵌套容器**: 父容器sizing影响子容器行为 - **响应式布局**: hug sizing在不同屏幕尺寸下的表现 - **动态内容**: 内容变化时hug sizing的自适应行为 ## 性能影响 ### 渲染性能 - **hug sizing**: 需要计算内容尺寸,轻微性能开销 - **fixed sizing**: 固定尺寸,渲染性能最佳 - **fill sizing**: 依赖父容器,中等性能开销 ### 布局稳定性 - **hug sizing**: 内容变化可能导致布局重排 - **fixed sizing**: 布局最稳定 - **fill sizing**: 依赖父容器稳定性 ## 相关文档 - [边框盒模型差异-Figma与Web尺寸计算.md](./边框盒模型差异-Figma与Web尺寸计算.md) - [布局分析-FolderItem大面积差异问题.md](./布局分析-FolderItem大面积差异问题.md) - [clipsContent属性-高度裁剪优化策略.md](./clipsContent属性-高度裁剪优化策略.md) ## 成功案例 ### DesignV1组件 - **问题**: 89.29%还原度停滞 - **原因**: Layout容器错误使用固定尺寸 - **解决**: 改为hug sizing实现 - **结果**: 99.72%还原度 (+10.43%提升) ### 关键代码对比 ```css /* 修复前 */ .layout { width: 100%; height: 100%; } /* 修复后 */ .layout { /* 移除width/height,实现hug sizing */ } ``` ## 标签 `#布局` `#sizing` `#hug` `#fixed` `#容器` `#关键修复` `#高影响` ## 总结 Layout容器的sizing属性是Figma还原中的关键因素,正确理解和实现hug/fixed/fill sizing可以带来显著的还原度提升。这个经验在DesignV1组件中带来了10.43%的巨大改善,是所有组件还原都应该优先检查的重点。