H5页面(rem)

1,879 阅读2分钟

最近刚接手一个新活手机H5页面(浏览器和微信打开),由于时间紧任务急,快速在上网也看了一些资料,先简单整理下实现过程、过程遇到的坑,及后来如何填的坑。毕竟是这方面的小白,可能存在些许误差,有机会会继续深度学习。

一.实现过程

1. 设置meta标签

<meta name="viewport"   content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

使用js给meta标签赋值

var scale = 1 / devicePixelRatio;
document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');

2.确定手机端视觉稿大小

设计稿宽度/100,例如我接收到视觉稿大小是375px * 665px,这里求得的值就是3.75

3.使用js给html的font-size动态赋值,并监听resize,再次调用给HTML的font-size赋值的方法

document.documentElement.style.fontSize = document.documentElement.clientWidth / 3.75 + 'px';

4.在scss文件中,定义方法将px转为rem

@function torem($px){//$px为需要转换的字号
    @return $px / 100px * 1rem; //100px为根字体大小
}

5. 按照设计稿中标注的宽度和高度,使用torem方法设置元素的属性值

例如:

width:torem(24px);
height:torem(24px);

6. 页面中的文字大小不建议使用torem方式处理,可以结合css3媒介查询来设置元素的文字大小

二.踩过的坑

这个h5页面是用作宣传推广让用户注册,所以就是简单做的几屏介绍页面,中间内嵌了一个iframe注册页面,及最后的注册成功页面。 所以我就把它做成一个大长屏,通过判断用户上滑下滑来让屏幕滑动到对应的第n屏,在几屏最外层的容器上设置transform:translate()或者margin-top值,因为我貌似看到有说微信内置浏览器不一定对css3有很好的兼容性,所以我最终设置的是margin-top(要根据你的页面布局来)。

1.踩坑来了,在微信内置浏览中下滑与微信的默认动作冲突(针对android,ios没有),解决方式: 监听ontouchmove和ontouchend事件的元素的css中加上
touch-action: none;

说实话现在css真的是越来越强大了,开心~ 你说以后我就专注在css上有前途嘛?????

2.iframe没办法响应手指的touch ,后来是在注册页面加的touch监听,使用html5的postMessage解决的跨域,跨窗口消息传递是向上还是向下滑动https://www.cnblogs.com/dolphinX/p/3464056.html
3.表单出现软键盘时布局错乱

www.cnblogs.com/hellolm/p/4… 暂时就想起这么多,纯粹小白上路,可能会有偏差,还望不喜勿喷,(^__^) 嘻嘻……。