关于rem适配的3种常用封装

请看下面的攻略:

关于rem适配的3种常用封装

什么是rem适配?

rem适配是指将页面布局中的px单位转换成rem单位,以此来适配不同尺寸的设备屏幕。通过rem适配可以使页面在不同尺寸的设备上,都能够正常显示。

常用的3种rem适配封装方式

1. 原生js封装

在原生js封装中,我们可以使用window.onresize方法监听屏幕尺寸的变化,然后动态改变html元素的font-size属性值,从而实现rem适配。示例代码如下:

(function (doc, win) {
  const docEl = doc.documentElement
  const resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
  const recalc = function () {
    const clientWidth = docEl.clientWidth
    if (!clientWidth) return
    docEl.style.fontSize = 100 * (clientWidth / 750) + 'px'
  }
  recalc()
  win.addEventListener(resizeEvt, recalc, false)
})(document, window)

2. postcss-pxtorem插件

postcss-pxtorem是一款postcss的插件,可以自动将px单位转换成rem单位。我们只需要在项目中使用postcss-pxtorem插件,并设置相应的rem基准值即可。示例代码如下:

/* 在样式中直接写px */
.box {
  width: 100px;
  height: 200px;
}

/* 经过postcss-pxtorem插件编译后自动转换成rem */
.box {
  width: 1.33333333rem;
  height: 2.66666667rem;
}

/* 配置postcss-pxtorem插件 */
module.exports = {
  plugins: {
    'postcss-pxtorem': {
      rootValue: 75, // 设计稿宽度的1/10
      propList: ['*'],
      exclude: /node_modules/i
    }
  }
}

3. lib-flexible库

lib-flexible是一款由阿里巴巴团队开发的移动端rem适配库,可以根据设备的屏幕尺寸动态设置rem基准值,并且支持手淘、支付宝等多个国内知名移动应用。在使用lib-flexible时,我们只需要在页面html中引入flexible.js库即可。示例代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="/path/to/flexible.js"></script>
</head>
<body>
  <!-- 页面内容 -->
</body>
</html>

总结

通过以上3种rem适配的封装方式,我们可以很方便地实现移动端的适配。其中原生js封装适用于不需要引入插件的简单项目;postcss-pxtorem插件适用于需要使用postcss进行预处理的项目;lib-flexible库适用于对移动端适配有更高需求的项目。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于rem适配的3种常用封装 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Vue 3.0双向绑定原理的实现方法

    Vue 3.0中的双向数据绑定是通过数据响应式系统实现的,下面我们将详细讲解Vue 3.0双向绑定原理的实现方法。 数据响应式系统的基本原理 Vue 3.0中的响应式系统依赖于ES6的Proxy对象,通过对数据进行代理,实现数据的监听和数据更新时的通知。 当我们在模板中使用数据时,Vue 3.0会对这些数据进行代理,并且将这些数据与一个虚拟节点VNode进行…

    other 2023年6月26日
    00
  • 易语言创建EXCEL对象的方法

    易语言创建EXCEL对象的方法 以下是使用易语言创建EXCEL对象的完整攻略: 导入ExcelCOM模块:在易语言的开发环境中,首先需要导入ExcelCOM模块,以便使用Excel相关的功能。 创建Excel对象:使用ExcelCOM模块提供的函数,创建一个Excel对象。 vb ExcelObj = ExcelCOM_CreateExcelObj() 打开…

    other 2023年10月15日
    00
  • iOS12.3测试版新特性与升降级方法 iOS12.3 beta1更新内容

    iOS 12.3测试版新特性与升降级方法 iOS 12.3测试版是苹果公司发布的最新测试版本,其中包含了一些新的特性和改进。本攻略将详细介绍iOS 12.3测试版的新特性,并提供升级和降级的方法。 iOS 12.3测试版新特性 以下是iOS 12.3测试版的一些新特性和改进: Apple TV App 更新:iOS 12.3测试版引入了全新的Apple TV…

    other 2023年8月3日
    00
  • 电脑鼠标右键找不到新建Word/Excel/ppt怎么办?

    电脑鼠标右键找不到新建Word/Excel/PPT怎么办? 有时候我们在处理文件时,需要右键新建一个Word、Excel或PPT,但是鼠标右键却找不到新建选项,这时候该怎么办呢? 下面给出两种解决方法。 方法一:检查注册表 按下Win+R键,输入regedit,运行注册表。 找到路径HKEY_CLASSES_ROOT\.docx\Word.Document.…

    other 2023年6月27日
    00
  • PostgreSQL树形结构的递归查询示例

    下面我将详细讲解如何实现PostgreSQL树形结构的递归查询。 创建样例数据表 首先,我们需要创建一个样例数据表来演示如何进行递归查询。表结构如下: CREATE TABLE category( id SERIAL PRIMARY KEY, name TEXT NOT NULL, parent_id INTEGER REFERENCES category(…

    other 2023年6月27日
    00
  • PHP命名空间与自动加载机制的基础介绍

    PHP命名空间与自动加载机制的基础介绍 1. 什么是命名空间? 命名空间(Namespace)是 PHP5 中引入的一种组织代码的方式,通过在代码中使用命名空间,可以避免命名冲突,并提高代码的可读性和可维护性。 使用命名空间可以将相关的类、接口、函数等放在同一个命名空间下,使其成为一个逻辑上的独立单元。不同命名空间下的相同名称的类、接口、函数不会发生冲突。 …

    other 2023年6月28日
    00
  • java中用正则表达式截取字符串中

    Java中用正则表达式截取字符串中 在Java中,字符串是不可变的,意味着一旦创建,就无法更改。因此,当我们需要截取字符串中的一部分时,必须创建一个新的字符串来保存截取的部分。这时正则表达式是非常有用的工具。 正则表达式入门 正则表达式可以用来描述匹配某种模式的字符串。下面是一些基本的正则表达式元字符: . 匹配任何一个字符 * 匹配零个或多个前面的元字符 …

    其他 2023年3月28日
    00
  • SpringBoot @ConfigurationProperties使用详解

    SpringBoot @ConfigurationProperties使用详解 在Spring Boot中,@ConfigurationProperties注解是一个非常有用的注解,它可以帮助我们将配置文件中的属性值绑定到Java对象上。这样,我们就可以方便地通过Java对象来获取配置文件中的属性值,而不需要手动解析配置文件。 1. 创建配置类 首先,我们需…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部