浅谈PostCSS

1. 背景

  • css的预处理器语言(比如 sass, less, stylus)的扩展性不好,你可以使用它们已有的功能,但如果想做扩展就没那么容易。

  • sass是很常用的css预处理器语言,在webpack中要使用它,需要安装sass-loader,而sass-loader又依赖于node-sass。大家知道node-sass很庞大,安装极其缓慢,经常安装失败。而且node-sass各版本对于node版本有严格限制,经常造成为了安装某个node-sass版本而升级node版本的问题(在本地这没有问题,但在服务器上升级node可能牵连很大)。

  • vue项目,都安装了postcss(因为它是vue-loader的依赖项)。我们没必要再安装其它工具处理css。

2. 什么是PostCSS

  • 它是一个js库,能够将css转换成js。

  • 它将css转换成AST语法树(表现为js对象),然后借助各种plugins对转化后的js对象进行操作,最终转化回css。

  • 所以说postcss是不会影响css的,只有安装和配置plugin之后,才会影响css。

  • postcss可以看作是css的babel。

3. 如何在vue项目中使用和配置PostCSS

3.1 webpack中如何使用PostCSS

使用webpack的vue项目,都会安装vue-loader(它是一个webpack的loader,用来将vue sfc组件转换成js模块)。而vue-loader正是借助postcss实现scoped css的,因此安装了vue-loader就默认安装了postcss。当然默认它并不包含我们需要的特性,因此我们就要安装插件并配置。

关于安装何种插件,我们会在后面介绍几种常用的插件。

vue-loader可以自动加载以下3种postcss的配置文件

  1. postcss.config.js

  2. .postcssrc

  3. package.json 中的postcss字段

这里我们主要介绍第一种postcss.config.js,其格式如下

注意: 需要先安装插件

module.exports = {plugins: [['postcss-import', { path: ['src/css/'] }],'postcss-mixins','postcss-nested','postcss-color-mod-function',['postcss-cssnext', {warnForDuplicates: false,}],['cssnano', {sourcemap: false,autoprefixer: false,safe: true,discardComments: {removeAll: true,},discardUnused: false,zindex: false,}]]
};

对postcss的配置,可以查阅 GitHub - webpack-contrib/postcss-loader: PostCSS loader for webpack

3.2 rollup中如何使用PostCSS

rollup需要引入rollup-plugin-postcss,并在rollup.config.js配置postcss,样例如下

rollup-plugin-postcss的配置,参见官方文档

// rollup.config.js
import postcss from 'rollup-plugin-postcss'export default {plugins: [postcss({plugins: []})]
}

4. 常用PostCSS插件

postcss-import4.1 postcss-import:允许从其它 css 文件引入css。

注意:这个插件一般需要放在插件列表的第一位,这样才能保证其它的插件工作正常。

方式:

  • 引入时,指定路径,则从路径下查找

@import '../css/styles.css';
  • 配置中指定 path, 并直接引入文件名,此时会从path查找

// postcss.config.js
['postcss-import', { path: ['src/css/'] }] // 在postcss.config.js中,指定path
// 在文件中引入
@import 'styles.css'; // 会加载src/css/styles.css

4.2 : 允许mixin

注意: 如果和postcss-simple-vars或者postcss-nested同用,此插件必须放在postcss-simple-vars或者postcss-nested之前

4.3 :允许像scss那样定义变量

$dir:    top;
$blue:   #056ef0;
$column: 200px;.menu_link {background: $blue;width: $column;
}
.menu {width: calc(4 * $column);margin-$(dir): 10px;
}

4.4 :允许书写嵌套语法

// postcss.config.js
module.exports = {plugins: [['postcss-import', { path: ['src/css/'] }],'postcss-nested']
};

4.5 :用来压缩css

4.6 :在老旧浏览器上使用新的或者未来的css特性

该插件包含丰富的可选功能,可查看文档选择。这里主要用其控制自定义变量(custom variables),所以介绍如何配置以支持custom variables。

// 配置
module.exports = {plugins: [['postcss-import', { path: ['src/css/'] }],['postcss-preset-env', {stage: 2,// preserve 决定所有的插件是否接受preserve属性(保留(true)或者忽略(false)其它polyfilled css(css的兜底方案)),// 这里preserve: false很关键,否则,自定义变量不起效preserve: false, // feature详情可查看https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/FEATURES.md// 它里面有每个特性的文档和样例features: {'custom-selectors': true, // 自定义选择器'custom-properties': true, // 自定义变量},// importFrom 用来指定从哪里导入各类变量(比如 Custom Media, Custom Properties, Custom Selectors, Environment Variables)// 如果只引入单个文件,可以不用数组importFrom: ['./src/css/colorDef.css']}]]
};

引入变量时,不需要使用@import

<style lang="postcss" scoped>/* 变量--color-danger 是在 'src/css/colorDef.css'文件定义的, 但不用导入css文件 */.about {.about-details {color: var(--color-danger);width: 100px;}}
</style>

postcss-preset-env 可以配置多个特性,见特性列表

4.7 postcss-px-to-viewport

rem响应式布局的缺陷:必须通过js来动态控制根元素font-size的大小。

postcss-px-to-viewport 的配置项

{unitToConvert: "px", // 要转化的单位viewportWidth: 3024, // UI设计稿的宽度unitPrecision: 2, // 转换后的精度,即小数点位数propList: ["*"], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换viewportUnit: "vw", // 指定需要转换成的视窗单位,默认vwfontViewportUnit: "vw", // 指定字体需要转换成的视窗单位,默认vw// selectorBlackList: ["wrap"], // 指定不转换为视窗单位的类名,minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换// mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认falsereplace: true, // 是否转换后直接更换属性值// exclude: [/node_modules/], // 设置忽略文件,用正则做目录名匹配landscape: false // 是否处理横屏情况
}

5. 团队介绍

三翼鸟数字化技术平台-ToC服务平台」以用户行为数据为基础,利用推荐引擎为用户提供“千人千面”的个性化推荐服务,改善用户体验,持续提升核心业务指标。通过构建高效、智能的线上运营系统,全面整合数据资产,实现数据分析-人群圈选-用户触达-后效分析-策略优化的运营闭环,并提供可视化报表,一站式操作提升数字化运营效率。

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

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

相关文章

设计模式使用场景实现示例及优缺点(结构型模式——组合模式)

结构型模式 组合模式&#xff08;Composite Pattern&#xff09; 组合模式使得用户对单个对象和组合对象的使用具有一致性。 有时候又叫做部分-整体模式&#xff0c;它使我们树型结构的问题中&#xff0c;模糊了简单元素和复杂元素的概念&#xff0c;客户程序可以像处理简单元…

小米起诉“小米”商标侵权,索赔500万!

近日浙江丽水有家叫小米的公司&#xff0c;因为商标侵权被小米科技起诉索赔500万&#xff0c;需要变更企业名称&#xff0c;官网也不能用“小米智能大家居”等&#xff0c;还有其它的赔偿&#xff0c;普推知产商标老杨分析&#xff0c;“小米智能大家居”“小米”&#xff0c;后…

【Flask从入门到精通:第九课:数据库基本操作、数据表操作以及数据操作】

数据库操作 数据库驱动&#xff08;drivers&#xff09;模块&#xff1a;pymysql、MySQLDB 数据库基本操作 在SQLAlchemy中&#xff0c;添加、修改、删除操作&#xff0c;均由数据库会话(sessionSM)管理。 会话用 db.session 表示。在准备把数据写入数据库前&#xff0c;要先…

交易平台Zero Hash现已支持SUI交易

Zero Hash是一家领先的加密货币和稳定币基础设施平台&#xff0c;为包括Stripe、Shift4和Franklin Templeton在内的公司提供支持&#xff0c;现在也支持对SUI的访问。此举使Zero Hash的客户及其终端用户能够使用SUI。 提供API和SDK以及专注于无缝连接法币、加密货币和稳定币的…

读人工智能全传11人工智能会出什么错

1. 人工智能会出什么错 1.1. 一些报道是公正合理的&#xff0c;不过坦白地说&#xff0c;大部分报道都愚蠢得无可救药 1.2. 一些报道颇有知识性和引导性&#xff0c;而大部分则是杞人忧天式的恐吓 1.3. 滑稽的报道迎合了大众对人工智能的“终结者式恐惧” 1.3.1. 我们创造出…

html设计(两种常见的充电效果)

第一种 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

方便快捷传文件—搭建rsync文件传输服务器

比如我们有一个服务器&#xff0c;想把各个机器的文件都通过脚本传给这台机&#xff0c;用sftp或者直接rsync就必须输密码&#xff0c;肯定不行&#xff0c;做等效性免密又麻烦&#xff0c;怎么办呢&#xff0c;这么办&#xff01; 在服务端 yum -y install rsync #编辑&…

Vue3 关于scss预编译中:deep 其中的deep如何理解

在SCSS预处理器中&#xff0c;:deep是一个伪类选择器&#xff0c;用于选择一个元素的所有后代元素&#xff0c;无论它们在DOM结构中的层级深度如何。换句话说&#xff0c;:deep选择器是一个类似于CSS中的后代选择器&#xff0c;但是它可以不考虑嵌套层级的限制&#xff0c;而是…

Android MessageQueue 源码分析

类注释 /*** Low-level class holding the list of messages to be dispatched by a* {link Looper}. Messages are not added directly to a MessageQueue,* but rather through {link Handler} objects associated with the Looper.** <p>You can retrieve the Messa…

【FineGrip】全光学感知:一种新的通用遥感图像解释任务和细粒度数据集(IEEE TGRS 2024)

摘要 目前的遥感解译模型通常集中于单一的任务&#xff0c;如检测、分割或字幕。但是&#xff0c;针对特定任务设计的模型无法实现综合多层次解译。该领域也缺乏多任务联合解译数据集。本文提出Panoptic Perception&#xff0c;一个新的任务和一个新的细粒度数据集&#xff08…

apache Kylin系列介绍及配置

Apache Kylin是一个开源的分布式分析引擎,用于OLAP(联机分析处理)数据处理。它专门设计用于处理大规模的数据集,并提供快速的查询和分析能力。 apache Kylin架构: Apache Kylin是一个开源的分布式分析引擎,旨在提供高性能、低延迟的OLAP(联机分析处理)能力。下面是Ap…

nvim工具介绍

1. **seoul256.vim**: 一个基于首尔色彩的低对比度 Vim 颜色方案&#xff0c;适用于 256 色终端或 GVim。 2. **vim-easy-align**: Vim 插件&#xff0c;用于对齐文本。 3. **vim-go**: Vim 的 Go 语言插件&#xff0c;支持语法高亮、自动缩进等。 4. **coc.nvim**: 集成了 LSP…

GESP CCF C++ 二级认证真题 2024年6月

第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级&#xff0c;那他可以选择的认证语言有几种&#xff1f;&#xff08; &#xff09; A. 1 B. 2 C. 3 D. 4 第 2 题 下面流程图在yr输入2024时&#xff0c;可以判定yr代表闰年&#xff0c;并输出 2月…

介绍一款数据准实时复制(CDC)中间件 `Debezium`

简介 文章开头先介绍一下什么是CDC。数据准实时复制(CDC)是目前行内实时数据需求大量使用的技术。常用的中间件有Canal、Debezium、Flink CDC等 下面我们做一下对比 各有优缺点吧,本主要介绍一下Debezium中间件。 Debezium是什么 Debezium是一个为变更数据捕获(CDC)提供…

Windows图形界面(GUI)-SDK-C/C++ - 列表框(List)

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 列表框(List) 控件样式 创建控件 初始控件 消息处理 示例代码 列表框(List) 控件样式 列表框&#xff08;ListBox&#xff09;是Windows图形界面开发中常用的控件&#xff0c;允许用户从…

力扣第230题“二叉搜索树中第K小的元素”

在本篇文章中&#xff0c;我们将详细解读力扣第230题“二叉搜索树中第K小的元素”。通过学习本篇文章&#xff0c;读者将掌握如何使用中序遍历来找到二叉搜索树中的第K小的元素&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于…

OpenAI终止对中国提供API服务,对国内AI市场产生重大冲击?

6月25日&#xff0c;OpenAI突然宣布终止向包括中国在内的国家地区提供API服务&#xff0c;本月9日这一政策已经正式生效了&#xff01; 有人说&#xff0c;这个事件给中国AI行业带来很大冲击&#xff01;是这样吗&#xff1f;在展开讨论前&#xff0c;我们先来看看什么是API服务…

会话固定攻击

会话固定攻击&#xff08;Session Fixation Attack&#xff09;是一种网络攻击&#xff0c;攻击者试图诱骗受害者使用攻击者指定的会话ID&#xff0c;以便在受害者登录后&#xff0c;攻击者能够窃取受害者的会话并冒充受害者进行操作。下面是一个形象的例子来解释会话固定攻击&…

8080端口映射外网不成功的原因

最近因为需要将群晖nas的8080端口映射到外网&#xff0c;但是路由器已经成功设置&#xff0c;群晖nas上对应端口的服务也已经部署好&#xff0c;可是如论如何也从外网访问不到群晖服务器上&#xff0c;但是同样是5000端口&#xff0c;群晖的外网管理端口就可以&#xff0c;最后…

在linux x86服务器安装jdk

安装JDK&#xff08;Java Development Kit&#xff09;在Linux x86 服务器上可以按照以下步骤进行操作。以下步骤假设你有root权限或者sudo权限。 1. 下载JDK安装包 首先&#xff0c;你需要从Oracle官网或者OpenJDK官网下载JDK的安装包。可以选择对应的版本&#xff0c;比如J…