关于一个小菜鸡是如何通过自定义 postcss 插件解决 color-mix 兼容问题的

关于一个小菜鸡是如何通过自定义 postcss 插件解决 color-mix 兼容问题的

最近客户反映他们电脑上的颜色展示不正常,经过排查之后发现是引用的第三方组件中,css包含 color-mix 函数。

can i use 上面搜索了一下,刚好客户机器 chrome 是 102 版本的。不支持 color-mix

1. 使用第三方插件 @csstools/postcss-color-mix-function

于是我首先搜索了下 postcss 相关兼容插件,找到了这个 @csstools/postcss-color-mix-function 插件。

www.npmjs.com/package/pos...

但是应用上去并不能生效。估计是因为需要转换的 css 像下面这样

scss 复制代码
color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)

但是好像不兼容 isrgb 这种类型

2. 自定义 postcss 插件

这个插件主要就是通过计算,把 color-mix 计算成为定值,然后应用上去以兼容老版本。

由于不想弄得太复杂精细,这里准备直接抽取其中变量作为css定值,不再考虑透明度的情况。 也就是

css 复制代码
color: color-mix(in srgb, var(--p-primary-color) calc(100% * 1), transparent)
转换为
color: var(--p-primary-color);

如果是这样那就简单多了。只需要通过正则提取出 color-mix 中的 var 变量就完成了。

ini 复制代码
export default (options = {}) => {
   return {
       postcssPlugin: 'color-mix',
       Declaration(decl) {
           // 跳过已处理过的节点
           if (decl.processed) return;

           const originalValue = decl.value;
           
           // 判断是否是 color-mix
           if (originalValue.indexOf('color-mix') < 0) {
               return;
           }

           console.log(`处理css: ${originalValue}`);

           const result =  replaceColorMix(originalValue)
           console.log(result)
           // 标记为已处理并替换
           decl.value = result;
           decl.processed = true;

       }
   };
};

// 提取出var变量替换
function replaceColorMix(cssCode) {
   const regex = /var(--[\w-]+)/;
   const match = cssCode.match(regex);
   if (match) {
       return match[0]
   } else {
       return cssCode
   }
}

export const postcss = true;

这样就直接兼容了之前浏览器了

相关推荐
Doris8936 分钟前
【 Vue】 Vue3全面讲解文档
前端·javascript·vue.js
Hexene...16 分钟前
【前端Vue】如何快速直观地查看引入的前端依赖?名称版本、仓库地址、开源协议、作者、依赖介绍、关系树...(Node Modules Inspector)
前端·javascript·vue.js
fanruitian18 分钟前
div水平垂直居中
前端·javascript·html
旭久21 分钟前
react+antd实现一个支持多种类型及可新增编辑搜索的下拉框
前端·javascript·react.js
aesthetician31 分钟前
Spotify 网页版前端技术全面解析
前端
咩图32 分钟前
Sketchup软件二次开发+Ruby+VisualStudioCode
java·前端·ruby
Можно44 分钟前
从零开始:Vue 框架安装全指南
前端·javascript·vue.js
蜗牛攻城狮1 小时前
CSS中的 `dvh` 与 `vh`: 深入理解视口单位
前端·css
啥都不懂的小小白1 小时前
Shell脚本编程入门:从零基础到实战掌握
前端·shell
东东5162 小时前
校园短期闲置资源置换平台 ssm+vue
java·前端·javascript·vue.js·毕业设计·毕设