【问题标题】:Can I use CSS assets and the public folder in the same app?我可以在同一个应用程序中使用 CSS 资产和公用文件夹吗?
【发布时间】:2012-10-23 00:57:03
【问题描述】:

我有一个旧应用程序,我想迁移它以使用 Rails 3 资产管道。我有超过 100 个样式表,这些样式表是使用

逐个模板导入的
content_for :stylesheets

阻止。

将它们全部编译到一个样式表中目前还不是很受欢迎,因为编写代码时只希望某些页面上的某些样式表,例如登录页面导入一个重新定义文章形式的样式表。在所有页面上重新定义它并不好。

有没有办法慢慢迁移到资产管道,让应用首先查找已编译资产,然后将其故障转移到 public/stylesheets 目录?

【问题讨论】:

  • 可能你可以添加到预编译css的配置中,
  • 我曾想过制作一个巨大的数组并预编译所有资产,但感觉这不是正确的处理方式......
  • 好吧,也许你可以把它放到 public/stylesheet 目录中, 看看这是否适合你。

标签: css ruby-on-rails ruby-on-rails-3


【解决方案1】:

如果您想“正确”地执行此操作,那么无需花费大量精力的一件事就是在您的 <html><body> 标记上放置一个类名,并将您的 CSS 文件的内容包装为一个选择器。例如,我在ApplicationController 中使用了类似于以下内容的内容。

before_filter :body_class

def body_class
  controller_name = self.class.name.gsub(/Controller$/, '')
  if !controller_name.index('::').nil?
    namespace, controller_name = controller_name.split('::')
  end

  @body_classes = ["#{controller_name.underscore}_#{action_name} ".downcase.strip]
  @body_classes = ["#{namespace.underscore}_#{@default_body_classes.join}".strip] if !namespace.nil?
end

然后,在我的布局中,我有类似的东西

<body class="<%= @default_body_classes.join(' ') %>">

接下来,您可以将所有样式表的扩展名更改为.css.scss。将它们全部放在新的app/assets/stylesheets 目录中。要快速包含它们(尽管可能出现乱序),请添加

/*
 * =require_tree .
 */

到新的app/assets/application.css.scss 文件的顶部。只需在您的布局中包含这个application.css 文件即可。

<%= stylesheet_link_tag "application", :media => 'screen' %>

最后,花一些时间浏览您的样式表,用适当的主体类包装每个文档的整体。例如,如果您有一个特定于某个User::Admin 控制器的signup 操作的样式表,您可以用

包裹整个样式表
.user_admin.signup {
  /* Your stylesheet's content here */
}

Sass 将使用 .user_admin.signup 类正确地为所有嵌套内容添加前缀,该类将在呈现该操作时附加到您的 &lt;body&gt; 标记。

我意识到这并不是您正在寻找的真正的中间修复,但是按照与此类似的步骤,您应该能够毫不费力地完成 95% 的工作,并且会“正确”完成”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2023-02-04
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多