Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css rails 3中特定于控制器的样式表:继承_Css_Ruby On Rails_Sass - Fatal编程技术网

Css rails 3中特定于控制器的样式表:继承

Css rails 3中特定于控制器的样式表:继承,css,ruby-on-rails,sass,Css,Ruby On Rails,Sass,首先,我是rails的新手。我正在rails网站上工作。它有三个控制器,即 应用程序控制器、静态页面控制器和用户控制器。它们在app/assets/stylesheets/中都有各自的css(scss)文件(application.css和users.css.scss) 除了静态页面和控制器之外,还有一个自定义的.css.scss用于总体布局或公共元素。我使用了前面提到的特定于控制器的样式表 我的问题是: 1) custom.css中的css规则是否适用于除我在单独的控制器css中明确定义的那

首先,我是rails的新手。我正在rails网站上工作。它有三个控制器,即 应用程序控制器、静态页面控制器和用户控制器。它们在app/assets/stylesheets/中都有各自的css(scss)文件(application.css和users.css.scss) 除了静态页面和控制器之外,还有一个自定义的.css.scss用于总体布局或公共元素。我使用了前面提到的特定于控制器的样式表

我的问题是:

1) custom.css中的css规则是否适用于除我在单独的控制器css中明确定义的那些视图之外的所有控制器视图

2) 如果是,那么我在custom.css.scss和users.css.scss中都定义了一个规则

custom.css.scss-正文{背景色:color1;}

users.css.scss-正文{背景色:color2;}

但静态页面、控制器和用户控制器中的视图仍显示背景色2。我哪里做错了?只有用户控制器中的视图必须显示color2,而静态页面控制器必须显示color1。

这里并不能完全说明真相。它说:

您应该将控制器特有的任何JavaScript或CSS放在它们各自的资产文件中,因为这些文件可以仅为这些控制器加载,并带有诸如或之类的行

现在,您可以按照他们的建议执行操作,并为每个控制器加载特定的样式表,但它不能像他们建议的那样开箱即用。忽视了你必须做的几件事

  • 您需要从application.css中删除
    /=require_树。
    指令,该指令保留不变,将加载文件夹中的所有其他资产。这意味着每个页面都将加载users.css,如果您像在他们的示例中那样添加控制器特定的样式表行,它将加载控制器样式表两次

  • 您需要告诉Rails预编译各个文件。默认情况下,预编译器将忽略除application.css之外的所有*.css文件。要解决此问题,您必须编辑配置以执行以下操作:

    # in environments/production.rb
    # either render all individual css files:
    config.assets.precompile << "*.css"
    # or include them individually
    config.assets.precompile += %w( users.css static_pages.css )
    
    // in application.css (or some other commonly loaded file)
    background-color: $color1;
    
    // in users.css.scss
    body.controller-users {
      background-color: $color2;
    }
    
    // and so on...
    
    然后在布局中,将控制器名称添加到body类,如:

    <body class="controller-<%= params[:controller] %>">
    
    
    

    这样,您的样式将通过名称空间解析,而不仅仅是加载顺序。此外,使用此解决方案,您仍然可以继续加载单独的特定于控制器的样式表(如果需要),或者您可以忘记这一点,让所有内容都像默认情况那样编译到application.css中。将为每个页面加载所有样式,但只应用特定于控制器的样式。

    在Rails 4.x中

    您必须在config/environment.rb中添加这些行

    config.assets.precompile这是一个很好的答案,更重要的是,它需要一个良好的实践,这在社区中是普遍存在的,它显示了它的缺点,并提出了一个更好的替代方案。非常感谢!!第页(行动?)此的特定版本:,然后标记为(正确的IMHO)的副本。相关:
    <body class="controller-<%= params[:controller] %>">