REM(推荐)
注意
rem的适配方式建议用在
手机端网页
、电脑端前台WEB
。对于管理端不太建议,原因是我们后端管理大都用的第三方框架大都是px为单位的,框架内想改为rem比较麻烦。
首先我们知道rem是根据页面根节点的字体大小来计算dom的宽高的,那么我们就可以根据窗口的大小动态改变根节点的字体大小,而页面中的元素的宽高都使用rem作为单位来适配不同的窗口。
页面中添加
1 | <head> |
这里我根节点的默认宽度使用的是10px
,这样是方便换算为rem
,
而效果图的计算宽度默认为400px
,是因为400px是在所有主流手机宽度的中间值
这样我们就可以在蓝湖上把效果图的宽度设置为400px,所有的宽高直接除以10换算为rem即可。
PC端可以设置一下最小的适配宽度
1 | <style> |
PX2REM+REM(推荐)
安装依赖
1 | npm i postcss-px2rem --save -dev |
Postcss的配置文件.postcssrc.js
找到项目根目录下的.postcssrc.js
文件
1 | module.exports = { |
remUnit: 10
代表 1rem = 10px;
所以当你一个12px
值时,它会自动转成 (12/10)rem
然后使用上面的适配就行
1 | <style> |
但是内联样式并没有被处理
我们可以手动更改为计算后的rem。
如果在动态绑定样式并且手动计算比较难算的时候使用下面的方式。
转换方法
1 | function px2rem(px){ |
使用
1 | <div :style="{fontSize:$px2rem('16px')}"></div> |
媒体查询适配(推荐)
1 | body { |
页面缩放(不推荐)
整个页面缩放
注意
如果框架的弹窗位置是通过JS计算的,那么会发生偏移,就不推荐这种方式。
有这么一个情况,项目已经开发很久了,都是按1920*1080做的,这样在小屏幕上就会显示不好看,但是换成rem就要所有页面都进行更改就太麻烦了,我们就可以使用zoom方式。
1 | <div id="app_outer"> |
注意
缩放后100vh就不再是窗口的高度了,要除以缩放比例。
页面中类似于
1 | height: calc(100vh - 100px); |
也要改为
1 | height: calc(100% - 100px); |
上面的例子是根据宽度进行适配的,当然也可以根据高度适配,直接获取高度获取到的是0,所以可以使用下面的方式。
获取窗口的高度
1 | function getClientHeight() { |
内部缩放
如果内部的宽高是确定的,但是会大于外层的DIV,我们想自适应。
1 |
|
图片适配
如果尺寸的比例不一样 那么图片就会变形
我们可以设置这个属性
1 | img { |
相关概念
px、em、rem
- px是固定像素,一旦设置了就无法因为适应页面而改变。
- em是rem相对于px更具有灵活性,他们是相对于长度单位的变化而变化,更适应于响应式布局。
- em相对于父元素字体大小的倍数
- rem相对于根元素字体大小的倍数
Viewport 基础
视觉窗口:Viewport是移动端特有。这是一个虚拟的区域,承载网页的。
一个常用的针对移动网页优化过的页面的 viewport meta 标签大致如下:
1 | <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0"/> |
其中
width
:控制 viewport 的大小,可以指定的一个值,如果 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)height
:和 width 相对应,指定高度initial-scale
:初始缩放比例,也即是当页面第一次 load 的时候缩放比例maximum-scale
:允许用户缩放到的最大比例minimum-scale
:允许用户缩放到的最小比例user-scalable
:用户是否可以手动缩放