本文已参与「新人创作礼」活动,一起开启掘金创作之路。
最近公司给了一份任务,要求写一份页面,自适应设备类型,分中英文文档,以及H5和pc端。提了一些要求,趁晚上有时间总结一下写页面遇到的几个问题。
html实现响应式
响应式或者自适应的是页面适应我们不同屏幕尺寸的手机,电脑等设备。
头部加上代码
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,
user-scalable=no">
这一步的目的是告诉浏览器当前viewport的宽度等于设备的宽度,user-scable=no或者0是不允许用户手动缩放,这个我理解主要是用手机浏览网页的时候,如果出现缩放的情况,会很影响体验感,因为手指会一直滑动屏幕。
宽度使用相对宽度
不要使用固定宽度,高度可以固定。宽度如果固定的话,不同设备显示宽是不一样的,如果固定宽度,必然不可能适应所有设备。
可以使用相对宽度,我一般使用百分比,相对于父级盒子的宽度。
字体单位不使用px
可以使用相对单位 rem 或者 em ,rem相对html根元素, em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
选择性加载css样式
不在head中写css样式,而是使用外部引入css样式。这样做的好处就是可以根据设备类型的不同来引入不同的css样式,包括pc端的页边距和移动端肯定是不同的,还有行距字体大小等,都可以通过外部使用css样式解决。至于检测设备类型,这就要交给js。
JS检测设备类型
主要有以下几种方式:
. 通过设备信息直接判断
function filesMobile(){
// 市面上的主流使用环境
return /Andriod|iphone|ipad|webOs|Windows Phone|IEMobile|Opera Mini/i.test(navigator.userAgent);
}
这里我们主要会使用到 navigator 对象,它是 JavaScript中的一个独对象,用于提供当前用户所使用的浏览器,操作系统等信息。相关信息数据会以 navigator对象属性的形式展现出来,目前市面上的所有主流浏览器都支持该对象的使用。而在 navigator对象中存在一个 userAgent属性,它会返回用户的设备操作系统,以及使用浏览器的信息。比较特殊的是,在APP应用不支持navigator对象的使用,所以我们可以通过判断是否存在 navigator对象来确定是不是APP使用环境。
通过浏览器宽度确定(比较简单粗暴)
if(window.screen.availWidth < 768){
console.log("当前环境为移动端");
}else {
console.log("当前环境为PC端");
}
这里主要是使用了window.screen.availWidth
,可以返回屏幕的可用宽度,根据宽度适配设备。下面给出一些设备宽度(通过浏览器控制台得到):
iphone SE: 375×667
iphone xr: 414×896
iphone12 pro:390×844
samsung galaxy s8+ :360*740
ipad air :820×1180
ipad mini:768×1024
ipad pro:1024×1366
这些就是一些常见的宽度,更多的可以去控制台中看,可以看到一般手机宽度都是比较小,iPad mini宽度是768,因此默认小于768的就是移动端。
判断IOS或者Andriod
let userMessage = navigator.userAgent;
let isAndroid = userMessage.indexOf('Andriod') > -1 || userMessage.indexOf('Adr') > -1;
// 当前为Andriod环境
let isIOS = !!userMessage.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)); // 当前为IOS环境
区分Andriod,iphone,ipad
let userMessage = navigator.userAgent.toLowerCase();
if(/android|adr/gi.test(userMessage)){
// 当前为Andriod环境
}else if (/\(i[^;]+;( U;)? CPU.+Mac OS X/gi.test(userMessage)){
// 当前为iphone环境
}else if(/iPad/gi.test(userMessage)){
// 当前为iPad环境
}
引入不同link样式
<link rel="stylesheet" href="./css/pc_cn.css" title="a"> //head中引入
<script>
if (window.screen.availWidth < 768) {
//移动端
var links = document.getElementsByTagName('link')
links[0].href = './css/h5_cn.css' //判断条件后切换移动端样式
console.log(1);
} else {
//PC端
console.log(2);
}
</script>
总结
总结一下:上面这些就是自适应页面制作思路以及js检测设备类型的方法总结,可以根据自己的需求来操作。
这篇字数有点多了,下一篇再介绍,关于产品对页面的需求,以及我的解决方法。。。