我正在决定在启动一个新的Rails 3.1项目时是否应该包括Compass。我以前没有使用过Compass。
Rails 3.1现在直接支持SCSS。通过Sprockets,Rails 3.1资源管道现在会自动编译样式表。此外,我可以直接使用CSS框架(如Blueprint)的SCSS版本。
如果在Rails 3.1中使用Compass,我将获得哪些好处?
我正在决定在启动一个新的Rails 3.1项目时是否应该包括Compass。我以前没有使用过Compass。
Rails 3.1现在直接支持SCSS。通过Sprockets,Rails 3.1资源管道现在会自动编译样式表。此外,我可以直接使用CSS框架(如Blueprint)的SCSS版本。
如果在Rails 3.1中使用Compass,我将获得哪些好处?
Compass提供了很多好的mixin,一个相当强大的雪碧图生成器以及与Blueprint的紧密集成,这意味着您不必在整个HTML中使用非语义的col
类。如果您不使用mixin,则使用Compass没有太多好处,但是如果您不使用它们(嵌套和变量很好,但mixin可以帮助将特定于浏览器的属性实现集中到单个位置)也没有太多好处。
然而,我发现Blueprint比它的价值更麻烦。我仍然会为mixin使用Compass,但是目前Rails 3.1与Compass之间的兼容性非常糟糕(您必须通过一些技巧,然后您仍然牺牲一些功能)。
在某种相关的说明中,Rails 3.1编译资产的方式相当“有缺陷”。它没有考虑社区过去一两年如何使用Sass - 将变量,mixin和页面部分保持分离以便由主文件包含。 Sprockets“自动”加载和编译Sass的方式使文件彼此脱节,因此即使您在application.css
文件中手动定义加载顺序,您在文件中设置的变量也无法在随后加载的文件中使用。
<nav>
标签中并直接应用样式。当您需要一个ID或类时,您会适当地命名它,例如“.user”或“#showreel”。Compass通过Mixins (body > div { @include container; } nav { @include col(3); @include prepend(2); }
) 让你可以使用Blueprint进行此操作。个人而言,我不喜欢这样做,但它比在HTML中添加布局类要好得多。 #i_am_a_snob - coreywardBourbon(由Thoughtbot开发)是一个轻量级的代替Compass的工具,很好地集成了Rails 3.1。
Bourbon拥有Compass主要的CSS3 mixin功能(背景图像、盒阴影、边框半径、渐变等)。它还提供了按钮样式、布局网格化以及其他一些实用功能。
你可能会错过Compass的某些高级特性,但这可以通过Sass的强大功能轻松解决:只需复制或创建自己的mixin即可!
升级我的Rails应用程序时,Compass经常让我头疼。我很欣赏Bourbon的简洁性(尽管它也可能会让你在早上头疼...)
Compass是一个设计无关的框架 - 例如,您不必担心用户使用哪种浏览器。
例如,Compass有一些插件,比如CSS3跨浏览器功能: http://compass-style.org/reference/compass/css3/ 这样,您可以在.scss文件中指定与浏览器无关的内容。
附注:
Rails 3.1处理.scss文件的方式是逐个处理 - 例如,如果您在一个文件中定义变量,则它们不会传递到其他.scss文件中。我认为这不是最优解决方案。