Skip to content

Commit 93c785d

Browse files
committed
update
1 parent 55282cb commit 93c785d

File tree

6 files changed

+466
-493
lines changed

6 files changed

+466
-493
lines changed

README.md

Lines changed: 110 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,143 @@
1-
# 可伸缩布局方案
1+
#lib.flexible
2+
3+
移动端自适应方案
24

35
## 最新版本
46

57
**1.0rc1**
68

7-
## 依赖
9+
## 依赖库
810

911
1012

11-
## 原理
12-
13-
在页面加载之初,判断当前系统以及其`device pixel ratio`,把文档宽度除以16作为文档的字体大小。在之后的样式中通过`rem`单位来实现元素的尺寸等设置,以便确保元素是可伸缩且自适应的。并且配合meta的scale缩放,来达到高清适配的目的。
14-
15-
## 栅格使用方法
13+
## 使用方法
1614

17-
如选择grid三栏布局,一栏跨4列,则由3个col-4组成
18-
19-
<!-- .col-*的父节点要为.grid* -->
20-
<div class="grid">
21-
<div class="col-4"></div>
22-
<div class="col-4"></div>
23-
<div class="col-4"></div>
24-
</div>
15+
建议对于js做`内敛处理`,在**所有资源加载之前**执行这个js。
2516

26-
如选择grid-thin两栏布局,一栏跨6列,则由2个col-6组成
17+
执行这个js后,会在`html`(也就是document.documentElement)上增加一个`data-dpr`属性,以及`font-size`样式。
2718

28-
<div class="grid-thin">
29-
<div class="col-6"></div>
30-
<div class="col-6"></div>
31-
</div>
19+
之后页面中的元素,都可以用rem单位来设置。`html`上的`font-size`就是rem的基准像素。
3220

33-
如选择grid-fat四栏布局,一栏跨3列,则由4个col-3组成
21+
## 把视觉稿中的px转换成rem
3422

35-
<div class="grid-fat">
36-
<div class="col-3"></div>
37-
<div class="col-3"></div>
38-
<div class="col-3"></div>
39-
<div class="col-3"></div>
40-
</div>
23+
首先,假设视觉稿大小是`750`(iPhone6)。
4124

25+
当前方案会把这3类视觉稿分成`100份`来看待(为了以后兼容vh,vw单位)。每一份被称为一个单位a。同时,1rem单位认定为10a。拿750的视觉稿举例:
4226

43-
## 单位rem使用方法
27+
1a = 7.5px
28+
1rem = 75px
4429

45-
对于320宽度来设计的视觉稿,只需要把视觉稿上的尺寸除以20,即可得出rem单位的数值。如果是以640宽度来设计的视觉稿,则除以40即可,依次类推。
46-
47-
<div class="grid-fat">
48-
<div class="col-6"><div class="list">列表</div></div>
49-
<div class="col-6"><div class="info">信息</div></div>
50-
</div>
51-
<style>
52-
.list {
53-
padding-left: 0.2rem
54-
}
55-
.info {
56-
padding-right: 0.2rem;
57-
}
58-
</style>
30+
因此,对于视觉稿上的元素的尺寸换算,只需要`原始px值`除以`rem基准px值`即可。例如240px * 120px的元素,最后转换为3.2rem * 1.6rem。
5931

6032
## 字体不使用rem的方法
6133

62-
在document上会有一个属性`data-dpr`,值为当前网页的dpr实际值,包括1和2,未来可能有1.5和3
34+
字体的大小不推荐用rem作为单位。所以对于字体的设置,仍旧使用px作为单位,并配合用`data-dpr`属性来区分不同dpr下的的大小
6335

64-
字体的大小不能用rem作为单位,仍旧采用px为单位。所以对于字体的设置,需要用data-dpr属性来区分不同dpr的大小。例如:
36+
例如:
6537

6638
div {
6739
width: 1rem;
6840
height: 0.4rem;
69-
font-size: 12px;
70-
}
71-
[data-dpr="1"] div {
72-
font-size: 12px;
41+
font-size: 12px; // 默认写上dpr为1的fontSize
7342
}
43+
7444
[data-dpr="2"] div {
7545
font-size: 24px;
7646
}
7747

78-
## 如何在高清屏上展示1px的边框
48+
[data-dpr="3"] div {
49+
font-size: 36px;
50+
}
51+
52+
### 手动配置dpr
53+
54+
引入执行js之前,可以通过输出meta标签方式来手动设置dpr。语法如下:
55+
56+
<meta name="flexible" content="initial-dpr=2,maximum-dpr=3" />
57+
58+
其中`initial-dpr`会把dpr强制设置为给定的值,`maximum-dpr`会比较系统的dpr和给定的dpr,取最小值。**注意:这两个参数只能选其一。**
59+
60+
### 手动设置rem基准值的方法
61+
62+
输出如下css样式即可:
63+
64+
html {font-size: 60px!important;}
65+
66+
### 一些常用APIs
67+
68+
**[Number] lib.flexible.dpr**
69+
70+
当前页面的dpr值
71+
72+
**[Number] lib.flexible.rem**
73+
74+
当前页面的rem基准值
7975

80-
一般边框或者分割线需要精确的以1px的视觉展示出来,普通的方案无法满足要求。在高清方案下,所有的1px线都能完美重现视觉稿。
76+
**[Number|String] lib.flexible.rem2px([Number|String digital])**
77+
78+
把rem转换为px
79+
80+
**[Number|String] lib.flexible.px2rem([Number|String digital])**
81+
82+
把px转换为rem
83+
84+
**lib.flexible.refreshRem()**
85+
86+
刷新当前页面的rem基准值
87+
88+
## 栅格系统
89+
90+
***需引入makegrid.js***
91+
92+
### 使用方法
93+
94+
lib.flexible.makeGrid(params)
95+
96+
- [Object params]
97+
- designWidth - 设计稿宽度
98+
- designUnit - 设计稿最小单位a(以px为单位)
99+
- columnCount - 栅格列数
100+
- columnXUnit - 栅格列宽(以a为单位)
101+
- gutterXUnit - 栅格间距(以a为单位)
102+
- edgeXUnit - 页面左右边距(以a为单位)
103+
- className - 栅格样式的名称(可省略,默认为grid)
104+
105+
通过传入视觉的栅格规范定义,可以输出对应的css样式。
106+
107+
lib.flexible.makeGridMode(modeName)
108+
109+
- [String modeName]
110+
111+
方案还预置了几个默认的栅格规范,分别是`750-12``750-6``640-12``640-6`
112+
113+
### 利用meta输出栅格样式
114+
115+
<meta content="designWidth=750, desginUnit=6, columnCount=12, columnXUnit=7, gutterXUnit=3, edgeXUnit=4" name="grid" />
116+
117+
118+
119+
<meta content="modeName=750-12" name="grid" />
120+
121+
### 栅格代码举例
122+
123+
<div class="grid">
124+
<div class="col-4"></div>
125+
<div class="col-4"></div>
126+
<div class="col-4"></div>
127+
</div>
128+
129+
<div class="grid">
130+
<div class="col-6"></div>
131+
<div class="col-6"></div>
132+
</div>
133+
134+
<div class="grid">
135+
<div class="col-3"></div>
136+
<div class="col-4"></div>
137+
<div class="col-5"></div>
138+
</div>
81139

82-
div {
83-
border: 1px solid #ECECEC;
84-
width: 8rem;
85-
height: 5rem;
86-
border-radius: 0.2rem;
87-
}
88140

89-
## 常见问题
141+
### 四类栅格在不同手机上的表现
90142

91-
* 目前安卓机器的scale缩放存在兼容性问题,所以安卓机器都以标清的方案输出。
92-
* 如遇到加载时页面从大到小等闪烁时,可能需要在页面中内敛代码。
143+
![栅格](grid.jpg);

0 commit comments

Comments
 (0)