# 解析规则
# 素材导出
画板(artboard)和切片(slice)图片导出
- 以sketchID新建文件夹,将sketch文件放入其中
- 在文件夹中新建文件夹slices,将切片文件导入其中,切片包含@1x,@1.5x,@2x,@3x四种格式
- 在文件夹中新建文件夹artboards,将画板导入其中,画板为@1x格式
# sketch拆分
- 将sketch文件按照单个画板进行拆分
- 以画板为最小解析单位进行解析
# 画板解析
# 1.UI组件库(Library)解析
- Library第三方库-无法直接解析,只能导图处理
解析原理:
将Library进行unlink处理变成内部模板,然后再进行解析
处理方法:
通过插件调用sketch内部的unlinkFromRemote方法进行处理
# 2.模块(Symbol)解析
原理:
- symbolMaster 模块类
- symbolInstance 模块实例
- symbolID 每一个模块的唯一标识
Page页面JSON和Symbol模块JSON
- 根据SymbolID 判断模块依赖关系,对JSON进行整合将symbol模块JSON合并到Page页面JSON中
Symbol实例传参数解析
传值规则:
一.传值只用于自己的子模块
二.外层传值权重高于内层传值
a.文本传值 直接替换
b.symbolID传值
1.值为空,则进行删除处理
2.值不为空,则进行替换处理
3.多层传值,则外层传值覆盖内层传值
c.图片传值 直接替换image属性值
Symbol模块缩放比例解析
- 根据SymbolInstance和SymbolMaster的尺寸比例,等比例转换symbolMaster的坐标尺寸,作为实例的坐标尺寸
# 3.图片解析
- a.切片(Slice)解析
规则:
- 纯色切片不导出为图片,使用css描述
- 如何图层的子图层中有切片,则认为该切片为该图层切片,只保留切片,删除其他子图层
- 切片标记为image组件,图片资源使用slices文件夹中对应名称的@2x图片
- b.bitmap类型为图片类型根据路径直接匹配即可
- c.导出为图片的规则:
css无法描述的style和形状 均导出为图片
- 图片大小位置不准确
原因:
- sketch切片导出是自动剪切掉无效区域
- 旋转造成位置形状变化
处理方法:
- 通过sketchtool进行处理
- 利用artboard大小和位置不受旋转影响的特性以及artboard
- 根据图层像素来计算绝对位置
- d.图片去重
所有图片根据MD5值进行去重
# 4.图层信息处理
提取图层(不处理 group, paths, points)消除图层之间包含关系,所有图层均在同一层级,重新计算绝对坐标值及尺寸,记录样式等相关信息
a 坐标及尺寸处理
根据层级相对坐标,累加计算算图层的绝对坐标值
根据symbol模块尺寸缩放比例重新计算模块中的图层坐标及尺寸
b 样式处理
- text内容及字体样式处理
如果编码则进行base64解码处理,然后提取对应属性值
一段字体多种样式的解析,拆分成多个元素片段,再进行样式进行解析
- border处理
没有处理多边框的情况,现在只处理单边框
position: 属性表示 border 设置的位置
1 => Inside border 边框位于盒子的内部
0 => Center border 边框位于盒子边上内外各50%
2 => Outside 边框位于盒容器外部
- 填充处理
多个填充,只处理最后一个填充
填充颜色则直接处理成背景色
填充图片则处理成img类型并且记录图片信息
存在的问题?
1.渐变色-会造成背景色异常(暂时没法处理)
- 图片处理
Image组件类型并且记录图片路径信息
- 背景色
background-color属性
- 圆角处理
border-radius属性
- bitmap处理
如果子图层超出父容器,采取截取超出部分的处理方式
- oval圆形类处理
设置border-radius属性值为50%
存在的问题?
1.圆弧造成结构错误-暂时将大圆弧结构进行删除处理(大于100px)
# 5.层级结构处理
存在的问题?
1.相同大小相同位置的图层z-index不明确,导致解析的样式错误。
图层处理后,包含样式及坐标尺寸信息,并且无层级的图层JSON
包含关系处理
- 根据面积排序,减小层级处理的误差(注意:此方式有副作用,需要重新考虑)
- 对所有的图层进行坐标交集处理,根据坐标及尺寸关系得出图层之间的包含关系
- 特别注意:图层处理后不在进行二次处理的原则,因为会出现图层A和图层B不属于任何图层,但目标图层1介于图层A和图层B之间,导致如果进行多次处理会陷入死循环,即图层1既属于图层A有属于图层B,而图层B和图层A有属于图层1,从而产生死循环,此处处理的原则就是图层1只要被处理过就不在被进行二次比较
分行处理
- 根据高度从大到小排序,图层之间水平方向有重叠的属于同一行,给予同行图层一个包裹的父元素
分列处理
- 只对分行之后的同行元素处理
- 根据宽度从大到小排序,图层之间方向有重叠的属于同一行,给予同列图层一个包裹的父元素
排序处理
- 对所有的图层进行横纵向排序,以便按照从左上角向右下角的顺序进行处理,符合日常开发习惯
特性分行
- 针对文字列表进行处理,并标记为List组件
- 条件:间距相同,高度相同且子元素为Text
冗余html结构处理
- Container 子元素无背景,无边框属于无意义元素 -删除子元素处理
- Container 子元素有背景或者边框,父元素无背景及边框-删除父元素
- Image 父元素无背景及边框-删除父元素
- Image 子元素与父元素位置大小完全相同 -删除父元素
单边框处理
- 主要针对细条线元素
- 边框为第一个或者最后一个子元素
a.优先处理成父元素边框
b.处理成子元素的边框时,优先处理成下边框
列合并
- 连续两行以上,每行的高度相同且每行的子元素的高相同
左边单个元素,右边多个元素且左边距相同--特殊列布局
- 进行拆行处理左边元素为一列,右边多行为一列
文本宽度补偿
- 由于web页面字体渲染特性造成宽度不够的情况,继进行适量宽度补偿
# 6.布局处理
对 X, Y 轴分别进行排序
外层处理
-width大于基准值则设置行边距
布局方式
- 判断为垂直布局,则从上到下排列(条件:<-5px)
- 一列布局
垂直布局和水平布局
- 两列布局
左占【20%-30】右占 【70%-100%】 左边定宽,右边自适应
左占【70%-100%】右占 20%-30%】右边定宽,左边自适应
如果元素的中心点在父元素的左侧,则左浮动,否则右浮动
- 三列布局
左右宽度相等,中间比例小于父元素 50% 的宽度,中间元素与父元素中心重叠 进行中间定宽,左右自适应布局
左右宽度均小于父元素宽度的 20% 进行左右定宽,中间自适应布局
元素的中心点在父元素的左侧进行左浮动,否则右浮动
- 4列以上
如果元素的中心点在父元素的左侧进行左浮动,否则右浮动
- 等宽
等宽布局
# 7.语义化处理
列表语义化
-标记为List类型的列表使用ul-li标签
# 代码生成
# Web端
- 模板生成
generateBody
- SCSS生成
generateScss
生成SCSS便于开发使用
- CSS生成
通过node-scss将scss转换为css
pc端 px布局
M端 rem布局,依据设计稿尺寸750或者375来处理
- images处理
路径使用相对路径