使用postcss-pxtorem插件实现px转换rem

news2024/12/23 19:04:07

1.下载postcss-pxtorem(其他插件按需下载自行配置)并在package.json同级目录下新建postcss.config.js文件:

export const defaultHtmlFontSize = 37.5
export default {
  plugins: {
    autoprefixer: {
      overrideBrowserslist: ['Android >= 4.0', 'iOS >= 7'],
    },
    'postcss-pxtorem': {
      // 根节点的 fontSize 值
      rootValue: defaultHtmlFontSize,
      propList: ['*'],
      selectorBlackList: [':root'],
    },
  },
}

2.在utils目录下新建rem.ts文件

import {defaultHtmlFontSize} from '../../postcss.config'

// 设置 rem 函数
export const setRem = () => {
    // 375 默认字体大小37.5px; 375px = 120rem ;每个元素px基础上/37.5
    const designScreenWidth = 375;
    
    const scale = designScreenWidth / defaultHtmlFontSize
    const htmlWidth = document.documentElement.clientWidth || document.body.clientWidth
    // 得到html的Dom元素
    const htmlDom = document.getElementsByTagName('html')[0]
    // 设置根元素字体大小
    htmlDom.style.fontSize = htmlWidth / scale + 'px'
  }

export const initRem = () => {
    // 初始化
    setRem()
    // 改变窗口大小时重新设置 rem
    window.onresize = function() {
        setRem()
    }
}

3.在main.ts文件调用initRem方法:

import { createApp } from 'vue'
import {createPinia} from 'pinia'
import App from './App.vue'
import router from './router'
import { initRem } from './utils/rem'

const app = createApp(App)
app.use(createPinia());
app.use(router)


// const rootValue = 37.5
// const rootWidth = 375
// const deviceWidth = document.documentElement.clientWidth; // 用户的设备屏幕宽度
// document.documentElement.style.fontSize = (deviceWidth * rootValue / rootWidth) + 'px';
initRem();

app.mount('#app')

设计图要使用375px宽度的,然后直接写px就行了,如果是750的设计图,就/2之后的值,比如border在750的设计图是2px的,在代码中就要写成1px

使用示例:

<style lang="scss" scoped>
.home-top {
    background: linear-gradient(to right, rgb(53, 200, 250), rgb(31, 175, 243));
    color: white;

    .top {
        display: flex;
        align-items: center;
        padding: 10px 10px 0 10px;
        line-height: 15px;
        font-size: 15px;
        font-weight: bold;
    }
}
</style>

按照上面的公式, 375宽度的html的字体大小是37.5px; top类为15px的font-size转换为rem的就是15 / 37.5 = 0.4rem

750宽度的html的字体大小是75px,top类为15px的font-size转换为rem的还是15 / 37.5 = 0.4rem

为什么750px宽度的屏幕的rem值没有变化呢?

(1) rem是相对单位;

rem单位是相对于HTML标签的字号计算结果;[网页的根标签是:html标签;html字号也叫根字号,根标签字号。]

1rem = 1HTML字号大小。

(2) px转rem计算:

rem(css属性) = px(css属性) / px(html或者body[优先找html]的fontSize);

反过来rem转化为px就是:

px(css属性) = rem的数值 * html的fontSize数值;

如果html标签的font-size是16px,那么1rem就是16px, 而0.4rem就是0.4*16 = 6.4px。

如果html标签的font-size是20px,那么1rem就是16px, 而0.4rem就是0.4*20 = 8px。

如果html标签的font-size是37.5px,那么1rem就是37.5px, 而0.4rem就是0.4*37.5 = 15px。

如果html标签的font-size是75px,那么1rem就是75px, 而0.4rem就是0.4*75 = 30px。

从计算可知: 750px是375px的2倍,所以计算结果是无误的.

虽然是vue3项目的示例,但原理都差不多, react项目根据它的代码要求改改应该就能用了.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tensorrt获取输入输出

利用Netron打开onnx&#xff0c;右边名字&#xff1a; int input_index engine->getBindingIndex("inout1.1");int output_index engine->getBindingIndex("191");

NSSCTF做题

[第五空间 2021]WebFTP 打开题目 发现是登录的界面 用admin和password试一下发现不行 用dirsearch扫一下 发现了git泄露 但是用githack下载不下来文件 去网上查了一下webftp 发现是一个在线php文件管理系统 WebFTP——在线FTP工具:强大的PHP在线文件管理系统-時日 在这篇博客…

CentOS7平台命令安装Anaconda3、配置Python3开发环境

要在 CentOS 7 上安装 Anaconda3&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1. 下载 Anaconda3 安装包&#xff1a; 首先&#xff0c;访问 Anaconda 官方网站以获取最新版本的 Anaconda3 安装包的下载链接。可以使用 wget 命令来下载安装包。请确保选择适用于 Cent…

数字IC设计系列----单端口RAM、双端口RAM

一、单端口RAM原理及实现 1.1、概念/原理 在内存空间中开辟出一段固定大小的内存用于存储数据&#xff0c;每一个数据所占的bit位称之为位宽&#xff0c;这段内存空间中数据的总数称之为深度。例如reg [7:0] mem [255:0]&#xff0c;这段内存空间中每一个数据的位宽为8bit&am…

postgresql用户和角色

postgresql用户和角色 简述创建角色角色属性登录特权超级用户创建数据库创建角色启动复制密码修改角色属性 对象授权撤销授权组和成员删除角色 简述 PostgreSQL 通过角色的概念来控制数据库的访问权限。角色又包含了两种概念&#xff0c;具有登录 权限的角色称为用户&#xff…

Nature Communications | 张阳实验室:端到端深度学习实现高精度RNA结构预测

RNA分子是基因转录的主要执行者&#xff0c;也是细胞运作的隐形功臣。它们在基因表达调控、支架构建以及催化活性等多个生命过程中都扮演着关键角色。虽然RNA如此重要&#xff0c;但由于实验数据的缺乏&#xff0c;准确预测RNA 的三维空间结构仍然是目前计算生物学面临的重大挑…

Flink 内存模型

Jobmanage内存模型 1G 1C 的配置 上图不够直观,用户大脑无法第一反应出内存构成。 Total Process Memory = JVM堆内存 + JVM堆外内存(堆外内存+ JVM元空间 +JVM自身运行内存) Total Flink Memory = JVM堆内存 + 堆外内存 参数控制: Total Process Memory 对应 jobmanag…

2023 “华为杯” 中国研究生数学建模竞赛(C题)深度剖析|数学建模完整代码+建模过程全解全析

华为杯数学建模C题 当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2021年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看研赛的C题呀~&#xff01; 问…

二十四、MySQL事务操作演示

1、事务 &#xff08;1&#xff09;事务简介&#xff1a; &#xff08;2&#xff09;实际操作方式&#xff1a; 在执行MySQL语句时&#xff0c;系统默认自动提交&#xff0c;但是语句一旦出现报错&#xff0c;就可能导致数据出现大规模错误&#xff0c;所以我们要做的就是&…

牛客网解题之跳台阶

10.3 跳台阶 题目链接 牛客网 题目描述 一只青蛙一次可以跳上 1 级台阶&#xff0c;也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 解题思路 当 n 1 时&#xff0c;只有一种跳法&#xff1a; 当 n 2 时&#xff0c;有两种跳法&#xff1a; 跳 n 阶台…

【强化学习】03 ——马尔可夫决策过程

文章目录 1. 马尔科夫决策过程(Markov Decision Process&#xff0c;MDP)1.1. 马尔科夫性质1.2. 状态转移矩阵1.3. 马尔可夫过程1.3.1. 一个简单的例子 2. 马尔可夫奖励过程2.1. 回报2.2. 价值函数 3. 马尔科夫决策过程3.1. MDP五元组3.2. 策略3.3. 价值函数3.3.1. 状态价值函数…

MYSQL——命令大全

1.创建数据库&#xff1a; CREAT E DATABASE [IF NOT EXISTS] DATABASE_NAME; 2.查看数据库&#xff1a; SHOW DATABASES; 3.进入数据库 USE DATABASE_NAME; 4.指定字符集&#xff08;character&#xff09;和校对规则&#xff08;collation&#xff09;创建数据库 CREA…

Spring面试题18:Spring中可以注入一个null和一个空字符串吗?Spring中如何注入一个java集合?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring中可以注入一个null和一个空字符串吗? 在Spring中是可以注入null和空字符串的。 注入null:可以使用@Value注解,将属性值设为null。例如:…

ChatGPT可以取代搜索引擎吗?

ChatGPT对于一些简单的问题&#xff0c;可以完美的完成任务。但是我让它写一篇完整的文章&#xff0c;看看它能否代替我进行写作地的时候&#xff0c;我确定它不能完全取代人类。 但是我们可以使用更多的指导来让AI在日常工作流程为我们工作&#xff0c;所以本文将讨论如何有效…

Spimes x5.0主题模板全开源源码

Spimes主题为博客、自媒体、资讯类的网站设计开发&#xff0c;自适应兼容手机、平板设备的团队&#xff0c;工作室门户主题&#xff0c;精心打磨的一处处细节。只为让您的站点拥有速度与优雅兼具的极致体验。小灯泡自媒体博客免授权 安装教程&#xff1a; 1.模板目录usr/them…

[管理与领导-102]:经营与管理的关系:攻守关系;武将文官关系;开疆拓土与守护城池的关系;战斗与练兵的关系;水涨船高,水落船低的关系。

目录 前言&#xff1a; 一、手中拿着锤子,一切看起来都像钉子 1.1 企业经营中过渡强调管理的表现&#xff1f; 1.2 企业经营中过渡强调管理的误区&#xff08;背后深层次的原因&#xff09; 二、无知者的无畏&#xff0c;独断者的自high 2.1 企业经营中过度忽律管理的表…

5个顶级的Blender生成式AI插件

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 Blender 以其强大的 3D 建模和动画工具而闻名。 但你知道它也可以用来制作令人难以置信的纹理和背景吗&#xff1f; 当然&#xff0c;使用正确的插件。 在本文中&#xff0c;我们将了解 Blender 的顶级 AI 插件。 这些插…

普通卷积、转置卷积详细介绍以及用法

转置卷积&#xff08;普通卷积、转置卷积详细介绍以及用法 1、普通卷积操作2、转置卷积2.1 Pytorch转置卷积实验 1、普通卷积操作 首先回顾下普通卷积&#xff0c;下图以stride1&#xff0c;padding0&#xff0c;kernel_size3为例&#xff0c;假设输入特征图大小是4x4的&#…

Kotlin只截取Float小数点后数值DecimalFormat

Kotlin只截取Float小数点后数值DecimalFormat import java.text.DecimalFormatfun main(args: Array<String>) {val pi 3.141516Fvar p pi - pi.toInt()println(p)val decimalFormat DecimalFormat("00.0000")val format decimalFormat.format(p)println(…

ajax method to retrieve images as a blob

go 服务端&#xff1a; 就是先把这个图片读出来 然后返回二进制的数据 byteFile, err : ioutil.ReadFile("." "/processed/" uuidStr"processed.png")if err ! nil {fmt.Println(err)}c.Header("Content-Disposition", "att…