2016-08-29 38 views
0

我有一个应用程序呈现名为feeds的视图,并且它自带的样式为feeds.scss。该视图使用名为default_app.scss的布局。CSS需求订单 - 资产管道

控制器动作有render layout: 'default_app'。 在default_app.html.erb,= stylesheet_link_tag 'default_app', params[:controller]中,应该首先指示布局样式表。

这里的问题是,内default_app.scss,我定义了一组常量的颜色,如:$red: #aaa但是当我内feeds.scss使用$red,这是不确定的。这没有意义,因为不应该在页面之前需要布局样式(查看特定的CSS)?

app 
- assets 
    - stylesheets 
    - newsfeeds 
     - feeds.scss (want to use colors here) 
    - default_app.scss (defined colors here) 
- controllers 
    - newsfeeds_controller.rb 
- views 
    - newsfeeds 
    - feeds.html.haml 
    - layouts 
    - default_app.html.haml (= stylesheet_link_tag 'default_app', params[:controller]) 
+0

可以告诉你实际的代码和文件,你”需要在哪里? – Clam

+0

用目录编辑。希望有帮助。 – Jeff

+0

Scss变量在编译前使用实际样式表标签之前被替换,您必须将配置提取到另一个文件并将其包含在每个使用变量的.scss中 – arieljuod

回答

1

Scss变量在编译时处理,你使用它们的顺序实际上并不重要的变量,因为在代码链接到.css文件中,变量已被资产管道上的scss编译器取代,feeds.css.scss不知道$ red是什么意思,因为它是在另一个文件中定义的。

您必须在使用它们的每个.scss文件中包含这些变量。

_colors.css.scss

$red: #ff0000; 
$blue: #0000ff; 
$gree: #00ff00; 

default_app.css.scss

@import('colors'); 
.something { 
    color: $red; 
} 

feeds.css.scss

@import('colors'); 
.other_thing { 
    color: $red; 
    background: $blue; 
} 
+0

在另一个工作实现中,我定义了'application.scss'中的颜色,然后在'application.scss'中导入了使用颜色与@import('newsfeeds/feeds)'所需的样式表。这是因为我已经在导入上方定义了颜色之后专门导入了样式表? – Jeff

+0

如果您在application.css.scss中导入feeds.css.scss,那么您不需要在样式表标签上添加feeds.css,因为在编译后,feed的内容将在application.css中结束(或者具有相同的css两次,一次在application.css中,一次在feeds.css中)。是的,它的工作原理是在声明$ red后导入了feed。 – arieljuod

+0

无论如何,将主要css文件之外的变量移动到其他位置也是一种很好的做法,更好的可维护性和灵活性 – arieljuod

0

这是我的第一枪。 我不确定你在做什么与params[:controller]。该stylesheet_link_tag采用源作为参数,在这里看到 http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/stylesheet_link_tag

这将是一个默认设置 - stylesheet_link_tag "style", media: "all"

如果您正在寻找控制器具体的例子 - 看到这里的例子 http://guides.rubyonrails.org/asset_pipeline.html

“你可以也可以选择仅在其各自的控制器中包含控制器特定样式表和JavaScript文件,使用以下内容:“

<%= javascript_include_tag params[:controller] %> or <%= stylesheet_link_tag params[:controller] %> 

通过application.css给2.4节(http://guides.rubyonrails.org/asset_pipeline.html)阅读你正在处理主布局CSS的位置。这应该指向你正确的方向。这可能是由于你如何要求文件。如果你仍然坚持,随时显示你如何要求文件

+0

使用'params [:controller]',我_opt只在各自的controllers_(来自文档)中包含控制器特定的样式表。 'stylesheet_link_tag'是我需要我的样式表的唯一地方,但是我按照'default_app'和_then_''params [:controller]'的顺序放置它,所以我期望'default_app.scss'中的常量被定义为在'params [:controller]'stylesheets中的用法。这不是这种情况,所以我想知道是否两个不同的样式表需要在同一时间而不是线性。 – Jeff