HTML5中 rem适配方案与 viewport 适配问题详解


Posted in HTML / CSS onApril 27, 2021

H5 端 rem 适配方案与 viewport 适配

rem

rem 是 CSS3 新增的一个相对单位(root em,根 em)
只根据当前页面 HTML 页面的 font-size 设置,如果根目录的 font-size 为 18px,则 1rem=18px

媒体查询设置

@media screen and (min-width: 320px) {
  html {
    font-size: 32px;
  }
}
@media screen and (min-width: 375px) {
  html {
    font-size: 37.5px;
  }
}
@media screen and (min-width: 414px) {
  html {
    font-size: 41.4px;
  }
}
@media screen and (min-width: 750px) {
  html {
    font-size: 75px;
  }
}

使用 JS 动态修改

<script>
  // 根据屏幕尺寸大小调整html的fontsize
  function setHtmlFontSize() {
    const width = document.documentElement.clientWidth;
    document.documentElement.style.fontSize = width / 10 + "px";
  }
  //   初始化
  setHtmlFontSize();
  //   监听屏幕尺寸变化事件
  window.addEventListener("resize", setHtmlFontSize);
  //   监听屏幕翻转事件
  window.addEventListener("orientationchange", setHtmlFontSize);
</script>

viewport

通过缩放来实现移动端各个尺寸的适配

适配方案 动态创建 mate viewport 属性,根据当前屏幕尺寸动态设置缩放值

Viewport 属性

 

属性 说明 备注
width 以 px 为单位定义 viewport 的宽度 一个正整数或者额字符串 device-width
height 以 px 为单位定义 viewport 的高度 一个正整数或者额字符串 device-height
initial-scale 定义设备的 dips 宽度与 viewport 尺寸之间的比例 一个 0.0 到 10.0 之间的正数
maximum-scale 定义最大缩放值,他的值必需大于等于 minimum-scale 的值 一个 0.0 到 10.0 之间的正数
minimum-scale 定义最小缩放值,他的值必需小于等于 maximum-scale 的值 一个 0.0 到 10.0 之间的正数
user-scalable 一个布尔值,用户是否可以缩放页面 yes 或 no

使用 js 动态设置 viewport 属性

原理:通过设置 viewport 的 initial-scale 相关属性 , 将所有设备布局视口的宽度调整为设计图的宽度

//定义设计稿宽度为375
const DESIGN_WIDTH = 375;
//通过设置meta元素中content的initial-scale值达到移动端适配
const setViewport = function () {
  //计算当前屏幕的宽度与设计稿比例
  let scale = window.screen.width / DESIGN_WIDTH;
  // 获取元素
  let meta = document.querySelector("meta[name=viewport]");
  let content = `width=${DESIGN_WIDTH}, initial-scale=${scale}, maximum-scale=${scale}, minimum-scale=${scale}`;
  // 判断是否已存在
  if (!meta) {
    meta = document.createElement("meta");
    meta.setAttribute("name", "viewport");
    document.head.appendChild(meta);
  }
  meta.setAttribute("content", content);
};
setViewport();
//   监听屏幕变化事件
window.addEventListener("resize", setViewport);
//   监听屏幕翻转事件
window.addEventListener("orientationchange", setViewport);

到此这篇关于HTML5中 rem适配方案与 viewport 适配问题详解的文章就介绍到这了,更多相关html5 rem适配内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS中一些@规则的用法小结
Mar 09 HTML / CSS
一款CSS3实现多功能下拉菜单(带分享按)的教程
Nov 05 HTML / CSS
animation和transition的区别
Oct 12 HTML / CSS
html5 的a标签 Href 拨电话的写法
Nov 04 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
May 29 HTML / CSS
HTML5不支持标签和新增标签详解
Jun 27 HTML / CSS
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
Dec 20 HTML / CSS
HTML5 文件上传下载的实例代码
Jul 03 HTML / CSS
HTML5 视频播放(video),JavaScript控制视频的实例代码
Oct 08 HTML / CSS
HTML5中外部浏览器唤起微信分享
Jan 02 HTML / CSS
浅析图片上传及canvas压缩的流程
Jun 10 HTML / CSS
CSS中理解层叠性及权重如何分配
Dec 24 HTML / CSS
CSS 还能这样玩?奇思妙想渐变的艺术
css3 实现文字闪烁效果的三种方式示例代码
Css预编语言及区别详解
用position:sticky完美解决小程序吸顶问题的实现方法
Apr 24 #HTML / CSS
position:sticky 粘性定位的几种巧妙应用详解
六种css3实现的边框过渡效果
Apr 22 #HTML / CSS
HTML+CSS+JS实现图片的瀑布流布局的示例代码
You might like
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
jquery简单体验
2007/01/10 Javascript
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
对于Python中线程问题的简单讲解
2015/04/03 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
python 判断网络连通的实现方法
2018/04/22 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
Python ORM编程基础示例
2020/02/02 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
keras实现多种分类网络的方式
2020/06/11 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
html5开发之viewport使用
2013/10/17 HTML / CSS
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
2014年党员整改措施范文
2014/09/21 职场文书
婚宴致辞
2015/07/28 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
工作一年自我鉴定
2019/06/20 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
详解Oracle块修改跟踪功能
2021/11/07 Oracle
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript