将变量传递给scss'coinin'在rails 3.0中工作但在3.2中没有

时间:2012-10-23 05:24:43

标签: ruby-on-rails-3.1 ruby-on-rails-3.2 sass

我正在将应用程序从rails 3.0升级到3.2,我的一些scss代码存在问题。 stylin.css包含:

/*
= require_self
= require_tree .
*/

stylin.css.scss包含:

@import "palette";
@import "round";
@import "html_elements";
@import "graph";
@import "menu";
@import "button";
@import "pop_up";
@import "basic_abrev";

更新styling.css时,会导入“palette”,但不会导入任何其他内容。因此,加载第一页时出现以下错误:

Undefined mixin 'round_corners'

我认为这是因为'round.css.scss'的顶部包含以下内容:

@mixin round_corners($radius: 8px) {
  border-radius: $radius;
  -moz-border-radius: $radius;
  -webkit-border-radius: $radius;
}

如果没有传递的变量,默认值为8px。在下面的例子中,'20px'被传递给mixin。

@include round_corners(20px);

这在3.0中有效。这不再可能吗?如果没有,我将不得不创建许多mixins或停止使用混合/包含功能来圆角。

感谢。

1 个答案:

答案 0 :(得分:1)

我发现了here

如果要使用多个Sass文件,通常应使用Sass @import规则而不是这些Sprockets指令。使用Sprockets指令,所有Sass文件都存在于它们自己的范围内,使得变量或mixin仅在它们所定义的文档中可用。

我发现了here

当使用Sprockets 2.x和Sass时,你最终会遇到一个非常大的问题。 // = require指令不允许在文件之间共享Sass mixins,变量等。

找到此here

Sprockets提供了一些放在注释中的指令,名为require,require_tree和require_self。请勿在您的SASS / SCSS文件中使用它们。它们非常原始,与Sass文件不兼容。相反,使用Sass的原生@import指令,sass-rails已经定制,可以与rails项目的约定集成。

当我从stylin.css.scss文件中删除此(sprockets命令)时,一切正常。

/*
= require_self
= require_tree .
*/