Onl*_*ere 22 css ruby-on-rails sass ruby-on-rails-3.1
使用Rails 3.2.1
我使用命令创建了一个名为Home的简单控制器:
rails g controller Home index
Run Code Online (Sandbox Code Playgroud)
它为我创建了一个新的控制器和视图:

注意有两个样式表,一个是"应用程序",另一个是"主页".我找不到任何文档来支持这个假设,但我猜你把样式只应用于Home.css.scss文件中的"Home"视图,对吗?
因此,作为测试,我在Application.css.scss.erb中添加了一些全局样式并运行了应用程序.
样式按预期应用.
接下来,我在Home.css.scss文件中添加了一些规则,并访问了一个"Home/index"视图,但该文件中的样式未附加,既不作为单独的CSS引用链接,也不附加到单个Application.css.scss文件.这对我来说非常困惑,因为评论说:
// Place all the styles related to the Home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
Run Code Online (Sandbox Code Playgroud)
为什么Home.css.scss中写的规则不适用于我的网站?
ben*_*001 71
它可以这样工作,马雷克是非常正确的,答案在指南中.在第2.1节的介绍中:
例如,如果你生成一个
ProjectsController,Rails也会在app/assets/javascripts/projects.js.coffee另一个位置添加一个新文件app/assets/stylesheets/projects.css.scss.您应该将任何JavaScript或CSS唯一的控件放入其各自的资产文件中,因为这些文件可以仅为这些控制器加载,例如<%= javascript_include_tag params[:controller] %>或<%= stylesheet_link_tag params[:controller] %>.
因此,要将应用程序设置为加载控制器特定的样式表:
首先,通过删除application.css清单中的任何额外要求来禁用所有样式表的默认加载.
通常,您会看到如下条目:
*= require_tree .
Run Code Online (Sandbox Code Playgroud)
如果您仍想加载一些常见的css文件,可以将它们移动到子目录并执行以下操作:
*= require_tree ./common
Run Code Online (Sandbox Code Playgroud)
其次,在您的应用程序的布局中添加建议的stylesheet_link_tag,例如
<%= stylesheet_link_tag "application", :media => "all" %>
<%= stylesheet_link_tag params[:controller] %>
Run Code Online (Sandbox Code Playgroud)
在此示例中,我们首先加载应用程序css文件,然后加载与当前控制器名称匹配的任何css文件.
fra*_*zon 14
我用一个简单的解决方案解决了这个问题.我将body控制器名称添加为类,编辑views/layouts/application.html.slim:
body class=controller.controller_name
Run Code Online (Sandbox Code Playgroud)
或者views/layouts/application.html.erb:
<body class="<%= controller.controller_name%>">
Run Code Online (Sandbox Code Playgroud)
然后在我的CSS中我只是body.controller_name用作命名空间:
/* example for /users/ */
body.users {
color: #000;
}
body.users a {
text-decoration: none;
}
Run Code Online (Sandbox Code Playgroud)
对于小型项目,我认为没关系.
长话短说:
忽略该评论,它不是 Sass 做出的。但是将:
@import "*";
放入你的application.css.scss文件中,它会自动导入所有控制器scss文件。
完整阅读:
免责声明:这是我目前对使用和不使用 Sass 的资产管道流程的理解。
我认为这个评论是由标准 Rails Asset pipeline (sprockets) 写的,而不是 Sass 写的:
// Place all the styles related to the Home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
Run Code Online (Sandbox Code Playgroud)
标准管道将处理 scss 文件,但不假定application.css。.scss文件。但是如果您使用 Sass 创建这样的文件,那么 Sass 会将其编译为application.css文件。
如果您使用普通的 Rails 资源管道,而不使用 Sass,则 sprocket 会自动将 css 文件加载到application.css*= require_tree .文件中(如果该文件中有默认行)。
当您使用 Sass 时,带有application.css。scss文件,Sass 会将这个文件编译成application.css文件。(我认为它会覆盖或优先于您已有的任何 application.css 文件)。
要自动包含您的home.css.scss文件(和其他控制器文件),请将此行放入您的application.css.scss文件中:
@import "*";
Run Code Online (Sandbox Code Playgroud)
作为参考,请参阅这个问题: Is it possible to import a整个目录在 sass using @import?