REM 호환 적응 솔루션
REM 호환 적응 솔루션
REM이란
REM(루트 글꼴 크기 요소)는 루트 요소를 기준으로 한 글꼴 크기의 단위를 나타냅니다.
예:
- 루트 노드
font-size
가10px
로 설정된 경우 < code >3rem, 계산 후3*10 = 30px
- 如果根节点设置为
20px
,侧计算后得3*20 = 60px
font-size
设置为 10px
,则使用 3rem
时,计算后得 3*10 = 30px
为什么使用 REM
- 相对于
流布局
、响应式布局
等适配方式,REM 适配
更为灵活,在不同屏幕尺寸上根据根节点来等比适配 - 兼容性好(Android 2.1+ / iOS 4.1+)
- 使用便捷,从
px -> rem
可以使用工作流自动完成
tmt-workflow 基准值约定
<html>
根节点默认font-size
=20px
- 视觉稿默认宽度为
375px
(即 iPhone 6 尺寸) - 其它屏幕宽度以 iPhone 6 的视觉为为基准,进行等比缩放
- rem 单位生效范围为所有内联、外联样式的 CSS 属性值,
1px
除外
tmt-workflow REM 方案使用思路
- 编码过程中统一使用
px
作为单位 - 工作流编译后,
px
->rem
自动完成 - 调用 lib-rem.less 进行个屏幕比例适配设置
开启 REM
首先,编辑配置文件 .tmtworkflowrc
루트 노드가 20px
로 설정된 경우, 이후 계산하면 < code>3*20 = 60px
흐름 레이아웃
, 반응형 레이아웃
및 기타 적응 방법에 비해 REM 적응
은 더 유연하며 루트 노드에 따라 비례적으로 적응될 수 있습니다. #🎜🎜#우수한 호환성(Android 2.1+ / iOS 4.1+) #🎜🎜#사용하기 쉬우며 워크플로를 사용하여 px ->에서 자동으로 완료할 수 있습니다. ; rem
#🎜🎜##🎜🎜##🎜🎜#tmt-workflow 벤치마크 값 규칙#🎜🎜#
- #🎜🎜#
<html> code> 루트 노드의 기본 너비는 font-size
= 20px
#🎜🎜#시각 원고의 기본 너비입니다. 375px
(예: iPhone 6 크기)#🎜🎜#다른 화면 너비는 iPhone 6의 비전에 따라 비례적으로 조정됩니다.#🎜🎜#rem 유효 범위 단위는 모든 인라인 및 외부 스타일의 CSS 속성 값입니다.
- #🎜🎜#인코딩 과정에서
px
단위를 균일하게 사용#🎜🎜#워크플로가 컴파일된 후 px
- > rem
자동 완성 #🎜🎜#lib-rem.less를 호출하여 화면 비율 적응 설정 수행.tmtworkflowrc
구성 파일은 다음과 같습니다. #🎜🎜##🎜🎜#{ "supportREM": true}#🎜🎜#
다시 lib-rem.less를 소개합니다
프로세스 세부정보
열린 후 CSS 포인트 <에 대한 로직의 두 부분을 실행합니다. code>개요 스타일 및 인라인 스타일
: 外联样式
和 内联样式
两部分逻辑执行:
Less -> CSS
过程,由插件 postcssPxtorem 对 LESS 中的px
进行单位转换HTML/EJS -> HTML
过程,会使用插件 posthtmlPx2rem 对 HTML 中的内联样式
进行单位转换
其它注意点
1. 兼容 1px 问题
考虑到 1px 转换为 rem
会有小数bug,工作流中会忽略 1px
的转换,最小转换数值为 2px
。
参见:postcss-pxtorem option:minPixelValue
参见:posthtmlPx2rem option:minPixelValue
2. 雪碧图兼容问题
为避免雪碧图遇到小数计算 bug,设置雪碧图内各个元素之间的间隙为 4px
,参见_tasks/TaskBuildDist.js
3. 强制不使用 REM 的预留 hack
如果希望某条 CSS
样式不进行单位转换,可使用如下大小写敏感的 px
写法:
如:12PX
代理 12px
,这样工作流中就会忽略这条 CSS
Less -> CSS
프로세스, 플러그인 postcssPxtorem이 수행하는 단위 LESSHTML/EJS -> HTML
의px
변환 프로세스에서 플러그인 posthtmlPx2rem이 사용됩니다. 단위를 HTML의인라인 스타일
로
#🎜🎜 ##🎜 🎜#1. 1px 문제와 호환
1px를
참조: postcss-pxtorem 옵션:minPixelValuerem
으로 변환할 때 소수점 버그가 있을 것을 고려하여 1px
는 무시됩니다. 워크플로 변환의 경우 최소 변환 값은 2px
입니다. #🎜🎜##🎜🎜#2. 스프라이트 호환성 문제
#🎜🎜 # 스프라이트 이미지의 소수 계산 버그를 방지하려면 스프라이트 이미지의 각 요소 사이의 간격을4px
로 설정하세요. _tasks/TaskBuildDist.js#🎜🎜##🎜🎜## 🎜🎜을 참조하세요. #3. REM을 사용하지 않도록 강제하는 예약된 해킹
#🎜🎜#특정CSS
스타일에서 단위 변환을 수행하지 않으려면 다음과 같이 대소문자를 구분하는 를 사용할 수 있습니다. px
작성 방법: #🎜🎜##🎜🎜# 예: 12PX
프록시 12px
이므로 이 CSS
는 무시됩니다. 워크플로 > 속성에서 단위 변환이 없습니다.