自定义 CSS 单位的利器

2023-10-31

前文

很多时候我们很想要一个能够自定义 CSS 单位的东西,比如下面这种情况

UI 妹子给的图总是 px 单位的,但是我们做移动端的时候很多时候是想要 rem 的,这时候我们会手动计算从 px 到 rem。
假如你计算的是 rem = px / 100,通常情况下,可能我们每次都需要从 UI 稿除以 100 写在代码里面。比如UI 稿给的是 1.5px 那我们需要在代码里写上0.015rem

现有的插件

这样十分的不优雅。但是现在到处都是一些单位换算工具,比如 vscode 就有一些单位换算工具,它能够在你编辑代码的时候约束你,帮你自动计算,它依赖于 VSCode 的 language service,缺点很明显了,一旦你脱离了 VSCode,啥也没了。

除此之外,现在还有很多类似 px 2 remrem 2 vw 等等这样的插件,这种插件存在的问题是,存在单位的限制,它只能从 xx 到 xx 的转换,第二个严重的问题是存在对原有单位的污染,如果使用了 px 2 rem ,那么你的整个应用中都不能使用 px 了,因为 px 都会被转成 rem,这样的问题是很大的,很多时候用户会使用 平板 来访问你的应用,如果整个应用都是 rem,那好了,多大的平板就有多大的字,这是不对的,用户用更大的移动设备是想看到更多的内容而不是更大的字,因此多单位共存是很重要的。

Postcss-Relaxed-Unit

这是今天的主角了。它的作用很单纯,就是自定义单位到目标单位的计算输出。

e.g.

postcss: {
      plugins: {
        'postcss-relaxed-unit': {
          rules: { px: 'div(100).unit(rem)' },
        },
      },
    },

上面这段配置表示整个项目中的 px 都等于当前值除以 100 过后的 rem,但是上面说过了不要做单位污染,因此,很多时候我们都是自己声明一个新的单位。
比如我们要一个新的单位名字叫 rx,我想让它等于 100px + 20px 的值,那么我们只需要这样配置

postcss: {
      plugins: {
        'postcss-relaxed-unit': {
          rules: { rx: 'div(100).add(20).unit(px)' },
        },
      },
    },

原 CSS

.hello {
	height: 100rx;
}

转换后

.hello {
	height: 21px; /** 100 / 100 + 20 */
}

divaddunit 都是 relaxed-unit 提供的操作符,除此之外还有其他的操作符,详细看 这里

div 表示除以,add 表示相加运算,unit是最终输出的方法,如果不使用 unit 那么它将按原单位输出。

多单位的配置

可能发现了 relaxed-unitrules 是个对象,因此可以传递多个单位映射关系

postcss: {
      plugins: {
        'postcss-relaxed-unit': {
          rules: { 
          	rx: 'div(100).add(20).unit(px)',
          	ex: 'add(10).sub(20).mul(30).unit(rem)'
          },
        },
      },
    },

原 CSS

.hello {
	height: 100rx;
	width: 20ex;
}

转换后

.hello {
	height: 21px;
	width: 300rem;
}

文档

更多的文档说明看 Github
https://github.com/youncccat/postcss-relaxed-unit

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义 CSS 单位的利器 的相关文章

随机推荐

  • 软件设计师--软件工程

    软件工程 CMM 真题 CMMI 真题 软件工程模型 瀑布模型 V模型 真题 增量模型 真题 演化模型 原型模型 真题 螺旋模型 真题 喷泉模型 真题 统一过程 UP 模型 真题 敏捷方法 真题 软件需求 真题 系统设计 概要设计 详细设计
  • 使用Atmel Studio开发Arduino的ATmega328P单片机

    摘要 我们知道Arduino开发板常用的芯片是Atmel公司生产的AVR微控制器系列 最常见的是ATmega328P 被广泛用于Arduino Uno开发板 其他常用的AVR芯片包括ATmega2560和ATmega32U4 使用Ardui
  • 设计模式的 C++ 实现---观察者模式

    前文回顾 单例模式 一 单例模式 二 前言 当一个对象的状态发生改变时会影响到其他一系列对象的状态或者行为发生变化 希望这一过程可以自动且实时实现时 可以采用观察者模式 实现举例 场景描述 假设一个简单的游戏场景 游戏中有英雄 宠物 怪物
  • switch语句和while循环

    switch语句和while循环 switch语句 break的用法 default的用法 switch语句中的case和default的顺序问题 while语句 while语句的执行流程 while语句的具体例子 switch语句 swi
  • Windows下,让不同程序使用不同网卡

    Windows下 让不同程序使用不同网卡 Windows下 让不同程序使用不同网卡 问题提出 问题解决 1 查看本地IP状态 2 查看bilibili网络连接状态 3 修改路由表 缺陷 updated 2020 03 16 Windows下
  • 外链接 内链接 无链接

    编写多文件的程序时 编译器对于每个有名字的变量和函数都有链接模式的区别 分别是外链接 external 内链接 internal 无链接 noneternal 具体使用如下 A c include C h extern temp b 外链接
  • CMAKE_CUDA_ARCHITECTURES如何设置

    CMAKE CUDA ARCHITECTURES可以通过指定一个由逗号分隔的编译器支持的架构列表来设置 例如 要指定支持的架构 可以使用以下表达式 DCMAKE CUDA ARCHITECTURES 5 5 5 3 3 5 2 1
  • 免费开源iPhone推送消息工具+服务端-Bark

    什么是Bark Bark 是一款纯推送提醒服务 主要用来给自己的 iPhone 发送自定义内容的推送 可以是文字 链接 不提供历史记录功能 阅后即焚 服务端和客户端均开源 实时性和稳定性都非常可靠 支持自定义请求 自行部署服务器 push
  • 关于styleclip的踩坑(1)global direction中的fs3.npy的生成

    随心情填坑 0 背景 因为公司项目有个需求需要用到styleclip 所以就去了解了一下 这项技术就是可以通过clip输入文字 对生成的图片产生一定影响 从而生成符合描述的图片 或者 描述为图像编辑 将一张苦瓜脸变为笑脸 我这边的项目需要将
  • Python列表切片详解([][:][::])

    Python切片是list的一项基本的功能 最近看到了一个程序 里面有这样一句类似的代码 a list 10 不太明白两个冒号的意思就上网百度 发现大多数人写的博客中都没有提到这一个用法 因此自己翻阅 Python核心编程中文版 第二版 教
  • 使用Qt构建osgQt静态库在osg3.6.4中使用(附osgQt源码下载地址)

    osgQt库在osg3 4以后就给取消了 现在一般使用osgQOpenGL库替代 但是网上能搜到的教程里 常见的使用方法 还是以osgQt居多 因此 逼得我只能自己去编译一套osgQt的库文件 有如下几个注意点 首先是下载osgQt的地址
  • GPS经纬度换算成XY坐标

  • git error: src refspec dev does not match any

    背景 我是先在本地垒代码的 因为我是developer角色 所以没有权限把代码直接上传到公司的group下 只能暂时上传到自己的个人group下 所以才有了后面的从已有git资源转移到公司git资源的操作 操作过程 以下是具体的操作步骤 c
  • 计算机网络五层模型之网络层(2)

    接着上一讲 一 网络层 划分子网和构造超网 划分子网 从两级 IP 地址到三级 IP 地址 划分子网的方法是从网络的主机号借用若干位作为子网号 当然主机号也就相应减少了同样的位数 于是两级 IP 地址就变成三级 IP 地址 网络号 子网号和
  • FISCO BCOS(十)——— FISCO BCOS的离线安装

    前提 需要安装jdk1 8 教程传送门 https blog csdn net weixin 46457946 article details 123243513 1 需要在github上下载如下压缩包和脚本 2 将压缩包和脚本上传至终端
  • 解决“ACCESS_MASK不明确”错误

    目录 一 原因 二 解决方法 三 参考链接 一 原因 1 造成 ACCESS MASK不明确 错误的头文件 include dcmtk dcmdata dctk h include dcmtk dcmimgle dcmimage h inc
  • Python学习-Leetcode刷题记5:最长公共前缀

    Python学习 Leetcode刷题记5 最长公共前缀 一 问题 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 说明 所有输入只包含小写字母 a z 二 示例 示例 1 输入 flower flow fl
  • 一、初识java(1.3/1.5/1.6 )

    1 3 第一个JAVA程序 1 建立一个文件路径为英文的空文件夹 新建一个文本文档 txt格式 2 文档内容如下 字体一定要是英文 注意大小写 3 将文件名改为Hellojava java 4 按win r键 输入cmd确定运行 5 进入H
  • 如何使 React 中的 useEffect、useLayoutEffect 只调用一次

    如何使 React 中的 useEffect useLayoutEffect 只调用一次 Hook 是 React 16 8 的新增特性 旨在替代原来 React 中的 Class 组件 React 官方已经对使用 Class 组件采取了负
  • 自定义 CSS 单位的利器

    前文 很多时候我们很想要一个能够自定义 CSS 单位的东西 比如下面这种情况 UI 妹子给的图总是 px 单位的 但是我们做移动端的时候很多时候是想要 rem 的 这时候我们会手动计算从 px 到 rem 假如你计算的是 rem px 10