您现在的位置是:网站首页> 编程资料编程资料
详解如何在css3打包后自动追加前缀插件:autoprefixer css3中transform属性实现的4种功能详解CSS3.0(Cascading Style Sheet) 层叠级联样式表纯CSS3实现div按照顺序出入效果CSS3实现列表无限滚动/轮播效果css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效CSS3实现的侧滑菜单CSS3实现的3D隧道效果用CSS3画一个爱心css3 实现文字闪烁效果的三种方式示例代码六种css3实现的边框过渡效果
2021-09-04
891人已围观
简介 这篇文章主要介绍了详解如何在css3打包后自动追加前缀插件:autoprefixer的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
用vue-cli构建的项目脚手架已经帮你把autoprefixer的配置做好了,自己不需要做什么改动就会自动加前缀:

下面一起看看涉及到autoprefixer这个插件的一些配置:
1,postcss配置写在.postcssrc.js,

2,浏览器规则则写在package.json上,

3,开发环境(build/webpack.dev.conf.js)样式相关的loader

4,生产环境(build/webpack.prod.conf.js)样式相关的loader

上述的配置设置不需要自己配置,cli脚手架环境搭建的时候已经配置好了。
vue-cli的开发环境和生产环境都是使用了postcss的,并且配置是一样的
这里有一个问题,网上有博主说项目打包前和打包后的css前缀不一致:
--给app.vue下的img添加样式
img{ display: flex; transform: translateX(200px) }--打包前(即开发环境)img的样式

--打包后(即生产环境)img的样式

根据上面可看出打包前和打包后元素所带的css前缀不一致了。
然后给出的解决方案:
从上面可以看出,vue-cli的开发环境和生产环境都是使用了postcss的,并且配置是一样的,那么为什么打包前和打包后元素所带的css前缀不一致呢,
锁定问题
我们可以分析对比下build/webpack.dev.conf.js和build/webpack.prod.conf.js这两个文件,影响css的无非就module里处理样式的loader和处理css的插件plugin,从上面可以看出影响前缀的postcss的loader在两个环节中是一致的,那么就可以知道问题出在处理css的插件上了。
经过排查发现,webpack.prod.conf.js配置里是多了两个css处理插件的,如下

ExtractTextPlugin这是提取分离css文件,不会影响css前缀,排除,那么问题就锁定到OptimizeCSSPlugin插件身上。再进一步,当我们把OptimizeCSSPlugin插件注释掉,然后打包测试,居然发现这时开发环境和生产环境的css前缀一致了,就是它了!!!
我们打开到npm官网搜一下这家伙
https://www.npmjs.com/package/optimize-css-assets-webpack-plugin
这是一个优化压缩css代码的插件,但很失望,文档说明很少
但我们注意到有一句话很关键:

这货里面依赖了cssnano,这插件也是用来优化处理css格式、前缀什么的。同时也有个autoprefixer配置参数,直接到它官网 https://cssnano.co/ 找到autoprefixer:

这里的翻译是:根据browsers选项删除不必要的前缀。请注意,默认情况下,它不会向CSS文件添加新前缀,这就可以解析清除我们的问题了,原来这插件的autoprefixer(默认应该是为true)把它认为不必要的前缀删掉了,而postcss的autoprefixer是将我们设定的浏览器范围的前缀加上,因此完美冲突了
解决问题
在build/webpack.prod.conf.js文件中OptimizeCSSPlugin插件的属性cssProcessorOptions加上autoprefixer:false来禁用它,避免冲突

上代码:
new OptimizeCSSPlugin({ cssProcessorOptions: config.build.productionSourceMap ? { safe: true, map: false,autoprefixer:false } : { safe: true, autoprefixer: false} }),结论
最后,看看我们dev和build出来的css前缀,应该就一致的了:
问题原因就是:OptimizeCSSPlugin里面依赖了cssnano,而cssnano里面也有一个autoprefixer配置参数,它的作用是删除不必要的前缀(会误删在某些浏览器必要的前缀),这与postcss的autoprefixer效果冲突了,因此禁用它。现在打包出来的与我们设定的浏览器范围对应的前缀一致
按照网上的博主的配置确实可以把开发环境和测试环境的前缀一模一样,但是看了下没有必要,问题的前提不是前缀不一致,那个配置只是把和当前浏览器不匹配的前缀不显示出来而已,样式还都是生效的,个人觉得如果不是特别大的问题不用改配置。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- 详解css BEM书写规范 CSS使用BEM命名规范实践CSS样式书写顺序和命名规范及注意事项值得收藏的CSS命名规范(规则)常用的CSS命名规则 好的 CSS 命名规范可以节约 Debug 时间css 命名:BEM, scoped css, css modules 与 css-in-js详解CSS规范BEM CSS和OOCSS的示例代码详解从QQtabBar看css命名规范BEM的详细介绍
- css如何绘制特殊图形的方法示例
- CSS 同级元素浮动分析小结纯css3绘制的卡通皮卡丘随着气球漂浮动画特效源码css 如何清除浮动的示例代码浅谈CSS浮动的特性CSS3 清除浮动的方法示例深入理解css布局之定位与浮动CSS清除浮动float的三种方法小结浅谈css中浮动和清除浮动带来的影响轻松搞懂CSS浮动与清除浮动图文详解
- 使用css实现圆形波浪效果图 纯CSS实现波浪移动效果的示例纯css3制作鼠标悬停波浪形状弹性下拉菜单特效源码css3实现逼真的波浪起伏动画特效源码CSS3实现的波浪闪动文字动画特效源码纯css3实现的音阶波浪loading加载动画特效源码CSS3实现文字波浪线效果示例代码纯css3实现的文字波浪动画特效源码纯CSS3实现波浪形菜单效果源码纯CSS3实现3D波浪形动画有波浪起伏的效果
- CSS Sticky Footer实现代码CSS Sticky Footer 几种实现方式CSS实现Sticky Footer的示例代码详解CSS经典布局之Sticky footer布局详解Sticky Footer 绝对底部的两种套路 css sticky footer经典布局的实现
- css实现两栏固定中间自适应的方法css实现元素居中的N种方法div水平布局两边对齐的三种实现方法waterfall瀑布流布局+动态渲染的实现页面中有间隔的方格布局如何完美实现方法css实现六种自适应两栏布局方式使用flex布局轻松实现页面布局的示例代码使用Flex布局实现头部固定内容区域滚动的方法详解flex布局下图片变形的解决方法详解flex布局与position:absolute/fixed的冲突问题Flex布局实现div内部子元素垂直居中的示例
- 关于css中line-height(行高)设置无效的问题的解决方法深入理解CSS行高line-height与文本垂直居中的原理全面了解css行高line-height的用法CSS中的line-height行高属性学习教程CSS中的line-height行高属性的使用技巧小结CSS中行高line-height属性的一些使用技巧css属性行高line-height的用法详解CSS行高line-height的个人理解CSS line-height行高上下居中垂直居中样式属性
- css制作tips提示框,气泡框,制作三角形的实现纯CSS实现气泡对话框尖角处理方案CSS3制作气泡对话框的实例教程可自定义箭头样式的CSS3气泡提示框纯CSS实现聊天框小尖角、气泡效果纯CSS实现箭头、气泡让提示功能具有三角形图标html5 css3 动态气泡按钮实例演示
- css实现一个元素高度固定宽度按比例显示效果CSS控制div宽度最大宽度/高度和最小宽度/高度的方法不固定宽度和高度的情况下CSS调整div居中的方法总结CSS设置HTML元素的高度与宽度的各种情况总结兼容IE6的网页最小最大宽度和最小最大高度css写法CSS的最大高度、最小高度及宽度在IE6下没有效果问题CSS控制页面最大最小宽度和高度可兼容IE6版本的实现方法CSS min-height IE6、IE7、FF下DIV自适应高度CSS IE6奇数宽度或高度的bug
- 详解如何自定义CSS滚动条的样式纯css修改浏览器scrollbar滚动条样式示例CSS 设置滚动条样式的实例代码详解css3自定义滚动条样式写法CSS3自定义滚动条样式的示例代码纯CSS改变webkit内核浏览器的滚动条样式CSS样式设置div滚动条示例代码
