Postcss介绍

PostCSS不是类似Less,Sass,Stylus那样的CSS预处理器,而是一种允许用JS插件来转变样式的工具。看官网的截图:A tool for transforming CSS with JavaScript

PostCSS的插件很多,本篇先介绍3个常用插件:

  • pre-css
  • autoprefixer
  • css-next

pre-css

pre-css插件是一款css预处理器。语法和主流的sass,stylus,less极其相似,例如同样用嵌套来表示层级,同样用&来表示父选择器等。也支持mixin,extends,条件@if,循环@each等。

具体语法请看github上的例子,如果有css预处理器开发经验,很容易上手,就不多介绍了。

autoprefixer

autoprefixer插件会给根据CanIUse的兼容性去检查你的CSS代码,然后自动为你的CSS代码加上浏览器厂商的私有前缀,一图胜千言:

例如你的CSS代码:

@keyframes rotate {
  from {
    transform: rotateZ(0deg);
  }
  to {
    transform: rotateZ(360deg);
  }
}

.loading-circle {
  animation: rotate .4s linear infinite;
}

经autoprefixer插件处理后会,CSS代码里自动被添加了浏览器厂商的私有前缀:

@keyframes rotate {
  from {
    -webkit-transform: rotateZ(0deg);
    transform: rotateZ(0deg);
  }
  to {
    -webkit-transform: rotateZ(360deg);
    transform: rotateZ(360deg);
  }
}

.loading-circle {
  -webkit-animation: rotate .4s linear infinite;
  animation: rotate .4s linear infinite;
}

这样程序猿可以专心写自己的代码了,按作者的说法就是可以:Write pPure CSS。

该插件也可以用browserlist来指定需要支持的浏览器和版本。不在browserlist列表里的浏览器和版本不会自动添加私有前缀。在package.json里添加browserlist列表:

{
  ...
  "browserslist": [
    "> 1%",     //全球有超过1%的人使用的浏览器
    "ie 9-10"   //虽然使用者低于1%,但仍旧支持一下
  ]
}

browserlist插件会查询CanIUse上的数据,返回支持的浏览器和版本。autoprefixer插件会给这些浏览器和版本加上私有前缀。例如上例中,ie8及以下就会被华丽地无视。(最后根据browserlist的一个小Demo,真心期待IE9也能早点退出历史舞台)

因为autoprefixer插件被集成进了css-next里,因此我们直接用css-next即可。(browserlist如有需求,还是要手动在package.json里配一下的)

css-next

css-next插件让能让你用上未来的css语法。这牛不是我吹的,见官网标语,有图有真相:

一图胜千言:变量用—双横线来声明。使用变量时要用var()将变量括起来,看上去有点像JS代码。还提供了不少API,如图中的color函数会将函数参数转成rgba格式。
更多(也不是很多)API见官网。前端工程师是幸福的,有这么多新的,好玩的技术供你尝试。前端工程师是痛苦的,稍一松懈就落伍了…

我所能理解的优秀的技术或工具,应该能解决现有条件下某些无法解决的痛点。但我能力有限,项目中尝鲜下来,暂时未发现css-next解决了什么其他预处理器如sass,less无法解决的痛点。感觉最大的好处是集成了autoprefixer插件。

webpack集成

将postcss用webpack集成进项目中:

const precss = require('precss');
const cssnext = require('postcss-cssnext');

module.exports = {
  ...
  postcss: [
    precss,
    cssnext
  ],
  module: {
    loaders: [
    ...
      {
        test: /\.[p]?css$/,
        loader: 'style!css!postcss'
      }
    ]
  },
  ...
};

由于css-next里自带autoprefixer插件,因此不必再手动配autoprefixer了。(而且试下来手动单独配autoprefixer的话,webpack会有重复配置的警告)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • PostCSS-Comn PostCSS-Comn使用说明,整合PostCSS常用功能GitHub:https:/...
    希伯来没有雨阅读 801评论 0 1
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,140评论 7 35
  • 有人说,不知道“西仓”,不算地道的西安人。的确,每逢周四、周日开市,西仓也许是西安最热闹的地方了。选个周末,带着孩...
    海涛ht阅读 563评论 0 0