一个网页适应多种不同屏幕的H5开发,rem的终极用法

2024-03-13 11:32

本文主要是介绍一个网页适应多种不同屏幕的H5开发,rem的终极用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先普及一下知识:

html原生单位rem 即font size of the root element(相对于根元素font-size而变化的单位),

em是相对于其设置了font-size的父元素(如果直接父元素都没有设置,就一级一级往上找,如果没找到,就会采用默认值,其它都与rem的特性一样)。

适用范围:在手机端使用,因为手机中都是applewebkit内核(此时html的fontSize 不能小于12px,因其fontSize默认最小是12px这个可以设置),1rem在火狐Gecko内核和IE(trident7.0内核)中表现相同,但并不等于applewebkit上显示的大小。

默认情况下不给html根元素设置font-size,则1rem会有默认值:

chrome,IE 9-11,Firefox: 1rem = 16px; IE8不支持rem

如果设置html根元素的font-size,由于浏览器的默认字体最小是12px,所以,

html的font-size:<12   则页面所有元素:1rem = 12px;

html的font-size:>=13   则页面所有元素:1rem = 13px;

原理:以720px(最大值)宽的手机为例,设它的fontSize:100px)为基准,通过控制html的fontSize(即宽每减小1px,相应的fontSize也减少),就可以实现720~320宽的手机都展示一样的显示效果,

1.HTML

单位用rem,包括字体和所有长宽高单位都用rem,  在chrome中,当fontSize > 12px 时,1px of html === 1rem of any elements

下面设置viewport非常重要,没有的话$(window).width()恒等于980px.

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

css代码:

html{font-size:100px;
}
*{margin:0;padding:0;}
.og-layauto{width:auto;margin:0 auto;max-width:720px!important;background: green;
}

2.js代码:

jQuery写法:

$(function(){var winW = $(window).width();$('html').css({'fontSize':100 - (720-winW)* 0.1389 + 'px'});
})

原生写法,增加了window.onresize = fn,如下所示:

window.onload = function(){initSize();window.onresize = function(){throttle(initSize,100);}function initSize(){var handleHtml = document.getElementById("html1");
//ie8 不支持window.innerWidth ie9+支持. 其余两个 ie8 ie8+ chrome firefox都兼容 var handle_windowW = window.innerWidth || document.documentElement.width || document.body.width;if(handle_windowW > 720){handle_windowW = 720;}handleHtml.style.fontSize = 100 - ( 720 - handle_windowW ) * 0.1389 + "px";
//  handleHtml.style.cssText = "font-size:100px!important"; // 会将目标元素的所有样式清空,且设置为=右边的值。}function throttle(fn,time,context){clearTimeout(fn.t1);fn.t1 = setTimeout(function () {fn.call(context);},time);}
}

 

// 以下是最大兼容ipadpro1024px宽屏的算法,向下兼容时要用基准尺寸减去改变的尺寸。

问题 1 :假如我要在针对iphone6 (375X667)上做开发, UI给的设计图一般都是基于750宽来设计的,我们除2就好了)

如何让iphone6手机的1rem = 100px;  // 为什么是100(为了好计算呀),不能是10呢,因为浏览器默认最小字体就是12px,原因上面有细说

计算公式:设fs为基准font-size,目标font-size为100px,最大兼容尺寸:1024px,开发的手机尺寸375px

因为本来根据html的font-size变化的rem值,1rem = 1px的,但是我们做不到呀,即使是1rem = 10px 也做不到。只能让1rem = 100px呀。

公式 :

            100 = fs - (1024-375)*(fs/1024), 

求得 :fs = 273.066

看不懂没有关系,拿着代码,用得爽,开发好了你再慢慢想。

最终的核心代码:

function initFontSize(){var htmlDom = document.getElementById("html1");var currentW = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;var value = Number(273.066 - (1024-currentW) * 0.2667).toFixed(2);htmlDom.style.fontSize = value + "px";
}

Ok,到此,一个完美适配多种手机屏幕的方案就完成了。大周末的,给你们写博客,记得给个赞哦!^_^^_^^_^

长得帅的需要比常人更努力,才对得起上天给你的那张帅脸。

 

 

这篇关于一个网页适应多种不同屏幕的H5开发,rem的终极用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804727

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者