我正试图决定在启动一个新的Rails 3.1项目时是否应该包含Compass。我以前没用过指南针。
Rails3.1现在直接支持SCSS。Rails3.1资产管道(通过链轮)现在可以自动编译样式表。我可以直接使用SCSS版本的CSS框架,如Blueprint。
将Compass与Rails3.1结合使用会给我带来什么好处?
Compass提供了很多好的混合,一个非常强大的sprite生成器,以及与Blueprint的紧密集成,这意味着您不必在整个HTML中使用非语义col
类。
如果不使用mixin,使用Compass并没有太大好处,但如果不使用它们,使用SCSS也没有太多好处(嵌套和变量很好,但mixin有助于将特定于浏览器的属性实现保持在一个位置)。
然而,我发现蓝图比它的价值更麻烦。我仍然会使用Compass来进行混合,但现在Rails3.1和Compass之间的兼容性很差(你必须克服一些困难,但仍然会牺牲一些功能)。
在一个有点相关的注释中,Rails3.1编译资产的方式相当"破碎"。它没有考虑社区在过去一两年里是如何使用Sass的——将变量、混合项和页面部分都分开,以便按顺序包含在主文件中。Sprockets加载和编译Sass的"自动"方式会解除文件之间的关联,因此即使您在application.css
中手动定义加载顺序,您在文件中设置的变量也无法用于随后加载的文件。
波旁威士忌(Thoughtbot出品)是指南针的轻型替代品,与导轨3.1完美集成。
它有你用指南针获得的主要css3混合元素(背景图像、框阴影、边界半径、渐变…)。它还有按钮样式的助手、布局的"网格化"以及其他一些好东西。
你可能会错过compass的一些强大功能,但这可以通过sass的强大功能轻松克服:只需复制/创建你自己的mixin!
Compass在升级rails应用程序时经常让我头疼。我很欣赏波旁威士忌的简洁(尽管它可能也会让你头疼……早上:-))
Compass是一个与设计无关的框架,例如,您不必担心用户拥有哪些浏览器。
例如Compass具有附加组件,例如CSS3跨浏览器功能:http://compass-style.org/reference/compass/css3/通过这种方式,您可以在独立于浏览器的.scs文件中指定内容
旁注:
Rails3.1处理.scs文件的方式是一次一个——例如,如果你在一个文件中定义变量,它们就不会转移到另一个.scs文件中。IMHO并不是真正的最佳解决方案。
html5boilerplate指南针插件也是一个很好的时间节约工具,所以出于这些原因,我会使用指南针