原文地址:

https://mp.weixin.qq.com/s/hhmav2sbAgb7w17ipVZiTw

方法一:纯css方法, 精确度高,IOS 和 安卓 字体大小同等比例
1.1 以16px为基准,在根元素html下,字体为62.5%
1.2 此时1rem=10px;

/* css代码 */
html {
/* 10÷16=62.5% */
font-size: 62.5%;
} body {
font-size: 12px;
/* 12÷10=1.2 */
font-size: 1.2rem;
}

方法二:纯css方法, 精确度高,IOS 和 安卓 字体大小同等比例
2. 在css里,设置 html 元素的字体 font-size 设置为,50px;
2.1 字体和元素宽度用rem,字体和元素的实际大小等于:rem乘以100除以2

/* css代码 */
/* 在根元素html下,font-size 设置为,50px; */
html{
// 此处为重点
font-size: 50px;
}
body{
font-size: 12px;
} /* 示例 设置一个宽为400px 高为150px 字体大小为 24px 的div盒子 */
.div {
font-size: 0.48rem;
width:8rem ;
height: 3rem;
background-color:red ;
}
/* 以上结果为:
* width:400px;
* height:150px;
* font-size:24px;
* /

方法三:使用JS,通过识别设备是IOS 还是 安卓,用JS动态计算rem转换px
3. 此方法rem转px精确不是高
3.1 以iphone6为例,rem转px 零误差;以三星S5为例,rem转px误差0002
3.2 ios 上1rem=10px;安卓上,1rem=1.5px到1.4168px之间;因此使用了 ismobile 方法判断设备平台,使rem转转px,尽量在IOS 和 安卓上 单位长度保持统一==
3.3 1rem=10px

// JS JS动态计算rem转换p
function fontSize() {
var mobileType = ismobile(0)
//通过navigator判断是否是移动设备
if ((navigator.userAgent.match(
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
))) {
//在移动端
(function(doc, win) {
// html
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function() {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
// console.log("ty",mobileType);
if (mobileType == "Android") {
console.log("我是安卓----------");
clientWidth = (clientWidth > 768) ? 768 : clientWidth;
docEl.style.fontSize = 10.4168 * (clientWidth / 375) + 'px'; //这个10可以根据自己使用的数据来调整
}
if (mobileType == "iPhone") {
console.log("我是苹果----------");
clientWidth = (clientWidth > 768) ? 768 : clientWidth;
docEl.style.fontSize = 10 * (clientWidth / 375) + 'px'; //这个10可以根据自己使用的数据来调整
}
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
recalc();
})(document, window);
//移动端 文字适配
} else { //如果是pc端我们可以像微信公众号那样,设置最大宽度为740px
document.documentElement.style.margin = "0 auto"
//PC端
}
} // -识别IOS还是安卓
// param test: 0:iPhone 1:Android
function ismobile(test) {
var u = navigator.userAgent,
app = navigator.appVersion
if (/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (
/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/
.test(navigator.userAgent))) {
if (window.location.href.indexOf("?mobile") < 0) {
try {
if (/iPhone|mac|iPod|iPad/i.test(navigator.userAgent)) {
return "iPhone";
} else {
return "Android";
}
} catch (e) {
// alert(e);
}
}
} else if (app.indexOf('iPad') > -1 || app.indexOf('iPhone') > -1) {
return "iPhone";
} else {
return "Android"; }
};

H5移动端字体自适应(也适用于宽高)的更多相关文章

  1. 移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 )

    序言:应朋友要求随手写了一下移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 ) ,以备后用 LESS代码: .adaptive-circle { margin: 50px auto 0; ...

  2. NGUI 屏幕自适应(初始设定宽高800x480只支持比其大的屏幕)

    自适应讲解部分可以参考以下网址:http://www.xuanyusong.com/archives/2536,下面代码中提到的AdaptiveManualHeight()函数就是参考该文章的. 下面 ...

  3. 移动端1px边框伪类宽高计算

    移动端1px边框在手机上看显得比较粗,于是我们用伪类结合css3缩放的方法去设置线条,但是如果设置div的一条边,水平线就设置宽度100%,垂直线就设置高度100%,那么如果是div的四条边呢?宽高1 ...

  4. 原生js移动端字体自适应方案

    自从进入新公司之后,就一直采用800的方案,也就是判断屏幕尺寸,大于800px是一种html字体处理方案,另一种方案是小于800px的html字体处理方案, 代码如下: (function(doc, ...

  5. h5 移动端开发自适应 meta name="viewport"的使用总结

    本文系个人理解,可能有误差,仅供参考,谨慎采纳! 布局视口: 系统自带 一般大于屏幕宽度 理想宽度:  设置页面的viewport 的一个宽度,使不同的手机的布局视口宽度尽量接近可视窗口的值: 可视视 ...

  6. CSS实现宽度自适应100%,宽高16:9的比例的矩形

    现在我们来讲讲做自适应16:9的矩形要怎么做 第一步先计算高度,假设宽100%,那么高为h=9/16=56.25% 第二步利用之前所说设置padding-bottom方法实现矩形 代码 HTML &l ...

  7. C# 控制台程序(命令行程序)设置字体颜色,窗口宽高,光标行数

    控制台程序(命令行程序)设置窗口宽度高度,如下代码: Console.WriteLine(Console.WindowHeight); Console.WriteLine(Console.Buffer ...

  8. CSS实现宽度自适应100%,宽高16:9的比例的圖片或者矩形

    前言 图片的大小是多少,宽度一定,高度要始终自自适应为16:9. 解决 1通过js,程序算出绝对高度再进行设置.这是解决问题最容易想到的方法. 2.我们的原则是能用css实现的功能尽量用css,这有利 ...

  9. 获取iframe自适应后的宽高

    1.同域 一:引入jquery <script type="text/javascript" src="../jquery.min.js">< ...

  10. 从原理到方案,一步步讲解web移动端实现自适应等比缩放

    前言 在移动端做自适应,我们常用的有媒体查询,rem ,em,宽度百分比这几种方案.但是都各有其缺点. 首先拿媒体查询来说,在某一个宽度区间内只能使用一种样式,为了适应不同屏幕要,css的代码量就会增 ...

随机推荐

  1. Linux的命令合集

    Linux常用的命令 这里分享一个博客,里面有很丰富的Linux的常用指令. https://blog.csdn.net/qq_23329167/article/details/83856430. 然 ...

  2. [学习笔记] LCA - 图论

    [NOIP2013 提高组] 货车运输 最大生成树+LCA+倍增 好家伙,这道题我写了一个晚上,调了两个晚上,对于这道题我颇有感触.但这道题确实好,实实在在的蓝题,让我发现了许多关于LCA的问题. 首 ...

  3. .net5调用WebService简单事例

    1. 创建 .net5控制台项目: dotnet new console -o WebServiceConsole 2. 添加全局工具 dotnet tool install --global dot ...

  4. LemurBrowser狐猴浏览器:支持插件扩展、内置免费AI工具的移动端浏览器

    如何选择一款合适的浏览器? 在这个数字化时代,浏览器作为互联网的入口.然而,选择一款合适的浏览器却并不容易. 注释:狐猴浏览器是浏览器新标签页插件Wetab提供的支持在移动端安装插件,内置免费AI工具 ...

  5. [原创] 域格CLM920模组使用pppd专网拨号

    域格CLM920模组使用pppd专网拨号 参考资料 参照<9X07 模块LINUX集成用户手册版本_V1.60>的第四章节使用pppd拨号上网 编写chat脚本chat-script 要点 ...

  6. 「TCP/UDP」一个端口号可以同时被两个进程绑定吗?

    一.1个端口号可以同时被两个进程绑定吗? 根据端口号的绑定我们分以下几种情况来讨论: 2个进程分别建立TCP server,使用同一个端口号8888 2个进程分别建立UDP server,使用同一个端 ...

  7. JavaScript设计模式样例十六 —— 备忘录模式

    备忘录模式(Memento Pattern) 定义:保存一个对象的某个状态,以便在适当的时候恢复对象.目的:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.场景:数据缓存. ...

  8. Python开发工具:VSCode+插件

    本篇是 Python 系列教程第 3 篇,更多内容敬请访问我的 Python 合集 Visual Studio Code的安装非常简单,就不放这里增加文章篇幅了. 相比PyCharm,VSCode更加 ...

  9. Windows10使用MSYS2和VS2019编译FFmpeg详解

    1 环境准备 1.1 安装Visual Studio 2019 这个步骤相对比较简单,不再详细说明. 1.2 安装msys2 首先需要安装msys2环境以及相关的编译依赖项, 官方网址为: https ...

  10. 【YashanDB知识库】开源调度框架Quartz写入Boolean值到YashanDB报错

    问题现象 Quartz 是一个广泛应用于企业级应用中的开源作业调度框架,它主要用于在Java环境中管理和执行任务. 为了任务调度,Quartz的数据模型中使用了大量的布尔值记录任务.流程的各种状态,如 ...