2015-06-10 120 views
0

在我的应用程序中,我有各种主题供用户从特定的网页中选择。这些主题仅在颜色和字体类型方面有所不同。所以为了不重复css声明,我创建了一个scss文件,其中包含常见的css声明ztheme.css.scss,其中包含所有主题中的常见CSS样式。我拥有各种主题scss文件(例如silver.css.scss,melon.css.scss - 如下所示),仅使用为颜色和字体类型定义的变量值。在所有这些主题scss文件中,您可以在底部看到它将共同的ztheme.css.scss导入为@import 'ztheme'。因此,当这些主题文件被编译后,它们将具有适当的颜色和字体类型值的常见CSS样式。Rails4资产预编译失败

silver.css.scss

$nav_bg_color: #F6F6F6; 
$page_font: 'Sintony', sans-serif; 
$page_txt_color: #000033; 
@import 'ztheme'; 

melon.css.scss

$nav_bg_color: #F2F6C6; 
$page_font: 'Arial', verdana; 
$page_txt_color: #628002; 
@import 'ztheme'; 

ztheme.css.scss

body{ 
    padding-bottom: 20px; 
    background: $nav_bg_color; 
    font-family: $page_font; 
    text-rendering: optimizelegibility; 
    color: $page_txt_color; 
} 

问题是,当我在Heroku和资产预编译揭开序幕部署此代码,然后将其在ztheme.css.scss失败,因为它寻找在其中定义的变量的值。并抛出这个错误:

remote:  rake aborted! 
remote:  Sass::SyntaxError: Undefined variable: "$nav_bg_color". 
remote:  /tmp/build_ded002611a0752bd96038a671fd8051c/app/assets/stylesheets/themes/ztheme.css.scss:9 

但是你可以看到,ztheme正在导入在每一个主题文件,所以当ztheme将这些文件导入,这些zthemes的价值应该得到适当的填充,它不应该抛出Undefined variable错误。

如何解决这个问题?

我有我的构建资产如下: enter image description here

回答

0

这是很难确定的是从你的代码是什么文件什么样的代码,但我认为你可能已经向后做你@imports。尝试将所有主题导入到'ztheme.css.scss'中,因为它们是您定义'$ nav-bg-color'的地方。

这可能不是一个包罗万象的解决方案,而是从某个地方开始。

我希望这有助于某种方式。

0

经过多次尝试,终于找到了解决办法。我不得不为ztheme.css.scss中的这些变量添加一个default值,该值在主题特定的scss中被覆盖

$nav_bg_color: #F1C5CE !default; 
$page_font: Arial, Verdana !default; 
$page_txt_color: #459823 !default; 

body{ 
    padding-bottom: 20px; 
    background: $nav_bg_color; 
    font-family: $page_font; 
    text-rendering: optimizelegibility; 
    color: $page_txt_color; 
} 
相关问题