掌握CSS是每一个Web开发者的基本要求,虽然CSS自己并不复杂,但怎样写出支持全部主流浏览器(特别是IE)的CSS,以及在大型网站中如何有序地组织好CSS结构倒是一个至关棘手的问题。我更多的是一个开发者,而不是一个设计师,却不幸花了大量时间处理CSS这些棘手问题,若是能有一些工具能帮我处理这些问题,那将颇有意义。通过一段时间的搜索和研究,还真发现了几个很棒的工具,感受真是相见恨晚,与你们分享之。css
Blueprint CSS Frameworkhtml
刚才说过了,处理浏览噐的不一致性是很困难的事情。每开始一个新项目,咱们都须要作一些重复的事情,好比须要将一些元素的padding和margin重置为0,设置某些元素的默认样式,定义一些通用的样式等,这些因为浏览器之间的不一致而变得复杂。有了blueprint ,你就不用再担忧这些啦,blueprint已经很是完美的为你作好这些事情了。这还只是blueprint作的一小部分事情,它还定义了一些form的样式,另外它带一些插件。blueprint仍是一个基于网格(grid)布局的框架。在我看到blueprint以前还不知道网格布局已经这么流行了。网格布局就是把浏览器内容区域划分一些固定的大小的网格,网页中元素的定位都向网格靠齐。blueprint默认设置网页的宽度为950像素,并它分红24个网格,每一个网格宽度为30像素,每一个网格之间的距离为10像素。git
在blueprint下布局很是容易,咱们来看如何使用blueprint来作很是常见的三列布局:github
span-x表示内容跨x个网格,同时右边留有10像素的margin,例如span-4的宽度为4*40-10=150像素。注意当内容跨了第24个风格,须要定义last样式,last样式的做用就是设置right-margin为0。这样上面的例子就很清楚了,header和footer跨全部24个网格,左右侧栏各跨4个网格,中间内容跨16个网格。这里 是个更酷的例子,它彻底使用blueprint内置样式。编程
blueprint使得布局变得很容易,可是它也有问题,那就是它大量使用基于表现的class名称(如span-x),这彻底违背cass名称应该基于语义的规则。咱们暂且搁置这个问题,来看另一个很是很是强大的工具。浏览器
Sasssass
Sass 是一个输出CSS的编程语言,没错,CSS也有编程语言。Sass基于Ruby语言,而且是Haml的一部分,因此要安装Sass就得安装Haml,固然还得安装Ruby。我不喜欢Haml,却很是喜欢Sass。经过下面的命令来安装Haml(同时也安装了Sass),基于你使用的操做系统,你可能须要在命令加上sudo:app
Sass是基于缩进的语言,来看一个例子:框架
假设上面的内容保存在style.sass文件,运行命令:编程语言
会输出style.css文件,它的内容为:
能够看出Sass语法的优点,因为基于缩进,共同的前缀只须要写一次,而在CSS文件则须要重复屡次,这对维护是个问题。固然,Sass能够作得更多,它还支持变量和Mixin。Mixin是可重用的样式,它甚至还能够带参数。Mixin的定义以”=“开头,变量定义以"!"开头。
上面的代码定义了两个Mixin,分别是table-scaffoding和left,其中left还接收一个dist参数。#data样式则包含了left Mixin和table-scaffolding Mixin定义的样式。它会输出以下CSS:
Mixin是Sass很是强大的一个特性,想一想看你是否是在项目中看到不少重复的CSS定义,你不得不来回的拷贝复制。经过Sass你能够将这些公用的Sass定义成一个Mixin,而后在其它实际定义样式的地方包含它。你甚至还能够定义项目之间都通用的Mixin,把它们包含在一个单独的文件里,就像类库同样,须要时就引用。咱们能够为Blueprint的样式转变成Sass的格式,并把它们作成Mixin,而后再定义基于语义的样式,它们包含这些Mixin,这样咱们就能够在页面中使用语义样式名称了,而不须要使用Blueprint带的基于表现的样式。幸运的是,咱们并不须要本身作这些事情,已经有另外的框架帮你作好了,那就我接下来要谈的Compass。Sass支持变量的运算,这有时很是方便,咱们能够定义一些元素的宽度,定义为变量,其它元素的宽度由它们计算出来,当改变布局时,只须要修改几个变量的值就能够了。做为一门编程语言,Sass还支持控制条件和循环语句,虽然这在通常状况下不多用到。
Compass
Blueprint提供了一个很是健壮的CSS框架,可是却大量使用基于表现的class名称;Sass语言提供将基于表现的class名称转化成基于语义的class名称的基础设施,但自己不带任何样式;Compass 的做用就是将二者集成到一块,结合二者的优势。Compass还支持其它CSS框架的集成,这里就不说了。Compass也是基于Ruby语言的,使用下列命令来安装:
要开始一个新的Compass项目,使用:
选项-f表示和blueprint框架集成。进入到项目目录下,让咱们基于Compass来实现一个三列布局。先写HTML文件:
注意上面没有任何blueprint相关的样式名,咱们为每一个部分定义了一个基于语义的id,接下来就是它们定义样式,打开项目目录下src/screen.sass文件,将它的内容改为以下:
前几行导入Compass提供和Blue相关的Sass样式,里面包含了不少Mixin,能够拿来用。#header, #footer的样式直接包含了column Mixin,第一个参数是compass定义的bluepring_grid_columns变量,默认为24,第二个参数为true,表示元素会跨最后一列。left-sidebar和right-sidebar占据整个页面宽度的1/4,变量sidebar_columns表示sidebar占据的列宽,它根据bluepring_grid_columns计算获得。一样main-content的宽度也是计算获得的。它们都直接包含了column Mixin。将它转化成css,在工程目录下直接使用命令:
就可将src目录下的sass文件转化成相应的css。如今打开刚才建立的HTML文件,应该能够看到正常布局的页面了。
在项目开发中,若是每次都须要手工调用compass命令去将sass文件转换成css文件,那就太麻烦了,compass提供命令
它会自动监视src目录下sass文件的改动并自动将它转换成css文件。