移动端页面适配 – H5 – 适配
移动端常用的页面适配方案
使用css设置rem根字体大小
1rem = 100px
设计稿宽度: 750px
一屏宽度: 100vw
公式: 根字体大小 = (100 / 750 * 100vw);
html {
font-size: calc(100 / 750 * 100vw);
}
body {
font-size: 1rem;
}
使用javascript动态设置rem根字体大小
mode: {
rem: *css样式使用rem单位
scale: *css样式使用px单位
px: *css样式使用px单位
}
designWidth: 设计稿宽度
(function (mode) {
var win = window
var doc = document
var designWidth = 750
if (/(iPhone|iPad|iPod|iOS|Android|Windows Phone|BlackBerry|SymbianOS)/i.test(navigator.userAgent)) {
var head = document.getElementsByTagName('head')[0];
var headMeta = [
'<meta name="apple-mobile-web-app-capable" content="yes">',
'<meta name="apple-mobile-web-app-status-bar-style" content="black">',
'<meta name="format-detection" content="telephone=no">',
'<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, minimal-ui" />',
]
for (var i = 0; i < headMeta.length; i++) {
head.insertAdjacentHTML('beforeEnd', headMeta[i])
}
switch (mode) {
case 'scale':
head.insertAdjacentHTML('beforeEnd', `<meta name="viewport" content="width=${designWidth}" />`)
break
case 'px':
var resizeEvent = 'orientationchange' in window ? 'orientationchange' : 'resize'
var setFont = function(){function adaptVP(a){function c(){var c,d;return b.uWidth=a.uWidth?a.uWidth:750,b.dWidth=a.dWidth?a.dWidth:window.screen.width||window.screen.availWidth,b.ratio=window.devicePixelRatio?window.devicePixelRatio:1,b.userAgent=navigator.userAgent,b.bConsole=a.bConsole?a.bConsole:!1,a.mode?(b.mode=a.mode,void 0):(c=b.userAgent.match(/Android/i),c&&(b.mode='android-2.2',d=b.userAgent.match(/Android\s(\d+.\d+)/i),d&&(d=parseFloat(d[1])),2.2==d||2.3==d?b.mode='android-2.2':4.4>d?b.mode='android-dpi':d>=4.4&&(b.mode=b.dWidth>b.uWidth?'android-dpi':'android-scale')),void 0)}function d(){var e,f,g,h,c='',d=!1;switch(b.mode){case'apple':f=(window.screen.availWidth*b.ratio/b.uWidth)/b.ratio;c='width='+b.uWidth+',initial-scale='+f+',minimum-scale='+f+',maximum-scale='+f+',user-scalable=no';break;case'android-2.2':a.dWidth||(b.dWidth=2==b.ratio?720:1.5==b.ratio?480:1==b.ratio?375:.75==b.ratio?240:480),e=window.screen.width||window.screen.availWidth,375==e?b.dWidth=b.ratio*e:750>e&&(b.dWidth=e),b.mode='android-dpi',d=!0;case'android-dpi':f=160*b.uWidth/b.dWidth*b.ratio,c='target-densitydpi='+f+', width='+b.uWidth+', user-scalable=no',d&&(b.mode='android-2.2');break;case'android-scale':c='width='+b.uWidth+', user-scalable=no'}g=document.querySelector('meta[name="viewport"]')||document.createElement('meta'),g.name='viewport',g.content=c,h=document.getElementsByTagName('head'),h.length>0&&h[0].appendChild(g)}function e(){var a='';for(key in b)a+=key+': '+b[key]+'; ';alert(a)}if(a){var b={uWidth:0,dWidth:0,ratio:1,mode:'apple',userAgent:null,bConsole:!1};c(),d(),b.bConsole&&e()}};adaptVP({uWidth:750})}
setFont()
win.addEventListener('load', setFont, false)
win.addEventListener(resizeEvent, setFont, false)
doc.addEventListener('DOMContentLoaded', setFont, false)
break
case 'rem':
var html = doc.documentElement
var resizeEvent = 'orientationchange' in window ? 'orientationchange' : 'resize'
var setFont = function () {
var clientWidth = html.clientWidth
html.style.fontSize = 100 * (clientWidth / designWidth) + 'px'
};
setFont()
win.addEventListener('load', setFont, false)
win.addEventListener(resizeEvent, setFont, false)
doc.addEventListener('DOMContentLoaded', setFont, false)
break
}
}
})('rem')
推荐这些文章:
前言
移动互联网发展至今,各种移动设备应运而生,但它们的物理分辨率可以说是五花八门,一般情况UI会为我们提供375尺寸的设计稿,所以为了让H5页面能够在这些不同的设备上尽量表现的一致,前端工程师就不得不对页面进行移动端适配了。
「如果这篇文章有帮助到你,❤️关注+点赞❤️鼓励一下作者,文章公众号首发,关注 前端南玖 第一时间获取最新文章~」
前置知识
在学习移动端适配前我们需要了解一些相关的前置知识。
屏幕尺寸
屏幕尺寸指的是以屏幕对角线的长度来计算的,单位是英寸。1英寸=2.54厘米
电子设备一般都用英寸来描述屏幕的物理大小,比如我们电脑常见的22、27英寸。英寸...
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
width:控制 viewport 的大小,可以指定的一个值,如 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。
height:和 width 相对应,指定高度。
initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。
maximum-scale:允许用户缩放到的...
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--
【一】在网页代码的头部,加入一行viewport标签
width - viewport的宽度 - (width=device-width 网页宽度默认等于屏幕宽度)
height - viewport的...
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
...
前提:我使用的是vue-cli2创建的项目其中使用了vant移动端组件库,近期有项目需要项目适配大屏的需求。但是由于平时我们使用的组件库的单位都是px 所以页面需要适配pc和移动端。所以进过大佬点拨找到了2个解决方案
px2rem-loader 将px转换为rem适配移动端
下载以下两个依赖
npm i lib-flexible --save
npm i px2rem-loader
在main.js中引入
import 'lib-flexible/flexible'
然后在build文件夹中找到utils.js 将px2rem-loader 添加到cssLoaders中,
同时,在gene...
要实现Android和IOS浏览器禁止页面缩放,通用的设置方式是给HTML页面设置meta标签来实现,具体添加标签内容如下:
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
标签属性说明:
width // 设置 viewport 的宽度,正整数/字符串 device-width
height // 设置 viewport 的高度...
移动端页面使用REM适配在微信中会受字体缩放影响导致排版错位等问题
解决方案
/**
* 限制微信字体放大
*/
(function () {
if (typeof WeixinJSBridge == 'object' && typeof WeixinJSBridge.invoke == 'function') {
handleFontSize()
} else {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', hand...
将前端HTML页面生成图片,用html2canvas.js将前端HTML页面生成图片
首先去html2canvas官网下载html2canvas.js文件
html2canvas官网地址:http://html2canvas.hertzen.com/
HTML
<div id="host_file" class="container">
<div id="view" class="print_wrap">
<div class="host_file_top_title_box">
<p>111111111111</p>
...
$(".scrollMenuItem a").each(function() {
var _this = $(this);
if (window.location.href.indexOf(_this.attr('href')) > -1) {
_this.addClass("active").siblings().removeClass("active");
};
});
...
这个问题很好解决,只用在html文件的head中加入或者替换为以下代码:
<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
本文来自博客园,作者:不如饲猪,转载请注明原文链接:https://www.cnblogs.com/ifeelthecall/p/16092996.html
...
文章链接:https://www.dianjilingqu.com/50956.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。