sass与compass实战
Sass,Compass与CSS3者的关系
曾经有一位古人说过:“如果你有一把锤子,那么所有的东西都会看起来像钉子。”;还有一位今人说过:“如果你有一颗钉子,那么你就会满大街找锤子。”。无论锤子亦或是钉子都是工具,而Compass和SASS恰恰扮演的就是锤子和钉子的角色,CSS则对应使用锤子和钉子最后完成的作品。——慕课网讲师·刘炬光
人们走进喧闹中去,是为了忘记孤寂。
人生不止眼前的苟且,还有诗和远方。——高晓松
compass初窥
安装好sass和compass后创建compass项目compass create compass-in-action
(更多命令可以使用compass --help
查看)
接下来我们在项目根目录下可以使用compass watch
命令监听sass文件的变化
compass核心模块概述
我们只要执行了@import "compass"
就会引入核心的5个模块,依次是:CSS3,Helpers(多是函数),Typography,Utilities(多事mixin)和Browser(配置默认支持哪些浏览器)。但是以下的2歌模块需要明确引入:
- reset:
@import "compass/reset"
- layout:
@import "compass/layout"
compass的周边生态非常丰富,我们可以使用gem install compass-normalize
来安装normalize插件来替代默认的reset。然后修改config.rb
即可。
layout模块
该模块又引入了3个子模块:
- grid-background:根据指定的颜色生成背景填充。
- sticky-footer:footer自动位于底部。
- stretching:绝对定位并且可以设定上右下左的值。
css3模块和browser support模块
该模块提供了跨浏览器的CSS3的支持,compass为我们封装了针对浏览器差异的mixin,只需要调用即可,不必关心具体差异。
有时候我们只需要兼容webkit内核(例如webapp),不需要兼容moz和opera,这时我们可以配置brower support模块,让它针对某个浏览器的特定版本生成代码。
Typography
该模块主要用于修饰文本样式、垂直韵律等。
一些小技巧
- sass中通过
@include
指令调用mixin。 - sass两种语法的转换可以使用
sass-convert
命令。 - css要注意语义化。例如对于一个错误消息红色字体,我们一般的做法是定义一个
.red
类,但是更推荐的做法是定义一个.error
类。 - 可以使用
@debug
指令生成日志。 - 可以使用
compass interactive
进入compass的REPL模式进行交互。 - 隐藏文字,可以将text-indent设置为无穷,overflow:hidden;还可以将字体设置为0,颜色设置为透明。
- 表格的第一行和表格的第一列都要使用
<th>
标签,都是表头。 - 图标字体可以在icomoon上找到。
- 注意:
::after
和::before
这样的伪元素必须指明content
这个属性,content
中的换行可以使用\A
并设置white-space: pre;
。 - 滚动条大部分是位于html上的,而对于像chrome这样的浏览器,它是位于body上的。
- 快速填充文本产生滚动条,可以巧用emmenet语法:
p{text}*100
。
本节代码可以到:coding.net找到。
扩展阅读
Q1:css中原生的@import
指令有什么弊端?
A1:该指令必须放在最前面;最性能不利,浏览器解析到高指令的时候将会被阻塞去下载被引入的css。
Q2:为什么CSS选择符越长,渲染性能越低下?
A2:因为浏览器渲染样式的时候总是从最内侧的样式渲染到最外面,直到遇到html这个标记。所以CSS选择符不应该过多嵌套,最佳实践是取较长的CSS类名代替嵌套,但是这样代码的结构又变得不太清晰,sass的@at-root
指令很好解决了这个问题。虽然我们嵌套书写了,但是最终生成的CSS却是不包含嵌套的。
Q3:require.js存在的意义是什么?
A3:①将代码封装在模块内部,可以避免命名冲突(项目的后期新加入一些童鞋可能变量命名和前面的重复了);②声明不同js文件之间的依赖;③可以让我们写出模块化的JavaScript代码,方便以后的复用,也便于职责分工。
我们可以使用koala图形化工具来实时编译less、sass和coffee