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 相关文章推荐
css3 border-image使用说明
Jun 23 HTML / CSS
详解CSS3中Media Queries的相关使用
Jul 17 HTML / CSS
CSS3按钮鼠标悬浮实现光圈效果源码
Sep 11 HTML / CSS
css3实现画半圆弧线的示例代码
Nov 06 HTML / CSS
HTML5中的postMessage API基本使用教程
May 20 HTML / CSS
详解使用HTML5的classList属性操作CSS类
Oct 13 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
Jun 03 HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
Jul 11 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
May 05 HTML / CSS
HTML实现代码雨源码及效果示例
Feb 25 HTML / CSS
HTML5公共页面提取作为公用代码的方法
Jun 30 HTML / CSS
CSS font-variation 可变字体的魅力(实例详解)
Mar 03 HTML / CSS
CSS 还能这样玩?奇思妙想渐变的艺术
css3 实现文字闪烁效果的三种方式示例代码
Css预编语言及区别详解
用position:sticky完美解决小程序吸顶问题的实现方法
Apr 24 #HTML / CSS
position:sticky 粘性定位的几种巧妙应用详解
六种css3实现的边框过渡效果
Apr 22 #HTML / CSS
HTML+CSS+JS实现图片的瀑布流布局的示例代码
You might like
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
在双python下设置python3为默认的方法
2018/10/31 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
Python for循环与range函数的使用详解
2019/03/23 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
物流专业大学生的自我鉴定
2013/11/13 职场文书
书法比赛获奖感言
2014/02/10 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
中介业务员岗位职责
2014/04/09 职场文书
小学生作文评语大全
2014/04/21 职场文书
企业承诺书怎么写
2014/05/24 职场文书
写给同事的离职感言
2015/08/04 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers