解决 webpack 打包时 optimize-css-assets-webpack-plugin 插件会重新计算 z-index 的问题

195 阅读1分钟

背景:

业务场景中,webpack + React 搭建的新 webportal 工程,Header 要单独打包出来,供老工程的应用使用,打包完成应用于其他应用后,自测发现 header 中的一个菜单,被应用中的一个 z-index:40 的元素遮盖了,源码中,header 中这个菜单的 z-index 层级为 500, 而 在浏览器调试时看 z-index 的值 却是 9,所以才会被应用中的元素遮盖

image.png

原因:

排除所有影响因素后,发现是 webpack 打包时 optimize-css-assets-webpack-plugin 插件,调用 cssProcessor cssnano 对 z-index 重新计算了,所以打包出来的 z-index 值,是重新计算后的值,而不是原来的值了

原 webpack 配置


// 只贴出相关联的配置

const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); 

... 

plugins: [

    isEnvProduction && new OptimizeCSSAssetsPlugin({})

]

解决办法:

在 webpack 配置中 关掉 cssnano 对 z-index 的计算


// 只贴出相关联的配置

const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); 

... 

plugins: [

    isEnvProduction && new OptimizeCSSAssetsPlugin({ 

        cssProcessor: require('cssnano'),

        cssProcessorOptions: {

            discardComments: { removeAll: true },

            // 避免 cssnano 重新计算 z-index

            safe: true

        },

        canPrint: false

    })

]

那么 问题就解决啦

参考资料:cloud.tencent.com/developer/a…