[FungLeo原创]CSS预编译技术之SASS学习经验小结
前言
接触CSS是05年.使用xhtml css开发是06年.但真正全面采用xhtml css开发却是08年开始的.因为居于三线城市,比一线程序的前驱者还是晚了一些.
虽然现在已经发展到了html5 css3了.CSS也比以前强大太多了.但是这个语言却并没有什么本质性的改变,甚至,都不能算是一门编程语言.
这两年前端行业发展日新月异,大批后端工程师转前端,发现,我擦,这玩意儿真心不好用啊,于是,大量的CSS预编译技术出现了.比较知名的是less和sass.
我是先接触的less,用了一年多,感觉还好.一直没有研究得多深,但是写起来也确实方便.直到去年,来到目前这家公司,要求,全面转入sass.当我正是用sass书写css一个星期之后,我决定,忘记less,因为,实在是太强大了.
sass学习有一个网站很好 sass入门 - sass教程 这个网站全面的提供了sass的各种基础语法.如果想要学习和理解这些语法,去这个网站学习一下即可.
我的这篇博文不是重复上面的网站.那没有任何意义.我要写的,是那个网站没有,但是对你可能有莫大用处的,或者少让你走弯路的内容.感兴趣,那就往下看吧.
sublime text 配置sass环境后,为什么不自动输出一个分号?
我的开发工具是 sublime text 我向大量前端都是使用的这个工具.所以就以这个工具来说.使用 sublime 安装好 sass 插件之后,你会发现,在输入一个属性之后,没有自动输出分号.
默认已经安装了emmet插件了哈
举例:
代码语言:javascript复制/* 我输入下面的代码 */
tac
/* 我期望输出的代码是 */
text-align: center;
/* 但是,编辑器输出的是 */
text-align: center
这让我很郁闷,以至于我都想要放弃SASS,因为每次都输入一个分号会让我崩溃的.后来我明白到底是为什么了.
因为sass分为两个版本,一个是sass,其特点是使用严格的缩进来控制,省略掉了分号和花括号(肯定是Python程序员的主意-_-); 另一个版本是scss,这个版本,是使用花括号和分号的,更接近我们这些本来就是前端工程师的人的使用习惯. 两种版本是以后缀名来区别的.如 style.sass 和 style.scss
我的建议是,放弃sass格式,全面使用scss格式.于是,你的sublime配置插件,就不能配置 sass插件了,而应该去找 scss 插件.
装上这个插件之后,就一切整好了.
@extend 清除浮动代码
清除浮动代码是在前段工作中需要大量使用的代码.其混入代码的编写如下:
代码语言:javascript复制/* 清理浮动代码 */
.cf {
zoom:1;
&.cf:before, &.cf:after {content:"";display:table;}
&.cf:after {clear:both;}
}
/* 调用 */
.nav {
@extend .cf;
}
通过这样的代码,在需要清理浮动的地方写一下即可.
如果你看了上面的给出的入门教程,或者本身就会sass你可能会有一个疑问,为什么是.cf
,不应该是 �
吗?
你说的没错.
如果是�
这种方式,那么,如果文档中没有哪里调用了它,那么它是不会输出的.也就是说,那样更合理.
但是,像清理浮动这种重要的代码,用的地方特别多.而且可能在html里面也会直接的去写一个class来调用它,那么,使用.cf
就更加合适了,因为,这样的话,在输出的css中,是有.cf
这个样式存在的.
我这段文字的意义就是告诉你:
�
不仅仅有�
这一种写法,还可以写成 .cf
具体用哪个,就看你在项目中的实际需求了!
@mixin 混入代码如何使用 calc() 计算属性?
呵呵,如果你不清楚的话,会难死你…我曾经在这个问题上困扰了很久,可以参考我之前写的一篇博文:scsssass calc 的mixin&include 处理方法
这里我直接把结果告诉大家
代码语言:javascript复制/* 混入代码 */
@mixin calc($property, $expression) {
#{$property}: -webkit-calc(#{$expression});
#{$property}: calc(#{$expression});
}
/* 调用 */
.test {
@include calc(width, "25% - 1em");
}
虽然现在CSS3在移动端的支持非常好,但是,还是不能滥用这个属性,因为安卓4.4以下不支持 calcvwvh 等属性,并且,即便你的手机是最新的系统,但如果你使用某些国产浏览器,还可能不支持这些东西.比如猎豹和某些微信版本自带的浏览器(不确定,但有这个情况),如果你使用的话,一定要做好降级处理.
koala不支持中文注释的处理方法.
sass编译器有很多.我个人建议在windows平台开发的话,还是使用 koala 这款国人开发的软件.大家可以点击这里去官方网站下载.这款软件不仅仅可以编译sass,还可以编译less,或者压缩JS等各种功能.非常的好用.
但是,在默认情况下,它在编译sass文件的时候,是不能有中文注释的.怎么办呢?我之前也有一篇博文[转]koala 编译scss不支持中文解决方案特别介绍了处理方法,这里再次复述一遍.
进入到Koala 安装目录
D:Koalarubygemsgemssass-3.4.9libsass 修改 engine.rb 文件
在require 最下面 加入以下代码 即可解决
代码语言:javascript复制Encoding.default_external = Encoding.find('utf-8')
个人多次测试成功
PS:在MAC下面也是一样,找到这个文件,最后追加就行了.手头暂时没有MAC,但亲测有效
SASSSCSS 避免运算的方法
sass是支持运算的,加减乘除都支持.但是某些情况下,我们只是要输出内容,并不是要它运算.这时候怎么处理呢?
举个例子
代码语言:javascript复制@mixin ts($s1:1px,$s2:1px,$color:$cff){
text-shadow:
$s1 $s1 $s2 $color,
-$s1 $s1 $s2 $color,
$s1 -$s1 $s2 $color,
-$s1 -$s1 $s2 $color;
}
这段混入,应该能理解是什么吧.但是,如果这样在混入的时候,得到的结果,就不是你想要的了.它会输出
代码语言:javascript复制text-shadow: 1px 1px 1px #fff,-1px 1px 1px #fff,0px 1px #fff,-2px 1px #fff;
这样的东西,怎么办呢?这样写就好了.
代码语言:javascript复制@mixin ts($s1:1px,$s2:1px,$color:$cff){
text-shadow:
$s1 $s1 $s2 $color,
-$s1 $s1 $s2 $color,
$s1 (-$s1) $s2 $color,
-$s1 (-$s1) $s2 $color;
}
用括号来解决这个问题. 出处:SASSSCSS 避免运算的方法
另外,由于CSS本身支持/
号,因此,在使用除法运算的时候就要特别注意.括号,是解决这个问题的好方法.
多文件SASS的规划整理
一个项目只需要一个css,但是,如果我们把全部的sass文件写在一个sass文件里,那么可能这个文件很长.这并不利于我们维护这些代码.
因此,我们需要将代码写在多个文件里,最后在整合在一起输出为一个CSS文件,怎么做呢?
首先,我们这样规划:
代码语言:javascript复制style.css // 最终输出文件
style.scss // 原始sass文件
scss // 保存碎片sass的文件夹
_header.scss // 下面都为碎片文件
_body.scss
_footer.scss
注意,碎片文件夹里面的sass文件是不需要编译的,只需要在文件名的前面加一个下划线它就不会自动编译了.
style.scss 文件里面的写法
代码语言:javascript复制@import "scss/header";
@import "scss/body";
@import "scss/footer";
看到了吗?当然,你写完整路径也没有问题,但是,下划线可以省略,后缀名也可以省略.
2016年5月23日日补充: 如果你的sass碎片文件名为
_love_baby.scss
这样的话,koala不会自动编译. 需要改成_loveBaby.scss
我还以为koala坏了呢…急死我了.
小结
scss是非常非常好玩的,也可以大大提高的你编码效率.如果你问我,是less好,还是sass好,我不能给你准确答案,但是,现在越来越多的团队在使用sass.这是一个趋势.
如果你现在还在写原生的css文件,你真心OUT了.赶紧学习一门CSS预编译语言吧.我的推荐是——sass
如果本文有什么错漏,或者你有什么心得,欢迎给我留言,我期待你的指教!
FungLeo原创,转载请保留版权申明,并附带首发地址:http://blog.csdn.net/FungLeo/article/details/50851192