这是一个系列文章,分 3 篇:
css
前面写过一篇移动端适配实践的文章,很长,内容太多,看得容易凌乱,从新写个通熟易懂版的。html
好比,对于一个移动端页面,设计师给的视觉稿画布宽 750,视觉稿中的一个黄色区块的尺寸是 702 x 300,并在画板中居中。咱们但愿在任何一个设备中的呈现比例都与视觉稿中同样,根据布局视口宽度等比缩放。布局
在移动端咱们通常会设置布局视口宽度=设备宽度,即内容呈现的区域在设备屏幕内。post
<meta name="viewport" content="width=device-width, initial-scale=1.0">
复制代码
但不一样设备的宽度不一样,于是让布局视口的宽度也不一样。好比 iPhone 6 的布局视口宽度为 375, iPhone6 Plus 布局视口的宽度为 414。spa
对于给定的画布宽 750 的视觉稿,若是在布局视口宽度为 375 的 iPhone 6 设备上呈现,咱们能够将视觉稿中元素的像素值除以 2,代码以下:设计
.box{
width: 351px;
height: 150px;
margin-top: 40px;
background: #F5A623;
}
复制代码
那么在 iPhone 6 中的呈现如右图,与左图视觉稿布局一致。
3d
但一样的代码,在 iPhone 6 Plus 中呈现的就不同了,两侧间距变大。由于 iPhone 6 Plus 的布局视口比 iPhone 6 要宽,而矩形框的尺寸没有变, 依然是 315 x 150。code
对于给定的画布宽 750 的视觉稿,若是在布局视口宽度为 414 的 iPhone 6 Plus 设备上呈现,咱们能够将视觉稿中元素的像素值按比例除以 (750 / 414),即:cdn
.box{
width: 387.5px;
height: 165.6px;
margin-top: 44.2px;
background: #F5A623;
}
复制代码
页面呈现效果也能够跟视觉稿同样了。htm
如何用同一份 CSS 代码,使元素尺寸随着布局视口宽度的变化按视觉稿中的比例等比缩放?咱们结合 CSS 中相对单位 rem 的特性,rem 单位的像素值是相对于根元素(HTML 元素) 的 font-size 的。例如:HTML 的 font-size 为 100px, 在 CSS 样式中设置某一元素的宽度为 2rem, 那么此元素在页面中的宽度为 200px。
根据元素在视觉稿中的比例等比缩放找到这样一层关系:
视觉稿元素尺寸 / 视觉稿画布宽度
= (rem 值 * HTML 元素的 font-size) / 布局视口宽度
= rem 值 * (HTML 元素的 font-size / 布局视口宽度)
= rem 值 / (布局视口宽度 / HTML 元素的 font-size)
复制代码
若是:
布局视口宽度 / HTML 元素的 font-size = 定值 N
复制代码
就能够用同一份 CSS 代码实如今任何设备中自适应。
rem 值 = N * (视觉稿元素尺寸 / 视觉稿画布宽度 )
复制代码
因此,咱们只要肯定一个 N 值,再完成两步,便可实现自适应:
假如您的视觉稿画布宽度是 750,为了便于 rem 值的计算, 您能够选择设置 N = 7.5, 这样只须要将视觉稿中的尺寸值除以 100 就能够获得 rem 单位的 CSS 像素值。