您现在的位置是:网站首页> 编程资料编程资料
详细解读CSS的预编译器PostCSSCSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题
2023-10-23
143人已围观
简介 这篇文章主要介绍了详细解读CSS的预编译器PostCSS,PostCSS与其他CSS预编译器比起来结构更为简洁,需要的朋友可以参考下
提到css预编译器(css preprocessor),你可能想到Sass、Less以及Stylus。而本文要介绍的PostCSS,正是一个这样的工具:css预编译器可以做到的事,它同样可以做到。
“你说的我都懂,那为什么要用它?”
套装与单件
如果Sass等预编译器是新定义了一种模板语言,然后将其转化为css的话,PostCSS则是更纯粹地对css本身做转换。
回想一下你是如何学习使用css预编译器的:了解到有这样一种可以转化为css的语言,它有很多特性,变量、嵌套、继承等等,每一种特性都通过一定语法实现。大概就像是递给你一个已经封装好的工具箱(量产型?),你可以在里面找有用的东西。
那PostCSS是怎样呢?PostCSS就像只递给你一个盒子,但告诉你你可以从旁边的陈列柜取走自己想要的工具放进盒子打包带走。如果你觉得陈列柜里的不够好,PostCSS还可以帮你打造你自己的工具。所以,使用PostCSS,你可以仅取所需。
这就是PostCSS的模块化(modular)风格。它作为一个css转换工具,自身很小,其所有的转换功能都是插件,因此可以个性化配置。
PostCSS的简要原理
PostCSS自身只包括css分析器,css节点树API,source map生成器以及css节点树拼接器。
css的组成单元是一条一条的样式规则(rule),每一条样式规则又包含一个或多个属性&值的定义。所以,PostCSS的执行过程是,先css分析器读取css字符内容,得到一个完整的节点树,接下来,对该节点树进行一系列转换操作(基于节点树API的插件),最后,由css节点树拼接器将转换后的节点树重新组成css字符。期间可生成source map表明转换前后的字符对应关系:
比较有意思的是,PostCSS的插件其实都是JavaScript函数,它们使用PostCSS的节点树API,对css节点树进行不同的转换。
插件预览
所有插件都可以在PostCSS的主页中查询到,这里只选取一小部分示意一下。
Autoprefixer
PostCSS最有名的插件是Autoprefixer。如名所示,可以自动为你添加浏览器私有前缀。它的添加值会参考Can I Use及你设定的浏览器支持范围,因此相当可靠。下面是一个示例(以我设定的浏览器支持范围):
- .container{
- display: flex;
- }
编译后:
- .container{
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- }
postcss-nested&postcss-mixins
在刚开始使用PostCSS时,我就想到要用PostCSS实现我在Sass中最常用的特性。所以,我找到了postcss-nested和postcss-mixins。将它们结合起来后,就可以做到这样:
- @define-mixin clearfix{
- &:after{
- display: table;
- clear: both;
- content: " ";
- }
- }
- .column-container{
- color: #333;
- @mixin clearfix;
- }
编译后:
- .column-container{
- color: #333;
- }
- .column-container:after{
- display: table;
- clear: both;
- content: " ";
- }
到这里,你是否已经有了“预编译器可以做到的它也可以做到”的感觉呢?
如何使用PostCSS
我个人推荐结合Gulp使用,本文在此只介绍gulp-postcss的用法。
gulp-postcss及插件都是npm,首先,使用npm install将它们分别安装到项目目录中(会位于node_modules)。然后,编辑glupfile.js,将PostCSS注册为Gulp的一个任务。以下是一个结合使用了Autoprefixer、postcss-simple-vars、postcss-mixins、postcss-nested4个插件,且生成source map文件的例子:
- var gulp = require("gulp");
- var postcss = require("gulp-postcss");
- var autoprefixer = require('autoprefixer-core');
- var postcssSimpleVars = require("postcss-simple-vars");
- var postcssMixins = require("postcss-mixins");
- var postcssNested = require("postcss-nested");
- var sourcemaps = require("gulp-sourcemaps");
- // Css process.
- gulp.task("postcss", function(){
- var processors = [
- postcssMixins,
- postcssSimpleVars,
- postcssNested,
- autoprefixer({
- browsers: ["Android 4.1", "iOS 7.1", "Chrome > 31", "ff > 31", "ie >= 10"]
- })];
- return gulp.src(["./stylesheets/src/*.css"])
- .pipe(sourcemaps.init())
- .pipe(postcss(processors))
- .pipe(sourcemaps.write("."))
- .pipe(gulp.dest("./stylesheets/dest"));
- });
在上面这段代码中,processors是一个数组,定义了用到的PostCSS插件。PostCSS会按照定义顺序依次执行插件,因此,在结合多个插件使用时,请注意它们的位置。
自定义转换
此外,你可以很容易地创建你自己的转换(还记得前面说过PostCSS的插件都是JavaScript函数吧?)。例如,下面是一个自定义的转换方法,它将css代码中的带有rem单位的值,更改为px的值。
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- 一波CSS+Div实用技巧小结css实现元素居中的N种方法div水平布局两边对齐的三种实现方法waterfall瀑布流布局+动态渲染的实现页面中有间隔的方格布局如何完美实现方法css实现六种自适应两栏布局方式使用flex布局轻松实现页面布局的示例代码使用Flex布局实现头部固定内容区域滚动的方法详解flex布局下图片变形的解决方法详解flex布局与position:absolute/fixed的冲突问题Flex布局实现div内部子元素垂直居中的示例
- 深入理解CSS中选择器的逻辑处理
- 一波CSS制作的三角形和圆形小按钮示例利用CSS3实现文本框的清除按钮相关的一些效果用CSS3写的模仿iPhone中的返回按钮HTML5+CSS3实现的音量调节旋转按钮动态特效源码
- 详细解读CSS中的伪类afterCSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题
- CSS中的选择符实际使用指南
- 解析css中的选择符命名
- CSS中的一些百分比相关调试经验分享
- 放开那三国张郃怎么样 张郃详细介绍_手机游戏_游戏攻略_
- 我叫MT3.4版屌丝专属队长技能学习搭配小技巧_手机游戏_游戏攻略_
- 忘仙宠物先天技能详细介绍_手机游戏_游戏攻略_
点击排行
本栏推荐
