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 相关文章推荐
IE浏览器单独写CSS样式的几种方法
Oct 14 HTML / CSS
css3选择器基本介绍
Dec 15 HTML / CSS
纯CSS3绘制打火机动画火焰效果
Jul 18 HTML / CSS
canvas之万花筒效果的简单实现(推荐)
Aug 16 HTML / CSS
利用CSS3实现进度条的两种姿势详解
Mar 21 HTML / CSS
详解CSS3:overflow属性
Nov 17 HTML / CSS
socket.io 和canvas 实现的共享画板功能
May 22 HTML / CSS
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
Mar 25 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
Nov 18 HTML / CSS
HTML5拖拽的简单实例
May 30 HTML / CSS
HTML5+css3:3D旋转木马效果相册
Jan 03 HTML / CSS
能用CSS实现的就不要麻烦JavaScript了
Oct 05 HTML / CSS
CSS 还能这样玩?奇思妙想渐变的艺术
css3 实现文字闪烁效果的三种方式示例代码
Css预编语言及区别详解
用position:sticky完美解决小程序吸顶问题的实现方法
Apr 24 #HTML / CSS
position:sticky 粘性定位的几种巧妙应用详解
六种css3实现的边框过渡效果
Apr 22 #HTML / CSS
HTML+CSS+JS实现图片的瀑布流布局的示例代码
You might like
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
表格 隔行换色升级版
2009/11/07 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
2019/12/03 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
毕业自荐书
2013/12/09 职场文书
新三好学生主要事迹
2014/01/23 职场文书
积极向上的团队口号
2014/06/06 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
详解redis在微服务领域的贡献
2021/10/16 Redis
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js