聊聊CSS postproccessors
从Rework说起
Rework是TJ大神开发的CSS预处理框架。但为什么会出现呢?TJ大神如此回答:
The simple answer is that Rework caters to a different audience, and provide you the flexibility to craft the preprocessor you want, not the choices the author(s) have force on you.
Our goal with Rework contrasts the others, as it does not provide a higher level language within the CSS documents, Rework’s goal is to make those constructs unnecessary, being the most transparent CSS pre-processor out there.
简单地说,就是从之前的特定CSS预处理器,转而成为通用式CSS预处理框架,通过插件,可自定义扩展功能。
我用compass用得正爽,凭什么用你?
- 工程师喜欢瞎折腾,满足其DIY乐趣
 - 现代前端,多端多屏、需要不同兼容场景下情况下,CSS预处理器需要深度定制,来看看我们没有深度定制的后果:
- 我们经常使用
@include border-radius;,可你知道compass这个mixin有啥问题么?.btn-default { -webkit-border-radius: 2px } // 仅在 android 2.1, chrome 4, ios_saf 3.2, safari 4 或更早期版本适用
.btn-default { -moz-border-radius: 2px } // 仅在 firefox 3.6 以前版本适用
.btn-default { -ms-border-radius: 2px } // 根本不存在 -ms-border-radius
.btn-default { -o-border-radius: 2px } // 这玩意早就淘汰了
 - 我们也经常用
@include transition();,但:.course-card .course-agency { -moz-transition: .3s } // 仅在 firefox 15 以前版本适用
.course-card .course-agency { -o-transition: .3s } // 仅在 opera 12 以前版本适用
 
 - 我们经常使用
 - 嵌套很强大,但某些时候也是灾难
- 多层嵌套,代码维护的灾难

 - 多层嵌套导致的单页应用代码性能问题,所以Github的CSS规范明确指明Sass嵌套不允许多余三层(之前我们以为仅仅是维护性原因),有兴趣可以围观下 GitHub's CSS Performance
 
 - 多层嵌套,代码维护的灾难
 
Autoprefixer革命
在我看来真正带来革命的不是postcss,恰恰是他的核心组件Autoprefixer。让我们看看他到底干了什么?
Working with Autoprefixer is simple: just forget about vendor prefixes and write normal CSS according to the latest W3C specs. You don’t need a special language (like Sass) or remember, where you must use mixins.
Just write normal CSS according to the latest W3C specs and Autoprefixer will produce the code for old browsers.
所以呢?如果我们写了:
a {
    display: flex;
}
则经过Autoprefixer,会变成:
a {
    display: -webkit-box;
    display: -webkit-flex;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;
}
并且这些hack数据是从caniuse获取的,所以能根据你的需要设置你需要兼容的浏览器。Sounds good!这更像polyfill,我们只用按照标准写就好了,polyfill会帮忙处理兼容性,之后如果无需兼容,其会自动去除。
CSSGrace
Make it better!
CSSGrace在我看来主要由于AST的介入,其可能分析出以前preproccessors分析不出来的css错误问题,类似csslint的一些静态分析,以及一丝所说的CSS常见错误,例如:float: left/right 或者 position: absolute 后还写上 display: block,具体参见:http://www.zhihu.com/question/20979831
最后随想
个人感觉未来Web会Web Component化,无论是以W3C标准以HTML为核心的Web Component,还是类似React以Javascript为核心的Web Component,在纵向力度足够细的时候,css样式将趋近与足够简单。
在这种背景下,当处理好作用域的情况下(目前没什么好办法,可能只能将class name写长一点),未来嵌套场景将大大减少,从这一点来看,以前的Sass、LESS等如此强大的预处理器未必是必需品。
聊聊CSS postproccessors的更多相关文章
- 简单聊聊CSS中的3D技术之“立方体”
		
简单聊聊CSS中的3D技术之“立方体” 大家好,我是今天的男一号,我叫小博主. 今天来聊一下我在前端“逆战班”学习中遇到的颇为有趣的3D知识.前端学习3周,见识稀疏,在下面的分享中如有不对的地方请大家 ...
 - 聊聊css hack
		
什么是CSS hack CSS hack由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览器的不同版本,如 ...
 - 聊聊css盒子模型
		
css盒子模型原理: 在网页设计中常听的属性名:内容(content).填充/内边距(padding).边框(border).外边距(margin), CSS盒子模式都具备这些属性. 这些属性我们可以 ...
 - 记一次项目中的css样式复用
		
本文同步至微信公众号:http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401616238&idx=1&sn=3c6e9 ...
 - CSS的伪元素(二)
		
随便聊聊CSS的伪元素,虽然它们在项目开发中用的并不多,但确实很有用,在项目中不用它,是因为大家不能了解它们,下面是一个工作场景,如有四个按钮,分别是建立,编辑,删除和修改,而我们要求这在前台显示的汉 ...
 - CSS书写规范与理论
		
前端体系的变化可谓是日新月异,短短一年时间,从理论.框架.构建工具.甚至开发语言都发生非常大的变化. 随着新项目就即将启动,我抽时间回顾了一下以往项目的前端架构,零零散散产生了许多想法,尽量一一记录下 ...
 - 【转】没那么难,谈CSS的设计模式
		
什么是设计模式? 曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上:也曾有人这么说,不是设计模式没用,是你还没有到能懂它,会用它的时候. 先来看一下比较官方的解释:“设计模式(Design p ...
 - 没那么难,谈CSS的设计模式
		
没那么难,谈CSS的设计模式 来源: 灵感的小窝 发布时间: 2016-09-09 16:46 阅读: 8949 次 推荐: 27 原文链接 [收藏] 什么是设计模式? 曾有人调侃, ...
 - css里颜色的那些事儿(合法颜色值)
		
css中主要有六种方法指定颜色: 1.十六进制颜色 2.RGB颜色 3.RGBA颜色 4.HSL色彩 5.HSLA颜色 6.预定义/跨浏览器的颜色名称 前三种是我们最常见的,也是用的最多的,而后三种对 ...
 
随机推荐
- Class类的理解
			
在java中,每个类都有一个相应的Class类的对象,因为每个类编译完成后,在生成的.class文件中,就会产生一个Class对象. 在运行期间,如果我们要产生某个类的对象,jvm会检查类 ...
 - 黑客们的故事(连载六):IT世界里的理想主义者
			
一头疏于梳理的长发和一把肆意生长的大胡子,往往可能是人们对于理查德马修斯托曼的第一印象.这位马上就要过60岁生日的自由软件基金会主席不用手机.不买房.没有汽车,看起来像是个流浪汉,但是却是美国工程院院 ...
 - 小程序 - c字符串表示大整数
			
#define max(a, b) ((a) > (b) ? (a) : (b)) static char* reverse(char *str) { char *l, *r, c; ; l & ...
 - H3C dhcp 中继
			
需求描述RT1作为DHCP服务器创建两个全局地址池:192.168.10.0/24 192.168.20.0/24 RT1和RT3属于VLAN 10 RT2属于VLAN 20 在交换机上配置DHCP中 ...
 - [Leetcode][JAVA] Pascal's Triangle I, II
			
Pascal's Triangle: Given numRows, generate the first numRows of Pascal's triangle. For example, give ...
 - 使用PPT制作交叉密文图
			
曾几何时,一张图火遍大江南北,互相流传. 其中的奥秘早已破解出来,但是仍乐趣无穷. 来回顾这样一张图吧! 最近,在朋友圈中,这样的一种图又流行起来,被改成不同的版本. 可是这样一种图片到底是怎样做出来 ...
 - apt-get程序和系统管理
			
检查更新:apt-get update 系统升级:apt-get upgrade 移除软件:apt-get remove xxx 自动移除旧的软件包:apt-get autoremove 完全移除软件 ...
 - 学一点Git--20分钟git快速上手
			
(图片已修复)在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是的,只要20分钟, 让你快速用上 ...
 - 搭建wordpress开发环境
			
安装php PHP下载地址:http://windows.php.net/download/ 和MySQL一样,下载包是一个zip压缩包,只需解压缩即可.将它解压缩到 D:\WNMP\php-5.5. ...
 - [安卓] 5、SeekBar拖动条
			
越来越发现这些控件用法大同小异了,这里注意几个函数:seekBar.setSecondaryProgress(0);设置初始进度为0,总共为0~99,对其监听用setOnSeekBarChangeLi ...